2013-03-20 15 views
2

我使用jpedal將pdf轉換爲圖像。這適用於大多數的PDF文件,但一些含JPEG2000我不斷收到以下錯誤:用程序代碼jpedal jpg2000錯誤

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..... 

我已經設置了JVM參數在JAVA_OPTS,我的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(); 

任何建議嗎?

回答

0

我找到了這個問題的答案here

在Tomcat環境中,您必須禁用server.xml中的JreLeakPreventionListener,然後才能正常工作。

2
  1. 激活JAI爲jpedal

    System.setProperty( 「org.jpedal.jai」, 「真」);

  2. 更好的解決方案(不是從馬克·斯蒂芬斯博客文章)是重新註冊 提供商,因爲這隻需要做一次:

    使用IIORegistry註冊表= IIORegistry.getDefaultInstance();
    registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageWriterSpi()); registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageReaderSpi());

當然JAI庫需要在類路徑中才能正常工作。