当前位置: 首页 > 知识库问答 >
问题:

使用文档x4j和FOP将文档转换为PDF时出错

惠野
2023-03-14

我正在尝试使用他们网站上提供的Docx4j社区包将一个Word文件转换成PDF。(http://www . docx 4 Java . org/docx 4j/docx 4j-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);

我复制了下面的stacktrace,但错误是FOPFactory没有不带参数的newInstance()方法。这是从FOrenderApacheFOP调用的。java,我可以看到旧版本的FOP过去有这种方法,我试图替换包上的版本,但这破坏了其他依赖关系。

包裹上有Docx4j 3.3.1和FOP 2.1。

谢谢你的帮助。

共有1个答案

杜俊远
2023-03-14

您所看到的堆栈跟踪是在捕获到异常后发生的(FOP无法初始化FOP v2.1,因此要回退到FOP 1.0或1.1配置,因为您使用的是FOP 2.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

[爪哇] }捕获 (异常 e) { 日志警告(“无法设置 FOP svn; ” e.获取消息() );log.debug(e.getMessage(), e);[/爪哇]

因此,请打开类org.docx4j.covert.out.fo.renders.FOrenderApacheFOP的DEBUG级别日志记录

为此,请参阅上的评论https://github.com/plutext/docx4j/blob/master/src/samples/_resources/log4j.xml

这个问题正在http://www . docx 4 Java . org/forums/pdf-output-f27/error-on-convert-pdf-with-fo-on-dox4j-3-3-1-t 2446 . html上积极讨论

但是现在追踪它为https://github.com/plutext/docx4j-export-FO/issues/1

你的FOP2.1是来自Maven还是其他地方?

 类似资料:
  • 我正在尝试使用Apache POI将文档转换为pdf,但生成的pdf文档只包含文本,它没有任何格式,如图像、表格对齐等。

  • 问题内容: 如何将Word文档转换为PDF,其中文档包含各种内容,例如表格。尝试使用iText时,原始文档看起来与转换后的PDF不同。有没有我可以使用的开源API /库,而不是调用可执行文件? 问题答案: 这是一项艰巨的任务,如果您想要完美的结果(如果不使用Word则不可能),则难度就更大了,因为仅使用纯Java即可为您完成所有操作且都是开源的API数量为零,我相信( 更新:我错了,请参见下文 )

  • 每个人。我需要一个VBA代码来将excel数据转换为PDf到word doc,我写了一个宏,将excel打印为pdf,但现在我想从该pdf打印为word,所以简短的版本,Excel到PDF到Word。所有这些都是为了我想保留excel数据的格式

  • 我刚刚尝试通过docx4j的示例webapp获取docx文档:http://webapp.docx4java.org/OnlineDemo/docx_to_pdf_fop.html生成的PDF文件的表格格式不正确。事实上,表格明显不正确…… 我只是想知道这是因为docx4j不正确支持表格还是某种错误。如果是这样,如果有人能给我指出正确的信息。

  • 我正在尝试将一个PDF文档拆分为多个文档,其中每个文档包含的最大页数小于最大文件大小。 我的代码目前可以在Eclipse上运行,但是当我点击. jar文件时,java类中的静态方法似乎崩溃了(但是我似乎抓不到异常)。 不工作的代码是: myListOfDocuments=mysplitter。拆分(文件); 在调用上述行时,JVM会以某种方式退出静态方法。加载似乎工作正常,如下所示:PDDocum

  • 我有一堆XML文档(源),需要将它们转换为具有不同结构(目标)的POJO。我的第一个明显的想法是使用JAXB和XSLT的组合。然而,在一些问题上,我不确定这是否合适。 我无法访问源的XSD。 我不需要目标作为XML结构,而只需要作为POJOs。 然后我想创建一个映射表,比如。 然而,这将导致大量“映射”代码,特别是在涉及复杂数据类型的情况下。 你对我如何实施这一点有什么建议吗?