Я пытаюсь преобразовать файл Word в PDF, используя пакет сообщества Docx4j, представленный на их сайте. (http://www.docx4java.org/docx4j/docx4j-community-3.3.1.zip)
Похоже, у них есть несовместимость версий между docx4j и FOP в этом пакете, интересно, сталкивался ли кто-нибудь с этой проблемой раньше, и знаете ли вы, какая версия библиотек заставит эту работу работать.
Вот мой код:
FOSettings foSettings = Docx4J.createFOSettings();
String inputfilepath = "path/to/file.docx";
String outputfilepath = "path/to/file.pdf";
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath));
FileOutputStream os = new java.io.FileOutputStream(outputfilepath);
foSettings.setFoDumpFile(new java.io.File(inputfilepath + ".fo"));
foSettings.setWmlPackage(wordMLPackage);
Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);
Я скопировал трассировку стека ниже, но ошибка жалуется, что FOPFactory не имеет метода newInstance() без параметров. Это вызывается из FORendererApacheFOP.java, я вижу, что в более старых версиях FOP использовался этот метод, я пытался заменить версию в пакете, но это нарушает другие зависимости.
На упаковке у меня Docx4j 3.3.1 и FOP 2.1
Спасибо за любую помощь.
Трассировка стека, которую вы видите, происходит после перехвата исключения (FOP не может инициализировать FOP v2.1, поэтому возвращается к конфигурации FOP 1.0 или 1.1, которая не работает, поскольку у вас есть FOP 2.1)