PDF 生成模板编辑器
开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。
通过 CHtmlHeaderFooterOptions 和 setHeaderFooterOptions(),可在每页上、下边距区域渲染独立的 HTML 模板。将 displayHeaderFooter 设为 true,并为模板预留足够的上下边距。模板宽度或高度超出可用区域时,转换会失败;应增加边距或缩小模板。
下面的示例将第一个实际页面作为封面:隐藏封面的页眉页脚,并从第二个实际页面开始编号为 1。
import CPDFGeneration.CConverterProperties;
import CPDFGeneration.CHtmlConverter;
import CPDFGeneration.CHtmlHeaderFooterOptions;
CConverterProperties properties = new CConverterProperties();
try {
properties.setPageMargins(48, 40, 48, 40);
CHtmlHeaderFooterOptions options = new CHtmlHeaderFooterOptions();
options.displayHeaderFooter = true;
options.headerTemplate = "<div style='font-size:10px'>"
+ "<span class='title'></span></div>";
options.footerTemplate = "<div style='font-size:10px;text-align:right'>"
+ "<span class='date'></span> | "
+ "<span class='pageNumber'></span>/<span class='totalPages'></span></div>";
options.title = "Report";
options.skipLeadingTemplatePages = 1;
options.skipLeadingNumberedPages = 1;
properties.setHeaderFooterOptions(options);
CHtmlHeaderFooterOptions saved = properties.getHeaderFooterOptions();
System.out.println("Headers/footers enabled: " + saved.displayHeaderFooter);
CHtmlConverter.CErrorCode status = CHtmlConverter.ConvertToPdf(
"input.html", "header-footer.pdf", properties);
if (status != CHtmlConverter.CErrorCode.HTML_CONVERTER_SUCCESS) {
throw new IllegalStateException("HTML conversion failed: " + status);
}
} finally {
properties.release();
}| 字段 | 默认值 | 说明 |
|---|---|---|
displayHeaderFooter | false | 是否启用页眉页脚。 |
headerTemplate | 空字符串 | 页眉 HTML;空字符串使用默认页眉模板。 |
footerTemplate | 空字符串 | 页脚 HTML;空字符串使用默认页脚模板。 |
baseUri | 空字符串 | 模板资源的基础 URI;为空时使用正文资源目录。 |
title | 空字符串 | 显示的标题;为空时使用正文的 HTML 标题。 |
url | 空字符串 | 显示的 URL;转换没有来源 URL 的 HTML 时,应由调用方提供。 |
date | 空字符串 | 显示的日期;为空时使用本次转换的本地日期和时间。 |
skipLeadingTemplatePages | 0 | 隐藏前 N 个实际页面的模板,不改变编号。 |
skipLeadingNumberedPages | 0 | 前 N 个实际页面不计入编号且不显示模板,后续页面从 1 开始编号。 |
两个跳页数必须为非负数。同时设置时,前 max(skipLeadingTemplatePages, skipLeadingNumberedPages) 个实际页面不显示模板;编号只由 skipLeadingNumberedPages 决定。
模板支持通过 CSS 类名 date、title、url、pageNumber 和 totalPages 填充动态内容,例如 <span class='pageNumber'></span>。页码还支持文本占位符 和 。totalPages 不包含 skipLeadingNumberedPages 跳过的页面。
模板为空字符串时使用内置模板。需要明确留空某一项时,使用 <div></div>。模板支持的 HTML/CSS 以渲染器能力为准,不执行 JavaScript。
setHeaderFooterOptions() 会复制配置;之后修改传入对象不会改变属性。getHeaderFooterOptions() 返回独立副本,修改副本后需再次调用 setter 才能生效。邮件转 PDF 时,也可以通过 CConverterProperties 使用这些设置。