我在将HTML转换为docx时遇到了新问题,它引发了异常:
组织。xml。萨克斯。SAXS异常;行号:4;栏目号:73;实体“nbsp”已被引用,但未被声明
正如我所理解的,这是因为docx4j认为我的文件是XML,并希望将其转换为docx但XML中只有5个预定义的实体,而nbsp等实体没有在XML中定义。如何让docx4j将超文本标记语言转换为doc,而无需在doctype中声明实体nbsp?
是docx4j的不正确工作还是它的限制?
这是我的代码:
package ru.simplexsoftware.constructorOfDocuments.web.rest;
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.exceptions.InvalidFormatException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.NumberingDefinitionsPart;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.HttpRequestHandler;
import ru.simplexsoftware.constructorOfDocuments.dao.TemplateDao;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.JAXBException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
public class DocxFileDownloadServlet implements HttpRequestHandler {
@Autowired
TemplateDao templateDao;
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String parameter = request.getParameter("documentId");
Long documentId = Long.parseLong(parameter);
WordprocessingMLPackage wordMLPackage = null;
try {
wordMLPackage = WordprocessingMLPackage.createPackage();
} catch (InvalidFormatException e) {
e.printStackTrace();
}
NumberingDefinitionsPart ndp = null;
try {
ndp = new NumberingDefinitionsPart();
} catch (InvalidFormatException e) {
e.printStackTrace();
}
try {
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
} catch (InvalidFormatException e) {
e.printStackTrace();
}
try {
ndp.unmarshalDefaultNumbering();
} catch (JAXBException e) {
e.printStackTrace();
}
XHTMLImporterImpl xHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
xHTMLImporter.setHyperlinkStyle("Hyperlink");
String htmlString=templateDao.get(documentId).html;
htmlString = htmlString.replaceAll("<br>","<br/>");
InputStream stream = new ByteArrayInputStream(htmlString.getBytes(StandardCharsets.UTF_8.name()));
// Convert the XHTML, and add it into the empty docx we made
try {
wordMLPackage.getMainDocumentPart().getContent().addAll(
xHTMLImporter.convert(htmlString, null));
} catch (Docx4JException e) {
e.printStackTrace();
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
wordMLPackage.save(outputStream);
} catch (Docx4JException e) {
e.printStackTrace();
}
response.setContentType("application/msword");
response.getOutputStream().write(outputStream.toString().getBytes("UTF-8"));
response.flushBuffer();
}
}
您可以尝试使用AltChunkType将HTML字符串插入docx段落
wordMLPackage.getMainDocumentPart().addAltChunk(AltChunkType.Xhtml, htmlString .getBytes());
我一直在尝试使用他们的库将html内容转换为docx,我确实在运行我的应用程序后创建了一个docx文件,但它有空白内容,而html中确实有一些内容。请检查下面的代码,我已经包含了git上AndroidDocxtoHTML示例中所有必要的库。 代码: 我不明白我得到的空白文档的代码中缺少了什么。我为java找到了这段代码,我为android修改了这段代码。有些人建议使用夜间构建jar进行xhtml转
(*来自http://www.docx4java.org/forums/xhtml-import-f28/html-docx-html-inserts-a-lot-of-space-t1966.html#p6791?sid=78b64a02482926c4dbdbbafbf50d0a914将在应答时更新) 我已经创建了一个html测试文档,其内容如下: 然后,我的代码从这个html创建一个docx
我有一个应用程序试图拉一些数据从数据库,然后保存在一个docx文件。这些数据的一部分是html代码,因此使用docx4j,我能够将html代码转换为docx格式。这里有一个相关的帖子。 现在,我想使用docx4j将这部分文本(在docx文件的表单元格中)转换回html格式,并将html代码保存到数据库中。 或者也许有更好的解决方案来完成从docx到HTML的转换?希望我说清楚了。任何提示都很感激。
我对docx4j样本有一些问题。我需要转换一个文件从docx在html格式和回来。我正在尝试编译ConvertInXHTMLDocument。java示例。它创建的Html文件很好,但当试图将其转换回docx时,抛出一个缺少关闭标记(META、img等)的异常。有人遇到过这个问题吗?
null 很抱歉,我无法发布我尝试过的任何内容,因为我还没有在此任务上尝试过任何内容,尽管我使用将从获得的转换为,以便在应用程序的中输出。请开导我,我在压力和困惑中迷失了……!