【问题标题】:Jasperreports NulPointerException producing PDF/A filesJasperreports NulPointerException 产生 PDF/A 文件
【发布时间】:2014-12-10 14:41:43
【问题描述】:

我正在使用此代码生成 PDF,一切正常。

JasperReport jasperReport = (JasperReport) JRLoader.loadObject(new File(reportname));
JRDataSource ds = ... a datasource
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, d.getHashMap(), ds);
JasperExportManager.exportReportToPdfFile(jasperPrint, output_path + "p4.pdf");

当我尝试生成符合 pdf 标准的 pdfa1b 时,我得到了这个异常

Exception in thread "main" java.lang.NullPointerException
    at com.itextpdf.text.pdf.internal.PdfA1Checker.checkPdfObject(PdfA1Checker.java:323)
    at com.itextpdf.text.pdf.internal.PdfAChecker.checkPdfAConformance(PdfAChecker.java:208)
    at com.itextpdf.text.pdf.internal.PdfAConformanceImp.checkPdfIsoConformance(PdfAConformanceImp.java:71)
    at com.itextpdf.text.pdf.PdfWriter.checkPdfIsoConformance(PdfWriter.java:3426)
    at com.itextpdf.text.pdf.PdfWriter.checkPdfIsoConformance(PdfWriter.java:3422)
    at com.itextpdf.text.pdf.PdfDictionary.toPdf(PdfDictionary.java:137)
    at com.itextpdf.text.pdf.PdfArray.toPdf(PdfArray.java:175)
    at com.itextpdf.text.pdf.PdfDictionary.toPdf(PdfDictionary.java:149)
    at com.itextpdf.text.pdf.PdfIndirectObject.writeTo(PdfIndirectObject.java:158)
    at com.itextpdf.text.pdf.PdfWriter$PdfBody.write(PdfWriter.java:420)
    at com.itextpdf.text.pdf.PdfWriter$PdfBody.add(PdfWriter.java:398)
    at com.itextpdf.text.pdf.PdfWriter$PdfBody.add(PdfWriter.java:334)
    at com.itextpdf.text.pdf.PdfWriter.addToBody(PdfWriter.java:829)
    at com.itextpdf.text.pdf.PdfWriter.close(PdfWriter.java:1311)
    at com.itextpdf.text.pdf.PdfAWriter.close(PdfAWriter.java:336)
    at com.itextpdf.text.pdf.PdfDocument.close(PdfDocument.java:886)
    at com.itextpdf.text.Document.close(Document.java:416)
    at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:830)
    at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:519)
    at net.sf.jasperreports.engine.JasperExportManager.exportToPdfFile(JasperExportManager.java:157)
    at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfFile(JasperExportManager.java:505)
    at ga.jr.run.RunMe.main(RunMe.java:45)

这是我的 jasper 文件的一部分

<property name="net.sf.jasperreports.export.pdf.tagged" value="true"/>
<property name="net.sf.jasperreports.export.pdfa.conformance" value="pdfa1b"/>
<property name="net.sf.jasperreports.export.pdfa.icc.profile.path" value="Z:\\Produzione\\Development\\TEMPLATE\\sRGB_v4_ICC_preference.icc"/>

如果我删除 net.sf.jasperreports.export.pdfa.conformance(或将其设置为“none”),但文件不是 PDF/A,也不例外

怎么了? 谢谢

编辑:我正在使用 iText 5.5.3(使用 itext 5.5.0 的问题相同)和 Jasperreports 6.0.0

编辑:使用 Adob​​eRGB1998.icc 和 sRGB_v4_ICC_preference.icc、ISOnewspaper26v4_gr.icc 和 ISOnewspaper26v4.icc、eciRGB_v2.icc 和 ISOcoat_v2_300_eci.icc(在我的 PDFCreator 安装目录中找到)相同的异常进行测试

【问题讨论】:

  • 您的安装中使用了哪个 iText 版本?在某些版本中,出现过这样的问题,同时已得到修复……您的 ICC 路径是否正确?乍一看,这可能是 ICC 问题。
  • 我正在使用 iText 5.5.3(使用 itext 5.5.0 时同样的问题)和 Jasperreports 6.0.0 ICC 文件的路径是正确的,如果我删除 icc 文件则会出现不同的错误
  • 也许不同的icc文件可以解决?但使用 Adob​​eRGB1998.icc 的结果相同
  • 请尝试。异常发生在输出意图/色彩空间分析的上下文中。
  • 已经使用 Adob​​eRGB1998.icc 和 sRGB_v4_ICC_preference.icc 测试过,同样的例外

标签: pdf jasper-reports itext pdfa


【解决方案1】:

这是一个错误。我恢复到 5.6.1 版本,一切正常。

今天是 17/12/2014,我正在等待 Jasperreports 6.0.0 以上的版本。

错误记录在 http://community.jaspersoft.com/jasperreports-library/issues/3988

当我尝试使用 6.0.0 版创建 PDF/A 文档时 JasperReports 库我总是得到一个 NullPointerException com.itextpdf.text.pdf.internal.PdfA1Checker.checkPdfObject,行号。 332.

完全相同的报告适用于 5.6.1(使用 iText 2.1.7js2) 导出为 PDF/A。

如果我们看一下 PdfA1Checker 的源代码,我们会看到(从 第 327 行):

PdfObject iccProfileStream = 字典.get(PdfName.DESTOUTPUTPROFILE);字符串输入颜色空间 = ""; if (iccProfileStream != null) { ICC_Profile icc_profile = writer.getColorProfile(); // 总是返回 null tr​​y { inputColorSpace = new String(icc_profile.getData(), 16, 4, "US-ASCII"); // NPE!!!在访问 icc_profile } catch (UnsupportedEncodingException e) { throw 新的异常转换器(e); } }

我做了一个调试会话,发现 writer.getColorProfile() 总是 返回空值。这似乎是因为 JRPdfExporter 没有初始化它。所以,我想,这个问题是一个副作用 升级到 iText 5.5.0。 (我认为 PdfWriter.setOutputIntents 必须 调用以正确设置 icc_profile...)

希望这有助于解决这个问题。

问候,迈克尔

v6.0.0 JRPdfExporter

【讨论】:

  • 您可以考虑更新您的帖子,6.1 中的 1/2 解决方案恢复到旧的 iText 库。我已修复该问题的链接,但无法编辑您关于此问题的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 2018-12-18
  • 2014-12-20
相关资源
最近更新 更多