使用Java itext编程编写PDF

使用Java itext编程编写PDF,itext,Itext,任务:我正在尝试使用java编程方式编辑PDF表单 问题:目前我正在使用i文本库,无法获取要在PDF中写入的文本的位置(x和y坐标) 我已经尝试过的:实现了RenderListner,但是TextRenderInfo.getText()给了我半个单词或一个字符 我想要的:我想要以正确的word格式呈现文本,就像在pdf文档中一样 我需要使用iTextJava编辑PDF文本的示例 提前谢谢。你要找的不容易做到(我甚至不敢说不可能)。 根据规范,pdf文档只需要包含在查看器中呈现文档所需的说明。 其

任务:我正在尝试使用java编程方式编辑PDF表单

问题:目前我正在使用i文本库,无法获取要在PDF中写入的文本的位置(x和y坐标)

我已经尝试过的:实现了RenderListner,但是TextRenderInfo.getText()给了我半个单词或一个字符

我想要的:我想要以正确的word格式呈现文本,就像在pdf文档中一样

我需要使用iTextJava编辑PDF文本的示例


提前谢谢。

你要找的不容易做到(我甚至不敢说不可能)。 根据规范,pdf文档只需要包含在查看器中呈现文档所需的说明。 其中一个症状(您在TextRenderInfo中看到)是没有真正的结构概念

例如,“Lorem Ipsum Dolor Sit Amet”一段可能会呈现为:
呈现“Ipsum Do”
渲染“Lorem”(包括空间) 渲染“lor” 渲染“Sit Amet”(不包括前导空间,但通过移动位置实现)

TextRenderInfo正按照其名称进行操作,您将获得有关每个文本呈现指令的信息。标准本身不可能提供诸如“它将始终包含完整的单词/短语”或“说明以逻辑阅读顺序出现”之类的保证

如果这样做是为了获取某段文本的位置,只需收集所有TextRenderInfo对象,并使用考虑其位置的自定义比较器进行排序。排序后,您可以对它们进行循环,这样您就可以获得有关正在渲染的文本以及正在渲染的文本的坐标的信息。查看SimpleExtensionStrategy,了解我们是如何做到这一点的

如果您想将自定义值注入PDF(您提到编辑),请考虑使用表单(XFA或ACRO)。表单允许您基本上定义占位符,iText稍后可以用内容填充占位符。某些表单元素将允许动态调整大小

如果您在数据转换为pdf之前就可以访问它,那么在此时处理数据当然会更好。因为编辑pdf(以编程方式)本质上是一个很难解决的问题。

“我希望以pdf文档中的格式以适当的文字呈现文本。”-如果TextRenderInfo.getText()为您提供半个字或一个字符,那么这就是“pdf文档中的文字”。通常,在这些半个字或单个字符之间,文本插入点有一个非常小的左移或右移(称为紧排),以使输出更美观。