pdfbox - 如何检测 PDF 文本字段中的可见文本?
问题描述
使用 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 行之后被截断。当然我不能简单地计算文本中的行数,因为在正常情况下,文本中的行会换行,这会使该方法无效。
辅助问题:是否有任何其他方法可以解决将文本拆分到多个页面的原始问题?
解决方案
推荐阅读
- mysql - MySQL 用 select 和一个常量值插入多行
- terraform - Terraform Azure rule recreates firewall rule every time I run plan or apply
- animation - SwiftUI 动画影响内部对象
- blazor - Inserting abstract Blazor component, open-closed principle
- python - Python px.choropleth mapbox change between variables
- php - 升级到 Laravel 7 时,symfony/http-kernel 5.0.x-dev 与 symfony/translation[v4.3.8] 冲突
- node.js - 为什么庆祝请求验证失败?
- c# - WPF: how to set window height equal to Grid height
- neo4j - Is it possible to increase Database storage in Neo4j Aura
- url - How to change the default URL into custom URL in Mendix?