如何使用'saveas'函数将pdf文件发送到客户端?开瓶器 |奥多



我写了一个模块来消费。wsdl webservice,使用python suds库,该服务返回base64的PDF文件,我能够将此文件保存在二进制字段中,所以我想要一个按钮来下载这个文件在客户端,我怎么能做到这一点?我正在阅读,我可以使用'saveas'方法上可用的'/web/controllers/main.py',但这是一个控制器方法,我怎么能通过一个按钮动作调用它?我想不明白!我将感激你能给我的任何帮助!谢谢!

如果你在后端添加一个按钮,你希望下载你的pdf。您将无法访问模板结构。您可以使用如下示例所示的技术来解决这个问题。

你需要一个链接,你可以围绕一个按钮(什么都不做),你可以使用javascript,如果你需要操作href(添加一个query_string或传递任何数据到你的控制器。因为您将链接定义为target=_blank并提供下载名称,所以无论您从控制器函数获得什么响应,浏览器都会尝试下载。

<a id="pdf_download_link" href="/controller/url/path" target="_blank" download='my_pdf_file.pdf'>
    <button class="oe_stat_button" 
            type="action" 
            icon="fa-print" 
            name="print_pdf_function" 
            string="Download PDF" 
            help="Download PDF File"/>
</a>
<script>
    $(document).ready(function(){
        var controller_url = ...
        $("#pdf_download_link").attr("href", controller_url);    
    });
</script>

你的模型不需要动作函数print_pdf _function。在Odoo8(不确定Odoo9)中,按钮会点击,但它不会找到动作函数,但是url会触发控制器的响应。

你的controller.py文件

@http.route('/controller/url/path', auth='user', website=True)
def download_pdf_method(self, **kwargs):
    your_method = ...
    return file

在你的控制器中,你需要从你的模型中访问二进制文件,并在响应链接请求时返回它。

我在自己的模块中使用它。我使用javascript来操纵我的link href,以便我将适当的记录传递给我的控制器。但是,您可以查询请求对象并确定记录id或您需要的任何其他相关数据。同样,在链接中包装按钮也不是必要的,但是按钮看起来比纯文本链接要好得多。

我知道这不是传统的方法。您的另一种选择是将其保存为二进制文件,并使该文件在表单中可用。当二进制字段有数据时,Odoo后端表单的正常功能是提供下载链接。

最新更新