代码之家  ›  专栏  ›  技术社区  ›  forvas

如何创建具有动态高度的paperformat记录?

  •  2
  • forvas  · 技术社区  · 8 年前

    我做了一份新的报告 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票据的纸张格式,其高度为 150毫米 ,我想这对长款收据不太管用。该报告没有调用经典的页眉布局,但它有自己的页眉,我认为在每个页面的顶部都会重复该页眉(如果票证长度超过150mm)。所以我猜一张长票,比如20行,会被打印在这样的纸卷上: 7行-收割台-7行-收割台-6行 (假设只有7行适合150mm),当它应该这样打印时: 收割台-20行 .

    我试过一些基本的东西,比如 <field name="page_height">-1</field> (给出错误)或 <field name="page_height">0</field> (忽略设置的高度和宽度)。

    然后我读了这篇帖子: How to Dynamic change paper format margins (Left, Right, Top, Bottom)?

    所以我继承了 get_pdf 方法,现在我在一个变量中有了paperformat记录集和HTML代码,但我不知道我是否在浪费时间尝试测量第二个记录集的高度来修改paperformat高度。

    有人知道实现我目标的最佳方式吗?任何帮助都将不胜感激,谢谢!

    1 回复  |  直到 8 年前
        1
  •  2
  •   forvas    8 年前

    我遇到了这样的问题,因为我不需要在其他 页数,我不想看到首页和第一行之间的边距 在第二页。我所做的是避免使用提供的外部布局 通过Odoo创建新的纸张格式,无页眉和页脚:

        <!-- 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> ,定义我自己的标题,以便在整个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 为了删除外部布局,或者,可以使用此技术定义新的报告。

    请注意,删除页眉和底部空间的唯一方法是 页边距 .