ObfuscatedFontPart.deleteEmbeddedFontTempFiles 中的 docx4j NullPointerException

Sum*_*h S 2 java ubuntu docx4j

我正在我的软件中使用 docx4j 将 docx 文件转换为 html。我正在基于 Windows 的系统中进行开发,我的产品是 AWS 中的 Ubuntu Linux 14.04。在 Windows 中一切正常,但是当涉及到 Ubuntu 时,它向我抛出一个异常,如下所示。

\n\n
\n

2015-11-19 07:33:36 错误 AbstractExporter:108 - 导出\n 包 java.lang.NullPointerException 时出现异常,位于\n org.docx4j.openpackaging.parts.WordprocessingML.ObfuscatedFontPart.deleteEmbeddedFontTempFiles(ObfuscatedFontPart.java:263)\n在\n org.docx4j.openpackaging.parts.WordprocessingML.FontTablePart.deleteEmbeddedFontTempFiles(FontTablePart.java:161)\n 在\n org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:91)\n在 org.docx4j.Docx4J.toHTML(Docx4J.java:511) 在\n com.testbudha.document.impl.WordDocumentExtractor.toHtml(WordDocumentExtractor.java:31)\n 在\n com.testbudha.document.impl.DocXExtractor .getText(DocXExtractor.java:31)\n 位于\n com.testbudha.document.impl.DocumentServiceImpl.getFileText(DocumentServiceImpl.java:18)\n 位于\n com.testbudha.server.controller.StudentHomeController.getResumeText(StudentHomeController .java:120)

\n
\n\n

我知道这是一个与字体相关的问题,我尝试安装

\n\n
\n

ttf-mscorefonts-安装程序

\n
\n\n

但它并没有改变任何东西我也尝试使用这个脚本安装vista字体。然后我也遇到了同样的异常

\n\n

Vista 字体安装程序

\n\n
protected String toHtml(WordprocessingMLPackage wordMLPackage, String path, HttpServletRequest request)\n            throws Docx4JException {\n        try {\n\n            HTMLSettings htmlSettings = Docx4J.createHTMLSettings();\n            htmlSettings.setImageDirPath(path + "/_files");\n            htmlSettings.setImageTargetUri(request.getContextPath() + "/getfile/");\n            htmlSettings.setWmlPackage(wordMLPackage);\n\n            OutputStream os = new ByteArrayOutputStream();\n            Docx4jProperties.setProperty("docx4j.Convert.Out.HTML.OutputMethodXML", true);\n            Docx4J.toHTML(htmlSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);\n            String outputHtml = ((ByteArrayOutputStream) os).toString().replaceAll("\xc3\x82", "\\n").replaceAll(" \xc3\xa2\xe2\x82\xac\xe2\x80\x9c ", "-")\n                    .replaceAll("(?s)\xc3\xa2\xe2\x82\xac.\\\\s*", "").replaceAll("\\\\[(.*?)\\\\]","").replaceAll("#\\\\?", "")\n                    .replaceAll("\\\\s*(?i)HYPERLINK\\\\s\\\\S\\\\s*(\\"([^\\"]*\\")|\'[^\']*\'|([^\'\\">\\\\s]+))+\\"", "($1)")\n                    .replaceAll("(\\\\([^)]*\\\\))\\\\s?(\\\\w+)", "$2$1");\n            return outputHtml;\n        } finally {\n            if (wordMLPackage.getMainDocumentPart().getFontTablePart() != null) {\n                wordMLPackage.getMainDocumentPart().getFontTablePart().deleteEmbeddedFontTempFiles();\n            }\n        }\n
Run Code Online (Sandbox Code Playgroud)\n\n

它抛出异常

\n\n
Docx4J.toHTML(htmlSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);\n
Run Code Online (Sandbox Code Playgroud)\n

Jas*_*ext 5

https://github.com/plutext/docx4j/blob/master/src/main/java/org/docx4j/openpackaging/parts/WordprocessingML/ObfuscatedFontPart.java#L263

tmpFontDir 似乎为 null,可能是因为 System.getProperty("user.home") 返回 null

因此,在添加到类路径的 Docx4j.properties 文件中设置属性“docx4j.openpackaging.parts.WordprocessingML.ObfuscatedFontPart.tmpFontDir”。