freemarker - 如何在 freemarker 中打印除第一页以外的所有页面上的表格标题

标签 freemarker

我修改了原来的问题,因为我是新人,还无法回复自己的问题...但这是我重新编写的问题,包含更多编码:

我将其用作 NetSuite 的一部分,NetSuite 是我们公司使用的会计/订购/CRM 工具。我们可以使用他们的表单创建工具来定制我们自己的估算,该工具结合了 freemarker、html 和 xml 来创建我们的估算。

我设计了一个漂亮的估计,在这个估计中我可以从数据库中调用变量。基本上是运输/账单信息、估算中的项目,今天我可以添加页码(第 1 页,共 5 页或第 3 页,共 5 页),并使用页脚将它们放在底部。不过,我也想这样做,这样如果我的估计运行多个页面,我可以在顶部打印标题,这样您就可以看到“数量、描述、价格”,正如我所解释的那样。

现在...我不太确定宏的用途,这就是我编写页码并将它们放在页脚上的方式,我将稍后展示其代码。

我想做类似的事情,这样我就可以说“如果我们不看第 1 页,则打印此标题,但如果我们看第 1 页,请不要打印标题”,所以我想我可以这样做该页 = 页 + 1,因此它不断增加。这个想法适用于我的估计的其他部分(例如,列出的每个项目都在估计的单独行上,并且我实际上使用该方法打印行号,但稍后通过系统在其自己的例程中运行列表功能)....

因此,任何帮助使其适用于我的 HEADER 将不胜感激。我希望我可以做一些简单的事情,例如“page = PAGENUMBER”,但由于某种原因我无法利用内置的 pagenumber 变量,它不太能那样工作......这就是我所拥有的,简化的庄园:

<!--?xml version="1.0"?-->
<pdf>
 <head>
  <style type="text/css">
    STYLES HERE
  </style>

  <macrolist>
    <macro id="footer">
      <hr></hr>
      <table border="0" width="100%">
       <tr>
        <#setting time_zone="America/New_York">
        <td align="left">${.now}</td>
        <td align="right">Page <pagenumber/> of <totalpages/></td>
       </tr>
      </table>
      <hr></hr>
    </macro>
  </macrolist>

 </head>
 <body footer="footer" footer-height="12mm">

  REGULAR HTML HERE FOR OUR COMPANY

  <#if (record.item?size > 0)>

  <table class="border" width="100%" cellpadding="2">

  <#assign line = 0>
  <#list record.item as item>
  <#if item_index==0>

   <tr>
    <td width="5%" class="border4" valign="center"><b>Ln #</b></td>
    <td width="5%" class="border4" valign="center"><b>Qty</b></td>
    <td width="66%" class="border4" valign="center"><b>Description</b></td>
    <td width="12%" class="border4" valign="center" align="right"><b>Unit Price</b></td>
    <td width="12%" class="border5" valign="center" align="right"><b>Ext. Price</b></td>
   </tr>

  </table>

  <table width="100%" cellpadding="7">

  </#if>

   <tr>

    <#assign line = line + 1>
    <td width="5%" valign="top">${line}</td>
    <td width="5%" valign="top">${item.quantity}</td>
    <td width="71%" valign="top">${item.description?html}<br /><i>Manuf. Part #: ${item.item.text}</i></td>
    <td width="12%" valign="top" align="right">$${item.rate}</td>
    <td width="12%" valign="top" align="right">$${item.amount}</td>

   </#if>

   </tr>

  </#list>

  </table>

  </#if>

MORE HTML FOR OUR COMPANY HERE

 </body>
</pdf>

综上所述,对于如何利用“LN #、数量、描述、单价、附加价格”作为第 2 页及以后的页眉,有什么想法吗? (第 1 页顶部有我们的信头和我们公司的一些其他 html 编码)

最佳答案

正如 Yvan 所指出的,这不是一个 freemaker 问题,而实际上是一个 问题。正如 Shaun 所指出的,您可以使用 #pagen 的 CSS id 选择器来设置给定页面的页眉/页脚。这样做的问题是,我见过的所有现有文档都表明,如果您使用 #pagen CSS 选择器,那么您还必须为每个其他页面定义 CSS。例如...

/* If */
#page1 {
  header: empty-header;
  header-height: 0px;
}
/* Then */
#page2, #page3, #page4, ... #pagen {
  header: default-header;
  header-height: 10mm;
}

您基本上必须猜测最大页面大小是多少,并为每个页面添加一个 CSS 选择器。增加到 10 页左右可能就足够安全了,因为说实话,谁会订购 11 页的订单,对吧?

好吧,如果这不适合您,或者您只是不喜欢这样的硬编码限制,那么我相信我有一个替代方案。如果在 <body> 上定义默认 header 标签。然后为您需要的页面(即您的情况下的页面 1)定义 #pagen CSS 选择器,但使用 !important CSS 属性你会得到想要的结果。例如,这应该可以解决问题......

<!--?xml version="1.0"?-->
<pdf>
 <head>
  <style type="text/css">
    #page1 {
      header: empty-header !important;
      header-height: 0px !important;
    }
  </style>

  <macrolist>
    <macro id="empty-header">
       <!-- Nothing to look at here -->
    </macro>
    <macro id="default-header">
       <!-- Header HTML for all but first page -->
    </macro>
  </macrolist>
 </head>
 <body header="default-header" header-height="12mm">
   <!-- Page body HTML -->
 </body>
</pdf>

关于freemarker - 如何在 freemarker 中打印除第一页以外的所有页面上的表格标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18240502/

相关文章:

java - Spring Boot + FreeMarker + RestController 加载模板

javascript - 带有双引号表达式的 js_string

classpath - 无法解析模板加载器路径 Freemarker

javascript - 如何将freemarker列表中包含特殊字符的复杂元素解析为javascript数组

spring - 如何在 Freemarker 模板中访问 Spring 应用程序属性?

java - Freemarker 在读取 ftl 文件时转换 HTML ISO 标签

java - Spring Boot自定义登录页面显示404

java - 如何获得对标签父级的引用?

java - Spring Boot 与 Freemarker - 表单标签

java - 在 ArrayList Freemarker 中迭代 hashmap