Java Freemarker、PDF、页眉/页脚和分页符

Java Freemarker、PDF、页眉/页脚和分页符,java,header,footer,freemarker,Java,Header,Footer,Freemarker,Freemarker的一个常见用法是生成PDF 不幸的是,我不得不生成一个包含大量页面的pdf,“他们”要求我在页眉中添加一些信息,在页脚中添加一些内容,如“第2/60页”等 在网上搜索时,我发现了如何创建宏模板,但它只共享一些常见的标记(如css),但并没有告诉freemarker如何管理多页PDF 除此之外,有时我在ftl内部有一个“分页css类”,所以我无法确定何时何地创建新页面 我在Java上使用FreeMaker 2.3 感谢您的帮助。您可以使用CSS指定页眉和页脚(包括页码)。 如果

Freemarker的一个常见用法是生成PDF

不幸的是,我不得不生成一个包含大量页面的pdf,“他们”要求我在页眉中添加一些信息,在页脚中添加一些内容,如“第2/60页”等

在网上搜索时,我发现了如何创建宏模板,但它只共享一些常见的标记(如css),但并没有告诉freemarker如何管理多页PDF

除此之外,有时我在ftl内部有一个“分页css类”,所以我无法确定何时何地创建新页面

我在Java上使用FreeMaker 2.3


感谢您的帮助。

您可以使用CSS指定页眉和页脚(包括页码)。 如果用于将XHTML转换为PDF字节数组的工具支持分页媒体指令,那么这将起作用

在CSS中:

@page { 
    @top-center {content: element(header)}      /* Header */
    @bottom-center {content: element(footer)}   /* Enpied */
}
#header {position: running(header);}
#footer {position: running(footer);}
#pagenumber:before {content: counter(page);}
#pagecount:before {content: counter(pages);}
在HTML中:

<div id="header">YOUR HEADER HERE</div>
<div id="footer">Page <span id="pagenumber" /> / <span id="pagecount" /></div>
您的标题在这里
第页/

我只将Freemarker用于模板引擎,而Smarty用于PHP。我想和POI把它用于PDFIt不是我的选择。他们使用freemarker,所以我必须这样做。你用freemarker生成了什么?一个HTML文档,然后用另一个工具转换成PDF,或者直接转换成PDF文档?我们从由地图填充的HTML开始,以匹配freemarker占位符:最终字符串xhtml=createXHTML(“foo.ftl.HTML”,mapFullOfThings);然后我们创建一个字节[]“pdf”,最后handler=newResourceStreamRequestHandler(newbyteArrayResourceStream(pdf,“application/pdf”);您的描述中缺少一个步骤。Freemarker生成一个HTML文档(字符串xhtml变量)。然后将此HTML转换为PDF(byte[]PDF变量)。您使用什么工具进行此转换?使用此解决方案,我在第一页有页眉,在最后一页有页脚,文本为:“page 54/54”。XHTML函数仅为:Template Template=freemarkerConfig.getTemplate(Template name+”.ftl.html),Constants.DEFAULT_ENCODING);StringWriter编写器=新的StringWriter();模板。流程(内容的映射,编写者);返回writer.toString();Template是freemarker类:package freemarker.Template;