Ошибка jpedal jpg2000

Я конвертирую PDF в изображения, используя jpedal. Это прекрасно работает для большинства 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.....

Я уже установил параметр 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();

Любые предложения?

2 ответа

Решение

Я нашел ответ на эту проблему здесь.

Когда в среде Tomcat вы должны отключить JreLeakPreventionListener в server.xml, тогда он работает просто отлично.

  1. Активировать Jai для Jpedal

    System.setProperty ("org.jpedal.jai", "true");

  2. Лучшее решение (чем статья в блоге Марка Стивенса) состоит в том, чтобы перерегистрировать провайдера, потому что это нужно сделать только один раз:

    Реестр IIORegistry = IIORegistry.getDefaultInstance ();
    registry.registerServiceProvider (новый com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageWriterSpi()); registry.registerServiceProvider(новый com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageReaderSpi());

Конечно, JAI-библиотеки должны быть в classpath, чтобы работать правильно.

Другие вопросы по тегам