要求是: 我有一个现有的PDF文档。我想在一开始(第一页)插入一个段落,该段落是PDF文档中的内容摘要。
我正在使用itext2.1.5库导入现有的PDF文档并执行插入操作。我已经有了解决方案,但不是很满意。 我当前的方式正在缩小现有的第一页,因此它看起来更小并占用更少的空间,然后将新段落放在它上面。但客户对此解决方案并不满意,他们认为整个新PDF文档的字体大小不一致(由于收缩,第一页的字体大小看起来比其他页面小。)
所以我想知道是否有更好的方法来实现这个目标,即将一些内容平滑地插入到现有PDF中,就像在Word文档中这样做一样?
谢谢!
修改 我为什么要投票?
答案 0 :(得分:3)
实际上没有任何实际的方法可以做到这一点。与任何类型的文档一样,理论上可以对PDF进行任何更改,但这样做就像尝试在没有源代码的情况下调试程序一样;即使对象代码的微小变化也会迫使你移动所有东西,你必须编辑各种不是人类可编辑的东西,所以作为一个实际问题,唯一的解决办法是制作源代码的更改然后重新编译它。
PDF是page description language;它的目的是指定完全页面的样子,并且必须以如此令人难以忍受的细节来完成,每个平台上的每个PDF阅读器都会产生完全相同的产品。这不仅包括页面内容(文本,图像等)和格式(文本是粗体,中心等),还包括字体本身,每个对象的精确XY坐标以及各种其他细节是如此神秘,我只能猜测它们可能是什么,除非他们正在创作PDF阅读器,否则没有人应该处理。
要向现有PDF添加一段文字,您必须了解其中的每一个细节,并且您必须重新计算其中的大部分内容以适应其他段落。除了令人头脑麻木之外,还需要重新发明大量非平凡的逻辑,以确定页面上的所有内容。
这不值得。
如果您要处理的所有文档具有完全相同的布局,并且您有模板或者能够创建类似的模板,那么您可以通过编程方式从PDF中提取文本内容,使用它以及您的新段落填写模板,然后将其呈现为PDF。对于第一步(提取文本),Apache PDFBox是一个用于处理PDF文档的开源Java库,是一种流行的选择。
如果文件完全不同,那么您必须坚持要求您的客户以透明的格式向您提供文件;也就是说,它描述了文档的内容和格式,而不是详细描述文档的内容和格式。您可以在功能齐全的文字处理器(纯文本,RTF格式,OpenDocument,Office Open XML)中编辑的任何内容都符合条件。所有这些格式都存在Java库(虽然我不知道它们有多好),并且它们都受到Microsoft Word和LibreOffice的支持,因此您的客户可能首先以这些格式之一创建文档。
答案 1 :(得分:1)
如果必须缩小现有的PDF内容以适应新内容,并且客户不喜欢缩小字体,那么就无法通过这种方式解决问题。提出相互矛盾的要求将是一项非常大的成就。
如果源PDF是静态的(或很少变化),那么您可能应该模仿它们并简单地按需生成完整的PDF,允许您需要添加(插入段落)。如果您可以编写必要的布局或Docmosis或JODReports,则可以扩展您对iText的使用。
如果您的源PDF文件有所不同或有动态,那么Taymon表示您没有太多机会。 如果你使用像“PDF的目的”这样的搜索字符串搜索网络,你会发现一些很好的参考信息,说明为什么它不容易编辑。