Ошибка 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, тогда он работает просто отлично.
Активировать Jai для Jpedal
System.setProperty ("org.jpedal.jai", "true");
Лучшее решение (чем статья в блоге Марка Стивенса) состоит в том, чтобы перерегистрировать провайдера, потому что это нужно сделать только один раз:
Реестр IIORegistry = IIORegistry.getDefaultInstance ();
registry.registerServiceProvider (новый com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageWriterSpi()); registry.registerServiceProvider(новый com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageReaderSpi());
Конечно, JAI-библиотеки должны быть в classpath, чтобы работать правильно.