| 失效链接处理 |
|
为什么越来越多的人使用 PDFBox 3 ?
相关截图:
![]() 主要内容:
先认识一下 PDFBox
Apache PDFBox 是 Apache 基金会下面的开源 Java 库,专门用来创建、读写、转换 PDF。它不是那种“只能预览”的工具,而是能嵌进业务系统里干活的:合同归档、发票生成、扫描件抽字、批量盖章,这些场景都能见到它。
它能做的事情大致就这几类:
读已有 PDF,抽出文字、图片、表单字段
从零创建页面,写字、画线、贴图
拆分、合并、加密、数字签名
把页面渲染成 PNG / JPEG,方便做预览
2.x 用了很多年,稳是稳,但内存占用、IO 方式和一批过时 API 慢慢成了包袱。3.0 不是换皮,而是把这些底层问题一起收拾了一遍。
PDFBox 3 到底新在哪
如果你只记三件事,就是下面这三张图里的内容:统一用 Loader 加载、增量解析省内存、IO 层重写。
说人话的话,大概是这样:
1. 加载方式换了口
以前大家写 PDDocument.load(...),3.0 把加载方法从 PDDocument 上拿掉了,统一走 org.apache.pdfbox.Loader。看起来只是搬家,其实是把“从哪读、怎么缓存”这件事说清楚了:文件、字节数组、RandomAccessRead,各走各的路,不再藏在一个万能 load 里面。
2. 不再一上来就把整份 PDF 吞进内存
3.0 默认做增量解析。你只访问第 1 页,它就尽量只解析第 1 页相关的对象。大文件、只抽封面、只盖一页章的时候,内存会老实很多。当然,如果你遍历全部页面、扫全部注释,该吃内存还是会吃——PDF 格式本身就是这样。
3. IO 独立成模块,读写更可控
基础 IO 类拆到了 pdfbox-io,底层切到 java.nio,读文件支持内存映射,读的时候不再依赖临时 scratch 文件。写的时候缓存策略也从老的 MemoryUsageSetting,换成更灵活的 StreamCacheCreateFunction。另外,保存时默认开启压缩,普通文档体积会小一截;做 PDF/A-1b 这类对压缩有限制的场景,再显式关掉即可。
|


苏公网安备 32061202001004号
