有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我用iText创建了一个pdf,我想打开它,但当我打开时,Adobe Reader会告诉我“打开文档时出错。此文件已打开或被其他应用程序使用”。 我该如何解决

这是我的代码(很抱歉出现休斯顿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) 个答案

  1. # 1 楼答案

    您正在使用旧的iText版本。在过去,我们需要{}从头开始创建文档,我们需要{}操作现有文档

    你似乎想要填写一个表格,它需要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