在使用iText创建pdf后,如何打开pdf?

时间:2018-03-24 17:33:50

标签: java pdf itext

我用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);
                }
            }                    

1 个答案:

答案 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中,您实际上没有理由使用DocumentPdfWriter类来填写表单。

为了避免您的困惑,我们从头开始重写iText,并在大约两年前发布了这一重写。很高兴看到你在iText上选择了一个新版本的旧版本。此外:不再支持iText 5,为什么不使用iText 7?

请阅读iText 7快速入门教程,了解今天如何完成表单填写:https://developers.itextpdf.com/content/itext-7-jump-start-tutorial-net/chapter-4-making-pdf-interactive