如何在PDF的文本字段中检测可见的文本?

时间:2019-11-14 09:05:11

标签: pdfbox

使用PDFBox在PDF表单中填充文本字段时,文本可能会溢出文本字段,并且在查看器中打开PDF时不可见。

问题:是否可以使用PDFBox检测文本字段中有多少文本可见?


冒着成为XY问题受害者的风险,这是出现这种情况的背景。

我有一个由丹麦政府提供的PDF,我正在创建的软件需要能够以编程方式填写此表格。在本文档的第5和6页上,有一个大的空白区域需要填写。 PDF创建者的设计方式是,他们仅创建了两个文本字段(分别名为Text57和Text58),直接填写表格的人将需要手动在它们之间跳转。

问题是,我需要能够用文本填充这些字段,并且如果文本太大而无法容纳在第一个文本字段中,则它需要溢出到第二个文本字段中。但是,我似乎没有任何方法可以真正检测到第一个文本字段中的文本何时溢出。

一个可以接受的解决方法是,如果我可以修改文档以删除第二个文本字段,并且仅使第一个文本字段跨多个页面,但是在Acrobat中玩耍时,这似乎是不可能的

有问题的PDF可以在这里找到:https://www.trafikstyrelsen.dk/~/media/Dokumenter/10%20Bolig/Bolig/Private%20lejeboliger/Lejekontrakt/typeformular-a.pdf

这是一个代码段,其中用100行从1到100的编号填充问题字段。

PDDocument document = PDDocument.load(new File("typeformular-a.pdf"));
PDField text57 = document.getDocumentCatalog().getAcroForm().getField("Text57");
text57.setValue(IntStream.range(1, 101).mapToObj(Integer::toString)
        .collect(Collectors.joining(System.lineSeparator())));
document.save("typeformular-a.out.pdf");

运行代码后,我们可以看到文本在第44行之后被截断了。当然,我不能简单地对文本中的行进行计数,因为在正常情况下,文本中的行会换行,这会使该方法无效

辅助问题:是否有其他方法可以解决最初将文本拆分为多个页面的问题?

0 个答案:

没有答案