如何创建具有动态高度的纸张格式记录?
How to create a paperformat record with dynamic height?
我为 stock.picking
型号做了一份新报告,该报告始终使用 RJ-4040 Brother 打印机打印。所以我不得不创建一个宽度为102mm的新纸张格式并将其分配给报告:
<record id="paperformat_stock_picking_rj4040brother" model="report.paperformat">
<field name="name">RJ-4040 Brother</field>
<field name="default" eval="True"/>
<field name="format">custom</field>
<field name="page_height">297</field>
<field name="page_width">102</field>
<field name="orientation">Portrait</field>
<field name="margin_top">40</field>
<field name="margin_bottom">23</field>
<field name="margin_left">3</field>
<field name="margin_right">3</field>
<field name="header_line" eval="False"/>
<field name="header_spacing">35</field>
<field name="dpi">80</field>
</record>
可以正常使用,但问题是我必须为纸张格式设置高度,而该打印机的纸张是纸卷,其高度未定义。 POS机票也是这种情况,所以我去看了POS票的纸质格式,它的高度是150mm,我想这对长收据来说不太好用.该报告没有调用经典的 header 布局,但它有自己的 header,我认为它在每一页的顶部重复出现(如果票证长于 150 毫米)。所以我猜一张长票,例如 20 行,将打印成这样的纸卷:7 行 - header - 7 行 - header - 6 行(假设只有7行适合150mm),当它应该这样打印时:header - 20行。
我尝试了一些基本的东西,比如 <field name="page_height">-1</field>
(给出错误)或 <field name="page_height">0</field>
(忽略高度和宽度设置)。
然后我读了这个post:How to Dynamic change paper format margins (Left, Right, Top, Bottom)?
所以我继承了get_pdf
方法,现在我有paperformat记录集和变量中的HTML代码,但我不知道我是否在浪费时间尝试测量第二个的高度,之后修改paperformat的高度。
有谁知道实现我的目的最好的方法是什么?任何帮助将不胜感激,谢谢!
当我不需要其他页面 header 时,我遇到了这样的问题
页面,我不想要首页和第一行之间的边距
在第二页。我所做的是避免使用提供的外部布局
通过 Odoo 并创建一个没有 header 和页脚的新纸张格式:
<!-- 0 mm header and 0mm bottom and less height -->
<field name="page_height">150</field>
<field name="margin_top">0</field>
<field name="margin_bottom">0</field>
我在 <page>
的标签之后写了我的报告,定义了我自己的 header 以便在整个 PDF 中每条记录呈现一次。
<page>
<div class="new_header" style="margin-top: 1%;"> <!-- Margin-top here replaces the margin_top of the paper format -->
<!-- my header code here -->
<!-- don't user <header> element or class="header" because odoo will render it in the header section by default -->
<div>
我希望你明白了,它需要一些 xpath
的技巧来删除外部布局,或者,你可以用这个技巧定义一个新的报表。
请注意,删除 header 和底部的 space 的唯一方法是页面的 页边距 。
我为 stock.picking
型号做了一份新报告,该报告始终使用 RJ-4040 Brother 打印机打印。所以我不得不创建一个宽度为102mm的新纸张格式并将其分配给报告:
<record id="paperformat_stock_picking_rj4040brother" model="report.paperformat">
<field name="name">RJ-4040 Brother</field>
<field name="default" eval="True"/>
<field name="format">custom</field>
<field name="page_height">297</field>
<field name="page_width">102</field>
<field name="orientation">Portrait</field>
<field name="margin_top">40</field>
<field name="margin_bottom">23</field>
<field name="margin_left">3</field>
<field name="margin_right">3</field>
<field name="header_line" eval="False"/>
<field name="header_spacing">35</field>
<field name="dpi">80</field>
</record>
可以正常使用,但问题是我必须为纸张格式设置高度,而该打印机的纸张是纸卷,其高度未定义。 POS机票也是这种情况,所以我去看了POS票的纸质格式,它的高度是150mm,我想这对长收据来说不太好用.该报告没有调用经典的 header 布局,但它有自己的 header,我认为它在每一页的顶部重复出现(如果票证长于 150 毫米)。所以我猜一张长票,例如 20 行,将打印成这样的纸卷:7 行 - header - 7 行 - header - 6 行(假设只有7行适合150mm),当它应该这样打印时:header - 20行。
我尝试了一些基本的东西,比如 <field name="page_height">-1</field>
(给出错误)或 <field name="page_height">0</field>
(忽略高度和宽度设置)。
然后我读了这个post:How to Dynamic change paper format margins (Left, Right, Top, Bottom)?
所以我继承了get_pdf
方法,现在我有paperformat记录集和变量中的HTML代码,但我不知道我是否在浪费时间尝试测量第二个的高度,之后修改paperformat的高度。
有谁知道实现我的目的最好的方法是什么?任何帮助将不胜感激,谢谢!
当我不需要其他页面 header 时,我遇到了这样的问题 页面,我不想要首页和第一行之间的边距 在第二页。我所做的是避免使用提供的外部布局 通过 Odoo 并创建一个没有 header 和页脚的新纸张格式:
<!-- 0 mm header and 0mm bottom and less height -->
<field name="page_height">150</field>
<field name="margin_top">0</field>
<field name="margin_bottom">0</field>
我在 <page>
的标签之后写了我的报告,定义了我自己的 header 以便在整个 PDF 中每条记录呈现一次。
<page>
<div class="new_header" style="margin-top: 1%;"> <!-- Margin-top here replaces the margin_top of the paper format -->
<!-- my header code here -->
<!-- don't user <header> element or class="header" because odoo will render it in the header section by default -->
<div>
我希望你明白了,它需要一些 xpath
的技巧来删除外部布局,或者,你可以用这个技巧定义一个新的报表。
请注意,删除 header 和底部的 space 的唯一方法是页面的 页边距 。