Disclaimer: 我一直试图用iText做到这一点 . 我已经阅读,研究,询问,查询,实验,并做了我能想到的所有工作 . 我很愤怒 . 请不要以为我没有尝试过,只是来到这里,以便我可以让别人为我这样做;事实并非如此 . 我想学习,我想弄明白这一点 . 我正在寻找有经验的人的良好指导 .
我有一个包含可编辑文本字段的PDF . 我想要做的是以编程方式从该PDF中读取并从已经存在的文本字段中获取文本,从我的应用程序中的其他位置获取文本,并将新文本信息的先前信息写回原始PDF .
我尝试过的:
- 使用PdfReader阅读PDF
- 使用PdfStamper(PdfReader,FileOutputStream)写入PDF
- 使用reader.getAcroFields()获取文本字段 .
我已经在网上搜了好几天了,我无法解决这个问题 . 当我这样做:
String in = "C:/Users/me/Desktop/file.pdf";
String out = "C:/Users/me/Desktop/file.pdf";
PdfReader reader = new PdfReader(in);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(out));
AcroFields form = stamper.getAcroFields();
form.setField("dateDisc1", "5/21");
它最终会创建一个已损坏的PDF(file.pdf) .
如果有更简单的方法,请帮助我对此有所了解 .
谢谢!
2 回答
对不起,我没注意到文件名 .
Original answer:
好吧没有简单的方法,我在很多个月前发现了这个 .
PDF实际上是PostScript的一些包装(它包含字体等),将PDF转换为PostScript非常简单(我只是运行一个命令并从那里开始编写PostScript)
它不像LaTeX,PostScript适用于打印机,它有一个堆栈,你可以推送状态等,每个字母绝对定位,PostScript是一组打印机然后解释的虚拟机指令 .
文本高亮等等来自于文本从左到右和东西流动的更高知识 . 我阅读了PostScript标准,得到了我想要的东西并且没有触及它,因为这不是一个伟大的答案,但肯定会指出你正确的方向 .
请记住,PDF和PostScript(文档)不能进行编辑,它们不进行文本换行等,如果放大则必须进行平移,它们的存在是为了保留格式,对于打印机等 .
我自己搞清楚了 . 我在将来为其他人创建了一个演练,希望做类似的事情:
我已经在网上搜了几天,试图找到一种简单的方法 . 不成功,我挖了一脚,并决定如果有可能,我会让它发挥作用 . 我在互联网上看到过几十个地方,人们都在询问如何做到这一点;现在,这是一个记录良好的例子 .
我们终于得到它了 . 请注意,这将删除原始文件并将fileOutputStream重命名为原始文件名;如果您没有阅读原件中的任何信息,则会丢失 . 确保收集您要复制的所有信息 . 另外,请记住我设置了一个条件语句(
if
),以确保读入的文本字段中的任何文本都不会被写入 . 您将不得不这样做,否则您可能无法将之前的文本转移到新PDF .如果有任何问题,请随时提出 . 我绝不是专业开发人员,但我可以提供我所知道的建议 . 在你问之前记得要研究 . 祝好运!