Ошибка при преобразовании docx в PDF с помощью Docx4j и FOP

Я пытаюсь преобразовать файл 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)


person F. Lins    schedule 10.10.2016    source источник


Ответы (1)


Почему не запускается FOP 2.1? Диагностика, которую нам нужно увидеть, находится по адресу https://github.com/plutext/docx4j-export-FO/blob/master/src/main/java/org/docx4j/convert/out/fo/renderers./FORendererApacheFOP.java#L320

[java] } catch (Exception e) { log.warn("Не удается настроить FOP svn; " + e.getMessage()); log.debug(e.getMessage(), e); [/Джава]

Поэтому включите ведение журнала уровня DEBUG для класса org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.

Для этого см. комментарии по адресу https://github.com/plutext/docx4j/blob/master/src/samples/_resources/log4j.xml

Этот вопрос активно обсуждается на странице http://www.docx4java.org/forums/pdf-output-f27/error-on-convert-pdf-with-fo-on-dox4j-3-3-.1-t2446.html

Но теперь отслеживаем его как https://github.com/plutext/docx4j-export-FO/issues/1

Ваш FOP 2.1 исходит от Maven или откуда-то еще?

Являются ли банки для батика и jaxb-xslfo-1.0.1.jar в вашем пути к классам? Пожалуйста, попробуйте docx4java.org/docx4j/docx4j-export-fo- nightly-20161012.jar и сообщите трассировку стека

person JasonPlutext    schedule 11.10.2016
comment
java.lang.NoSuchMethodException: org.apache.fop.apps.FopFactory.newInstance() в java.lang.Class.getDeclaredMethod(Class.java:2130) в org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.createFopFactory (FORendererApacheFOP.java:329) в org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.getFopFactory(FORendererApacheFOP.java:253) в org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.render(FORendererApacheFOP.java :119) на org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:168) на org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:47) на org.docx4j. convert.out.common.AbstractExporter.export(AbstractExporter.java:82) в org.docx4j.Docx4J.toFO(Docx4J.java:568) в org.docx4j.convert.out.fo.FOPAreaTreeHelper.getAreaTreeViaFOP(FOPAreaTreeHelper.java: 191) по адресу org.docx4j.convert.out.fo.LayoutMasterSetBuilder.fixExtents(LayoutMasterSetBuilder.java:138) по адресу или g.docx4j.convert.out.fo.LayoutMasterSetBuilder.getLayoutMasterSetFragment(LayoutMasterSetBuilder.java:97) в org.docx4j.convert.out.fo.XsltFOFunctions.getLayoutMasterSetFragment(XsltFOFunctions.java:81) в sun.reflect.NativeMethodAccessorImpl.invoke0( Собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:497) в org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:343) в org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:440) в org.apache.xalan.extensions.ExtensionsTable.extFunction (ExtensionsTable.java:222) в org.apache.xalan.transformer.TransformerImpl.extFunction(TransformerImpl.java:475) в org.apache.xpath.functions.FuncExtFunction.execute(FuncExt Function.java:208) в org.apache.xpath.XPath.execute(XPath.java:337) в org.apache.xalan.templates.ElemCopyOf.execute(ElemCopyOf.java:134) в org.apache.xalan.transformer .TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) в org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) в org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395) в org.apache.xalan.templates. ElemApplyTemplates.execute(ElemApplyTemplates.java:178) в org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) в org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2272) в org. .apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1358) в org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:711) в org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl .java:1275) в org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1253) в org.docx4j.XmlUtils.transform(XmlUtils.java:1275) в org.docx4j.XmlUtils.transform(XmlUtils. java:1100) в org.docx4j.convert.out.common.AbstractXsltExporterDelegate.process(AbstractXsltExporterDelegate.java:66) в org.docx4j.convert.out.common.AbstractWmlExporter.process(AbstractWmlExporter.java:63) в org.docx4j .convert.out.common.Abstra ctWmlExporter.process(AbstractWmlExporter.java:32) в org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:79) в org.docx4j.Docx4J.toFO(Docx4J.java:568) в PDFConversion.main (PDFConversion.java:26) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:497) в com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) java.lang.NoSuchMethodException: org.apache.fop.apps .FopFactory.newInstance() в java.lang.Class.getDeclaredMethod(Class.java:2130) в org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.createFopFactory(FORendererApacheFOP.java:329) в org.docx4j.convert .out.fo.renderers.FORendererApacheFOP.getFopFactory(FORendererApacheFOP.java:253) в организации .docx4j.convert.out.fo.renderers.FORendererApacheFOP.render(FORendererApacheFOP.java:119) в org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:168) в org.docx4j.convert.out .fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:47) в org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:82) в org.docx4j.Docx4J.toFO(Docx4J.java:568) в PDFConversion.main(PDFConversion.java:26) в sun.reflect. NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method. java:497) в com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) org.docx4j.openpackaging.exceptions.Docx4JException: Экспорт пакета исключения в org.docx4j.convert.out.common.AbstractExporter .export(AbstractExporter.java:109) в org.docx4j.Docx4J.toFO(Docx4J.java:568) в PDFConversion.main(PDFConversion.java:26) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun. Reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:497) в com.intellij.rt .execution.application.AppMa in.main(AppMain.java:144) Вызвано: java.lang.NullPointerException в org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.render(FORendererApacheFOP.java:199) в org.docx4j.convert.out. fo.renderers.FORendererApacheFOP.render(FORendererApacheFOP.java:159) в org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:168) в org.docx4j.convert.out.fo.AbstractFOExporter.postprocess( AbstractFOExporter.java:47) на org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:82) ... еще 7 - person JasonPlutext; 13.10.2016