Odoo集合pdfjs实现在form表单上预览附件
  P2ITagOceBds 2023年12月22日 50 0

在本篇博客中,我们将讨论如何在Odoo的明细行中的表单视图打开时自动预览附件。这是一个非常实用的功能,尤其是当用户需要快速查看与记录相关的文档或图片时。我们将通过一个计算字段来实现这一功能,该字段将存储用于显示附件的iframe的HTML代码。

实现效果

Odoo集合pdfjs实现在form表单上预览附件_html

首先,我们需要在我们的模型中定义一个计算字段tracking_iframe,该字段的类型为Html。这个字段不会被清洗(sanitize=False),以确保我们可以插入iframe标签。我们将使用compute参数指定一个方法get_html来计算这个字段的值。

from odoo import models, fields, api

class YourModel(models.Model):
    _name = 'your.model'
    _description = 'Your Model Description'

    # 计算字段,用于存储iframe的URL
    tracking_iframe = fields.Html("Tracking Preview", sanitize=False, compute='get_html')

    @api.depends('invoice_image')  # 假设 'invoice_image' 是触发附件预览更新的字段
    def get_html(self):
        for record in self:
            # 查询附件
            attachment = self.env['ir.attachment'].search([
                ('res_model', '=', record._name),
                ('res_id', '=', record.id),
                ('res_field', '=', 'invoice_image')  # 根据实际字段名更改
            ], limit=1)

            if attachment:
                # 构造PDF.js预览URL
                base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
                src = f"{base_url}/web/static/lib/pdfjs/web/viewer.html?file=/web/content/{attachment.id}?model%3Dir.attachment#pagemode=none"
                # 生成iframe HTML
                record.tracking_iframe = f'<iframe class="attachment_preview_iframe" width="900px" height="600px" frameborder="0" src="{src}"></iframe>'
            else:
                record.tracking_iframe = False

在上述代码中,get_html方法会遍历当前模型的每条记录,搜索与该记录相关联的附件。如果找到附件,我们将使用Odoo内置的PDF.js库来构造一个预览URL,并将其嵌入到一个iframe中。然后,我们将这个iframe的HTML代码赋值给tracking_iframe字段。

接下来,我们需要在表单视图中添加这个字段,以便用户可以看到附件的预览。

<odoo>
    <data>
        <record id="view_form_your_model" model="ir.ui.view">
            <field name="name">your.model.form</field>
            <field name="model">your.model</field>
            <field name="arch" type="xml">
                <form string="Your Model">
                    <!-- 其他字段 -->
                    <field name="tracking_iframe" widget="html" nolabel="1" />
                </form>
            </field>
        </record>
    </data>
</odoo>

在表单视图的XML定义中,我们添加了tracking_iframe字段,并指定了widget="html"以确保HTML内容能够正确显示。nolabel="1"属性用于隐藏字段的标签。

这样,当用户打开明细行的表单视图时,如果存在相关的附件,它将自动显示在预览iframe中。这为用户提供了一种快速方便的方式来查看和验证附件内容,无需离开当前视图或进行额外的点击操作。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月22日 0

暂无评论

推荐阅读
  wURKzOHw9Irf   2023年12月24日   26   0   0 HTMLicoicohtml
  8l4CZpTOKa7P   2023年12月26日   38   0   0 htmlhtml
  dwHry2iKGG0I   2023年12月26日   31   0   0 githubgithubhtmlhtml
  9J4CFPeHjrny   2023年12月24日   29   0   0 字段Java字段Java
P2ITagOceBds