【问题标题】:Itext , pdf created couldn't be open opened by adobe readerItext ,创建的 pdf 无法被 adobe reader 打开
【发布时间】:2014-06-18 11:14:02
【问题描述】:

我想用 Itext 创建 pdf,在我制作可运行的 jar 之前一切正常。 Adobe 阅读器显示该消息:“Adobe Reader 无法打开 xxx.pdf,因为它不是受支持的文件类型或文件已损坏(例如,它作为电子邮件附件发送且未正确解码)。 " 这是我的代码:

try{
         Document document = new Document();
         writer = PdfWriter.getInstance(document, new FileOutputStream(FILE) );
         document.open();
         makeBackground(document);
         makeText();
         makeTable(document);
         afterTable(document);
         document.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

【问题讨论】:

    标签: pdf-generation itext adobe-reader


    【解决方案1】:

    有 90% 的机会在以下几行中引发异常:

    makeBackground(document);
    makeText();
    makeTable(document);
    afterTable(document);
    

    这会导致您的应用程序创建一个带有 PDF 标题但没有尾部的 PDF(尾部是在您 close() 文档时编写的)。

    如果您没有告诉我们您从Exception 收到的错误消息,没有人 将能够为您提供帮助。

    可能的原因:

    • 在可运行 jar 之外,您的 CLASSPATH 中有无法从 jar 访问的外部 jar。
    • 在可运行 jar 之外,您可以访问在运行 jar 时无法访问的外部资源(字体文件、图像等)。
    • ...

    无论如何:这不是与 iText 相关的问题,因为您说它在您制作可运行的 jar 之前有效。由于它在可运行的 jar 之外工作,因此代码可能没有问题。

    您可能有一个配置问题:您在创建它时做错了(例如:您自己创建了 iText.jar,但您忘记插入 .afm 文件)。 远程解决此类配置问题非常困难,特别是因为如果 PDF 以 %%EOF 结尾,您没有告诉我们引发了哪个异常,PDF 的大小(可能为 0)。

    【讨论】:

    • 嗯,这就解释了为什么 Adob​​e Reader 会告诉您该文件不是 PDF 文件 ;-)
    • 是的,至少我们确认这是配置问题
    • 但是我没有找到问题出在哪里,itext jar 在一个包中:librairie。
    • 好吧,没有更多信息,没有人能告诉你是什么导致了问题。如果文件有 0 个字节,则必须document.open()之前最开始 抛出异常。如果你不告诉我们更多关于那个例外的信息,我们就不知所措了。
    • 删除所有try\catch 包装器,让异常发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2016-05-07
    • 2016-05-18
    相关资源
    最近更新 更多