【发布时间】:2017-03-29 21:00:21
【问题描述】:
我们部门继承了使用 Apache PDFBox 1.8.x 或更早版本的代码,我们正在尝试将其迁移到 Apache PDFBox 2.0.x。我有最近三个主要版本(1.7.x、1.8.x 和 2.0.x)的版本,我一直在寻求指导,还有 Migration to PDFBox 2.0.0 和 PDFBox Jira Board。
我已经解决了本次迁移中的许多不同问题,但在迁移一些与 TextPosition 相关的代码时仍然遇到问题。该项目最初分叉了 TextPosition 代码并为所有内部 TextPosition 字段创建了 setter/getter。我意识到这违反了 TextPosition(如 Java String)是不可变的合同,所以我已经把所有这些都拿出来了。我们仍然有一些依赖 endX/endY 字段的代码,但是这些字段没有本地 getter,它们被标记为私有,因此子类甚至无法访问这些字段。 关于如何访问 endX/endY 值有什么建议吗?
此外,与 TextPostion 相关,看起来 PostionWrapper 类在 2.0.x 上已被删除,但我找不到任何替代它的参考。 我们应该使用什么来代替 PositionWrapper?
【问题讨论】:
-
PositionWrapper 在 PDFTextStripper 中仍然作为私有类存在。
-
重新使用 endX 和 endY getter,在 JIRA 中创建增强请求并说明您需要它们的原因。
-
回复:PositionWrapper - 谢谢。我查看了 Javadocs 并找不到它。我们有一个扩展 PDFStreamEngine 的类,该类以 PDFTextStripper 为模型并使用 PositionWrapper。我必须看看我是否可以更改我们的代码以扩展 PDFTextStripper,或者只是短期内复制 PositionWrapper 代码。
-
re: endX 和 endY - 我理解 TextPosition 需要不可变,但我们有一些代码试图“修复” PDF 文件中的间距问题,以便它在我们的转换中正确翻译。为此,我们有代码可以交换字符或在重叠字符之间添加空格。为此,我们需要访问这些字段以比较 X/Y 值。我们还需要这些来创建 TextPosition 字段的副本,其中的值稍作修改。 你认为这是改变的足够有力的论据吗?
-
是的,我想是的。但你必须说服的不仅仅是我 :-)
标签: pdfbox