我修改了我原来的问题,因为我是新手,现在还不能回复我自己的问题......但是这里重新编写了我的问题,编码更多:
我将此作为NetSuite的一部分使用,NetSuite是我们公司使用的会计/订购/ CRM工具。我们可以使用表单创建工具自定义我们自己的估算值,该工具采用freemarker,html和xml的组合来创建我们的估算值。
我设计了一个漂亮的估计,在这个估计中,我可以从数据库中调用变量。基本上是运输/账单信息,估计项目和今天我能够添加PAGE NUMBERS(第1页,共5页或第3页,共5页)并使用FOOTER将它们放在底部。但是我也想这样做,这样如果我的估计会运行多个页面,我可以在顶部打印一个标题,这样你就会看到“数量,描述,价格”。正如我所解释的那样。
现在......我不确定宏的用途是什么,这就是我编写页码并将它们放在页脚上的方法,我将稍微展示一下代码。
我想做类似的事情以便我可以说“如果我们不看第1页,打印THIS标题,但如果我们正在查看第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#,QTY,DESCRIPTION,UNIT PRICE,EXT.PRICE”作为第2页和第2页标题的任何想法? (第1页我们的信头在顶部,其他一些html编码为我们公司)
答案 0 :(得分:1)
我不知道macro
和macrolist
是什么(不是FreeMarker),但我猜你不应该count
初始化为0
,除非它还没有未定义。也就是说,您可以编写#assign
而不是那两个<#assign count = (count!0) + 1>
- s。当然,FreeMarker Environment
的生命周期看起来很重要,因为如果你开始一个新的count
,Environment
的价值将会丢失(如致电Template.process
)。
答案 1 :(得分:0)
我也在使用NetSuite,遇到了类似的问题。我不认为你的问题与Freemarker有关,而是与Big Faceless Organization(BFO)有关。 Freemarker准备xml,BFO将其转换为PDF。 有关BFO的更多信息,请访问:http://bfo.com/products/report/。这就是你有标题/页脚/宏的概念。
阅读“用户指南”第35页的“表格分页 - 页眉和页脚”,其中介绍了如何重新打印表格中的标准页眉或页脚行。
该表必须是顶层才能工作(即不在另一个表中。)
答案 2 :(得分:0)
我还不知道您问题的答案,但我可以告诉您可能可以在Big Faceless PDF Library用户指南中找到,而不是Freemarker ...
答案与特殊宏的应用有关:
为了在页面上显示页眉和页脚,报告生成器引入了“宏”的概念 - 一个XML块,可以是 在整个文件中重复多次。 有三种不同类型的宏属性,可以在BODY或PBR元素上使用,为每个元素设置一个宏 页面,或使用样式表中的#pagen条目为特定页面。
- 标题&gt;设置页面标题
- 页脚&gt;设置页面的页脚
- background-macro&gt;设置页面的背景
宏在MACROLIST内的文档的HEAD中定义。每个宏都必须有一个ID,这是后面文档中引用的ID。这是一个在每个页面上设置标准页脚的示例:
<pdf>
<head>
<macrolist>
<macro id="myfooter">
<p align="center">
Page <pagenumber/> of <totalpages/>
</p>
</macro>
</macrolist>
</head>
<body footer="myfooter" footer-height="20mm">
Document contents here
</body>
</pdf>
“footer”属性是宏的ID,“footer-height”属性是页脚所需的高度。如果是文件 内容需要几页,页脚将放在每个页面上,除非有一个PBR元素更改页脚(或 通过设置footer =“none”将其删除。 “header”属性的使用方法与在每个页面顶部设置标题的方式相同。
答案 3 :(得分:0)
我知道这个问题的答案来得很晚,但是当我试图弄清楚同一件事时,我从拉斯的答案和BFO文档中了解了答案。希望这会帮助正在寻找相同信息的其他人。使用样式属性和#pagen ID可以将页眉或页脚设置到特定页面。 nlfooter
是页脚宏的名称。我仅将此页脚应用于第一页。这是我用来仅将页脚应用于首页的代码。
<style type="text/css">
#page1 {
footer: nlfooter;
footer-height: 10%;
}
</style>
Russ的评论以及BFO文档的引用使我意识到了这一点。这是添加了重点的报价。
存在三种不同类型的宏属性,可以在BODY或PBR元素上使用它们来为每个页面设置宏,或者通过在样式表中使用#pagen条目为特定页面设置。 / em>
答案 4 :(得分:0)
正如 Yvan 所指出的,这不是一个自由制作者的问题,而是一个 bfo 的问题。正如 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>
标签上定义了默认标头。然后为您需要的页面(或页面)定义 #pagen CSS 选择器(即您的情况下的第 1 页),但使用 !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>