
心理测评报告要导出为 PDF,往往同时包含文字解读、图表和跨页版式。技术选择要处理数据、模板、图表、字体与分页;其中任一项未在目标环境中核验,成品就可能偏离设计稿。
这类需求可以比较 Java 直接布局、HTML 转换器和浏览器打印三条路径。采用 HTML 模板加浏览器打印时,图表就绪、分页和字体覆盖需要成为单独的验收项。
PDFBox、iText 与直接布局 API
Apache PDFBox 可从零创建 PDF,并嵌入字体和图片。iText 的 pdfHTML 提供 HTML 转 PDF 的能力,同时公开列出了其支持与未支持的 HTML、CSS 特性。直接布局 API、HTML 转换器和浏览器打印都可以成为实现路径,选择时要对照报告版式、许可、运行资源、并发和现有技术栈。
// 直接布局 API 的简化示意
document.add(new Paragraph("心理测评报告", titleFont));
PdfContentByte cb = writer.getDirectContent();
cb.moveTo(100, 500);
cb.lineTo(400, 500);
cb.stroke();
当版式以大量绝对坐标实现时,图表位置或强调文字的细小调整通常需要修改生成代码并重新部署。HTML 模板可把一部分视觉样式移出业务代码,适合需要由设计与开发共同维护的报告页面。具体方案仍要通过真实报告样本确认。
HTML 模板与 Puppeteer 的浏览器打印
HTML 转 PDF 是一条可选路径:报告数据填入 HTML 模板后,再以打印媒体生成 PDF。Puppeteer 的 Page.pdf() 可按打印媒体类型生成 PDF;PDFOptions 列出纸张规格、背景图形、页边距和 CSS 页面尺寸优先级等选项。
- 准备模板:用 HTML 和 CSS 定义报告标题、解释文字、图表容器与打印样式。
- 数据注入:后端生成完整 HTML,并让图表和异步资源完成渲染。
- 生成与验收:在锁定版本的浏览器中调用
page.pdf(),再检查输出样本。
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setContent(htmlContent);
// 图表、远程资源和字体完成后,再调用 page.pdf()。
const pdfBuffer = await page.pdf({
format: 'A4',
printBackground: true,
});
await browser.close();
format: 'A4' 与 printBackground: true 分别控制纸张规格和背景图形。页边距、CSS 页面尺寸、字体加载和图表完成信号仍需由具体模板明确处理。示例只说明生成路径,不能代替项目对浏览器版本、数据注入和资源加载的设计。
分页、字体与生产样本验收
分页break-inside: avoid 用于避免生成框内部的分页、分栏或区域分割。旧的 page-break-inside 可作为兼容别名保留。容器高于可用页面高度时,仍要通过拆分、缩放或模板设计处理,并检查 PDF 样本。
.chart-container {
break-inside: avoid;
page-break-inside: avoid;
}
字体
部署产物应显式提供并验证获授权、覆盖所需字符的字体,固定字体版本与 CSS 字体栈。iText 关于语言支持的说明也把正确字体列为中英混排输出的前提。Noto CJK 仓库采用 SIL Open Font License 1.1;采用其他字体时,应核对该字体的许可、交付方式与字形覆盖。容器缺少所选字体或相应 CJK 字形时,PDF 可能出现缺字或替代字体。
生产验证
在实际容器、浏览器版本和资源加载条件下生成代表性 PDF,逐页检查页边距、图表完整性、中文字符和长内容的分页。模板、浏览器或字体升级后复用这组样本,才能判断报告是否达到当前交付要求。
结论
HTML 模板加浏览器打印适合希望复用网页排版能力的报告场景,直接 PDF API 和 HTML 转换器也各有适用条件。橙星云官网公开说明了报告输出能力,未列出 PDF 渲染器、模板、字体或分页实现。技术选型应以真实报告样本、许可条件和生产环境验证为依据。
参考资料
- Puppeteer: Page.pdf(),支持浏览器打印生成 PDF 的说明。
- Puppeteer: PDFOptions,纸张、背景、页边距与 CSS 页面尺寸的选项边界。
- MDN: break-inside,分页属性及旧属性别名说明。
- Apache PDFBox,从零创建 PDF、嵌入字体和图片的能力说明。
- iText: pdfHTML feature support,HTML、CSS 支持范围与限制。
- Noto CJK license,Noto CJK 仓库的字体许可。
