当前位置: 首页 > 知识库问答 >
问题:

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

沈冠宇
2023-03-14

我用iText创建了一个pdf,我想打开它,但是当我这样做时,Adobe阅读器说我“打开文档时出错。此文件已打开或由其他应用程序使用“。我该如何解决?

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

谭玄天
2023-03-14

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

看起来您想要填写一个表单,这需要< code>PdfStamper,但是出于某种神秘的原因,您也使用< code>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 中,您真的没有理由使用文档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

 类似资料:
  • 问题内容: 我们正在寻找替代方法,以替代当前通过小程序在Java Web应用程序中打印支票的方式。似乎共识是使用PDF进行打印,而itext提供了使用Java进行打印的功能。 但是 ,在我们的特殊情况下,支票是“仅打印”的,这一点很重要- 用户在应用程序中不应该具有保存支票的任何能力(我知道精明的用户可以做一个PrintScreen,但我们想遮盖住后盖,在应用程序中不进行任何本机功能来保存支票)。

  • null 有人能解释一下,当我使用PdfReader阅读模板后,我如何制作模板的副本吗?有没有办法把表格写到模板副本上,而不是一个新文档上? 为了将来的参考,我做了以下工作:

  • 我正在使用iText7对pdf文档应用签名。我还使用自己的IExternalSignatureContainer实现将证书集成到PKCS7 CMS中,因为签名服务只返回PKCS1签名。 签名过程是异步的(用户必须进行身份验证),我希望执行以下操作: 准备文档(PDF阅读器) 将文档的哈希值返回给用户 扔掉文档(PDF阅读器) 让用户进行身份验证(与iText签名过程没有直接关系)并创建签名(PKC

  • 我在Android日食中使用 itext 创建 pdf 时遇到问题 如果给定了引导入口,我无法创建pdf,在我的情况下是Android 5.0.1。如果我删除了bootstrap条目,我可以创建pdf,但不能启动活动,因为android 5.0.1包含android jar。你能告诉我如何解决这个问题吗?同样,如果我把它变成一个非活动类,我希望能够在另一个活动类中创建一个非活动类的对象,这样我就可

  • 我正在开发一个web应用程序,并试图使用它的文本创建一个pdf文档。 当我得到一个路径(本地和服务器上)时,它工作得很好,但我知道我需要在不实际创建它的情况下完成它。 我不想要的:PdfCopy copy=newpdfcopy(documentPDF,newfileoutputstream(mypath)) 我想要的是://PdfCopy copy=new PdfCopy(documentPDF,

  • 问题内容: 我使用itext将pdf转换为文本文件,它实际上工作良好,但是对于某些词它可以完成以下操作:例如,在pdf中,有诸如“ present the main idea”之类的短语,但是itext创建了诸如“ presentthemainideas”之类的输出。无论如何,有没有纠正这种行为? 问题答案: 缺少空格字符的原因是,您在渲染的PDF中看到的空格不一定与PDF页面内容描述中的空格相对