我用iText创建了一个pdf,我想打开它,但是当我这样做时Adobe Reader说我"错误打开文档。此文件已打开或由其他应用程序使用"。 我该如何解决?
这是我的代码(对于Houston println异常感到抱歉;)):
try {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("c:/Users/Gabriel/Desktop/"+txtName.getText().toString()+".pdf"));
PdfReader reader = new PdfReader("src/file.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("c:/Users/Gabriel/Desktop/"+txtName.getText().toString()+".pdf"));
AcroFields form = stamper.getAcroFields();
..code..
stamper.close();
//document.close();
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + "c:/Users/Gabriel/Desktop/"+txtName.getText().toString()+".pdf");
}catch (Exception exc) {
System.out.println("Houston we got a problem! : "+exc);
}
}
答案 0 :(得分:3)
您使用的是旧的iText版本。在过去,我们有PdfWriter
从头开始创建文档,我们有PdfStamper
来操作现有文档。
您似乎想要填写表单,这需要PdfStamper
,但出于某种神秘的原因,您还可以使用PdfWriter
,就好像您想要从头创建一个新的PDF。
如果你坚持使用那个旧的iText版本,那么你需要删除几行:
try {
PdfReader reader = new PdfReader("src/file.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("c:/Users/Gabriel/Desktop/"+txtName.getText().toString()+".pdf"));
AcroFields form = stamper.getAcroFields();
..code..
stamper.close();
}
在旧的iText中,您实际上没有理由使用Document
和PdfWriter
类来填写表单。
为了避免您的困惑,我们从头开始重写iText,并在大约两年前发布了这一重写。很高兴看到你在iText上选择了一个新版本的旧版本。此外:不再支持iText 5,为什么不使用iText 7?
请阅读iText 7快速入门教程,了解今天如何完成表单填写:https://developers.itextpdf.com/content/itext-7-jump-start-tutorial-net/chapter-4-making-pdf-interactive