如何创建具有动态高度的纸张格式记录?

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 的唯一方法是页面的 页边距