想法

有几个想法可以增强PDFBox。下面概述了这些以及 评论和他们计划在同意后立即发布 实现。

增强类型安全性

增强 PDFBox 的类型安全性,并添加更多泛型集合和代码清理。

删除所有已弃用的方法

这是一项持续的努力,大多数/所有已弃用的方法将在PDFBox 2.0.0中删除

处理大型 PDF 文件

除了PDF解析pdfbox并不总是能很好地处理大型PDF文件,以及一些 的引用实现为 int 而不是 long

切换到 Java 1.6

PDFBox 2.0.0 将 Java 6 作为最低要求。

将 PDFBox 分解为模块

为了支持不同的用例并提供最小的工具集PDFBox 2.0.0应该是 分为不同的模块。这与重新排列一些代码是一致的 例如,从PDDocument中删除AWT。

增强字体呈现

PDFBox 2.0.0将在不使用AWT的情况下呈现大多数字体。

替换/增强 PDF 解析

PDFBox 中旧的“经典”PDF 解析器不符合 PDF 规范,因为它解析 从上到下的 PDF,而不是尊重 XRef 信息。非顺序解析器 改善了这种情况,但需要将更清洁的基础分成几个级别

  • I/O
  • 标记化
  • 根据结构解析
  • COS 级别文档
  • 效绩数据级别文档
  • 添加一些自我修复机制来处理损坏的文件

此外,处理不符合要求的文档不应成为核心解析器的一部分 但是一种可扩展的方法,例如通过添加钩子来允许处理解析异常。

添加使用 Unicode 编码文本创建 PDF 的功能

最近的PDFBox版本仅限于WinANSI编码的文本。2.0.0 也应该支持 Unicode。

重新架构 COS 级别对象

COS 级别的对象需要重构以与新的解析器保持一致。另外 方法签名, 构造...应该在 COS 对象之间变得相似

按需解析

与其总是解析完整的文档,不如按需解析 对象仅在需要提高性能和最大程度地减少内存占用时才可用。

这可以通过提供一种分层方法来实现,其中基本(非缓存)解析器提供 按需解析和基于顶部构建的缓存解析器会缓存对象,用于以下用例: 这是有益的,例如渲染,调试...

  • 词法分析器将是将令牌传送到解析器的低级组件。 示例实现作为 PDFBOX-1000 的一部分存在。好处将是干净的低 令牌的级别处理。当前的实现需要(稍微?)修改
  • 增量(非缓存)解析器将允许逐页处理向前推进 仅支持文本提取,合并,拆分... - 好处是内存较低 消耗以及潜在的更快处理
  • 缓存解析器将支持PDFDebugger或PDFReader等应用程序。

PDF版本的处理

当前的实现是PDF 1.4和一些临时添加的混合,没有明确的 区分什么是支持的,什么是不支持的。我们可以为显式处理提供一些支持 PDFBox 中的版本,例如我将某些方法和属性标记为 PDF 版本支持 水平。此外,这可以成为 PDF/A 和其他合规性检查的良好基础。