jpedal jpg2000错误

时间:2013-03-20 10:47:58

标签: jai jpeg2000 jpedal

我使用jpedal将pdf转换为图像。这适用于大多数pdf,但有些包含jpeg2000我继续收到以下错误:

 java.lang.RuntimeException: JPeg 2000 Images needs the VM parameter -Dorg.jpedal.jai=true switch turned on
    at org.jpedal.parser.PdfStreamDecoder.decodeStreamIntoObjects(Unknown Source)
    at org.jpedal.parser.PdfStreamDecoder.decodePageContent(Unknown Source)
    at org.jpedal.PDFtoImageConvertor.convert(Unknown Source)
    at org.jpedal.PdfDecoder.getPageAsImage(Unknown Source)
    at org.jpedal.PdfDecoder.getPageAsImage(Unknown Source)
    at com.....

我已经在JAVA_OPTS中设置了JVM参数,我的tomcat的运行配置以及程序代码中使用了:

System.setProperty("org.jpedal.jai", "true");
PdfDecoder decode_pdf = new PdfDecoder(true);
FontMappings.setFontReplacements();
decode_pdf.openPdfArray(pdf_file);

3个JAI库也在我的构建路径上。

所以我不知道还有什么需要做的?

我完整的转换代码是:

List<BufferedImage> images = new LinkedList<BufferedImage>();           
System.setProperty("org.jpedal.jai", "true");
PdfDecoder decode_pdf = new PdfDecoder(true);
FontMappings.setFontReplacements();
decode_pdf.openPdfArray(pdf_file);
decode_pdf.setExtractionMode(0, 1f); //do not save images
for (int i = 1; i<= decode_pdf.getPageCount(); i++)
{
  images.add(decode_pdf.getPageAsImage(i));
}   
decode_pdf.closePdfFile();

任何sugestions?

2 个答案:

答案 0 :(得分:2)

  1. 为jpedal激活jai

    System.setProperty(“org.jpedal.jai”,“true”);

  2. 一个更好的解决方案(比马克斯蒂芬斯博客的文章)是重新注册 提供者,因为这只需要做一次:

    IIORegistry registry = IIORegistry.getDefaultInstance();
        registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageWriterSpi());     registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageReaderSpi());

  3. 当然,JAI库需要在类路径中才能正常工作。

答案 1 :(得分:0)

我找到了这个问题的答案here

在Tomcat环境中,您必须在server.xml中禁用JreLeakPreventionListener,然后它才能正常工作。