提问人:New2Java 提问时间:11/3/2023 更新时间:11/3/2023 访问量:40
使用具有非 XSL 转换的 Docx4j 将 DOCX 转换为 PDF 时出现 Nullpointer 异常
Nullpointer Exception when converting DOCX to PDF using Docx4j with non-XSL transformation
问:
我对 Docx4j 库相当陌生。我正在尝试使用 Docx4j 库将 DOCX 文件转换为 PDF,我想使用非 XSL 转换方法 (Docx4J.FLAG_EXPORT_PREFER_NONXSL) 来减少整体处理/转换时间(整个转换过程大约需要 2 分钟)。但是我遇到了与图像处理相关的异常。
这是我面临的例外:
java.lang.NullPointerException: Cannot invoke "org.docx4j.model.images.WordXmlPictureE20.createXslFoImageElement()" because "converter" is null
at org.docx4j.model.images.WordXmlPictureE20.createXslFoImgE20 (WordXmlPictureE20.java)
上述异常表明在 DOCX 到 PDF 转换期间图像转换存在问题。但是,我不确定为什么会发生这种情况,因为我希望 Docx4j 使用其默认设置处理图像。
下面是导致异常的代码片段:
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.docx4j.Docx4J;
import org.docx4j.convert.out.FOSettings;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
public class DocxToPDFConverter {
public static void convertToPDF(File docxFile, File pdfFile) throws Exception {
// Load the DOCX into a WordprocessingMLPackage
WordprocessingMLPackage wordMLPackage = Docx4J.load(docxFile);
wordMLPackage.setFontMapper(new BestMatchingMapper());
// Configure FO settings
FOSettings foSettings = Docx4J.createFOSettings();
foSettings.setWmlPackage(wordMLPackage);
foSettings.setApacheFopMime(FOSettings.MIME_PDF);
// Prepare the output stream
try (OutputStream out = new FileOutputStream(pdfFile)) {
// Convert to PDF with non-XSL transformation
Docx4J.toFO(foSettings, out, Docx4J.FLAG_EXPORT_PREFER_NONXSL);
}
}
尝试解决:
确保所有必需的 jar 都在类路径上。我的 pom.xml 中有 docx4j-JAXB-ReferenceImpl、11.4.9 版的 docx4j-export-fo
尝试使用FLAG_EXPORT_PREFER_NONXSL以加快转换速度,但由于异常,响应时间没有明显改善。
已根据默认 Docx4J 配置检查图像处理程序设置。
问题:
如何解决“转换器为空”问题以成功完成 DOCX 到 PDF 的转换?
在使用 Docx4J.toPDF() 转换文档时,我可以应用任何优化来减少响应时间吗?我已经尝试使用非基于 XSLT 的转换 (FLAG_EXPORT_PREFER_NONXSL),但性能改进还不够。
环境:
Java 版本:17 和 Docx4J 版本:11.4.9(类路径中的 docx4j-export-fo)
任何可以解决这些问题的见解、建议或优化将不胜感激。感谢您的时间和帮助!
答: 暂无答案
评论