正在加载文章...
分享这篇文章
继续阅读
PDF 在 1993 年推出,目标是让文档在不同设备和打印环境中保持一致排版。
今天,合同、发票、报告和论文仍大量使用 PDF。难点在于:PDF 更像页面描述文件,而不是容易操作的数据结构。
和大家熟知的明确结构的 HTML 不同,PDF 在本质上是一种面向呈现层的底层页面描述语言(脱胎于早期的打印机通用语言 PostScript)。
PDF 内部通常不知道什么是“表格”或“段落”。它更关心在某个坐标用某种字体画出某个字符。这就是为什么把 PDF 表格复制到 Excel 时,列和行经常错位。
处理 PDF 前要先接受一点:PDF 是页面画布,不是 DOM 树。
以前,前端展示 PDF 常依赖 <object> 或浏览器插件。现在更常见的做法是用成熟库在浏览器中渲染。
合并合同、抽取页码、重排页面这些任务,以前常依赖桌面软件。现在可以用 pdf-lib 等库在代码里处理页面树和字节流。
这里要重点考虑隐私。医疗报告、财务审计文件和合同可能包含敏感信息。如果工具能在浏览器本地完成切分与合并,文件就不需要上传到服务器,泄露风险会小很多。
现代 PDF 工作流通常分成三类:用 PDF.js 渲染,用 Puppeteer 生成,用本地库合并和切分。处理敏感文件时,优先选择不上传文件的本地方案。