把一份测评报告变成能存档、能打印的 PDF,常见有两条路:一条是服务端渲染,由后台程序把报告排好版、直接生成 PDF 文件;另一条是前端打印,把报告在浏览器里渲染成网页,再调用浏览器的打印功能存成 PDF。两条路都能出 PDF,但它们坏起来的方式完全不一样,选哪条之前,得先知道各自会在什么地方出问题。
服务端渲染:一致,但依赖那台渲染服务
服务端渲染的最大好处是结果稳定:同一份报告,不管谁来、用什么设备触发,生成出来的 PDF 版式、字体、分页都一模一样,适合要归档、要盖章、要批量出的场景。报告长什么样不受用户浏览器影响,也能在后台成批地跑,不必等用户一份份点。
服务端的失败模式:字体、并发、超时
它的失败集中在那台渲染服务上。最常见的是字体:服务器上没装报告里用到的中文字体,生成的 PDF 就会缺字、变成方框,或回退成难看的默认字体,这类问题常在本地测好、上线到干净的服务器上才暴露。其次是并发:一次集中普查结束后成百上千份报告同时要出,渲染是重活,队列一旦堆起来,用户就得干等,甚至触发超时。还有超长报告——维度多、图表多的报告渲染耗时长,单个任务卡住会拖累后面排队的。这些都指向同一件事:服务端渲染把复杂度收在后台,也把风险集中在了后台那台机器的资源和环境上。
前端打印:所见即所得,但把环境交给了用户
前端打印省掉了后台那套渲染,用户看到的网页什么样,打出来的 PDF 大致就什么样,实现轻、改版式也快。代价是它把生成环境交给了用户那一端——而用户那一端,恰恰是最不可控的。
前端打印的失败模式:分页、样式、各不相同的浏览器
它的失败散在各处。网页排版和打印排版不是一回事,一个长表格或一张图正好卡在页边,打印时就会被从中间切断,或挤出一片空白。不同浏览器、不同版本对打印样式的支持有差异,同一份报告在这台电脑上工整、在那台上错位。用户还可能手滑把页眉页脚、背景色、缩放比例设歪,打出来的东西和预期对不上,而这些你在后台完全看不到、也管不着。前端打印的报告最终长什么样,很大程度上取决于每个用户各自的浏览器和设置。
两条路怎么配:按用途分,而不是二选一
所以这不是非此即彼。要归档、要批量、要求每一份都长得一样的正式报告,走服务端渲染,把字体和并发这两处提前压住;只是给用户临时看一眼、自己留个底的场景,前端打印够用也更轻。橙星云的报告导出以服务端渲染为主来保证版式一致,同时保留在浏览器里直接查看和打印的入口,应付临时需求。真正要提前想清楚的,是你的报告更怕“不一致”还是更怕“出得慢”——怕不一致就往服务端收,怕慢又量大,就得为那台渲染服务留足余量。
