我今天开始使用docx4j;
我成功地创建了一个带有表的文档,其中包含了来自外部源的内容。
该内容的内部包含简单的,例如,列可能包含如下所示的字符串:
String content = "Hello <strong>Word</strong><br>";如果我用createParagraphOfText()方法将这个字符串放入列中:
Tc tableCell = factory.createTc();
tableCell.getContent().add(
wordMLPackage.getMainDocumentPart().createParagraphOfText(content)
);
tableRow.getContent().add(tableCell);它在文件一词中呈现为-(如预期的):
你好词组
我试图实现的是在文档中放置呈现的 HTML,以获得以下输出:
你好Word
我已经在StackOverflow和网络上搜索过,并且尝试了几乎所有找到的例子,但是这些信息是非常分散的,在深入挖掘之前,我想知道我是否在正确的方向上。
我已经将docx4j-ImportXHTML jar添加到Maven,但是在文档中它声明内容必须是格式良好的 XHTML,而我只有一堆文本和HTML混合在一起。
此外,使用它的许多(少数)示例包括使用现有的XML文件将其转换为docx,而我擅长手动完全创建docx,只需要呈现包含HTML的单个字符串。这个模块可以吗?
我也看到了其他docx4j模块 (例如。( xhtmlrenderer),但我不确定哪一个是好的。
有人知道在迭代期间在表(‘s单元格)中添加块HTML的正确过程吗?
发布于 2015-01-28 22:57:58
你可以选择:
这样做可以让您更好地控制,并意味着下游处理将工作(如转换为PDF),而不必先打开docx在Word。
让Word来做这件事是AlternativeFormatInputPart (altChunk)的方法。
我的建议是,如果可以的话,你自己去做。我建议您使用docx4j-ImportXHTML。
我已经将docx4j-ImportXHTML jar添加到Maven,但是在docs中它声明内容必须是格式良好的XHTML,而我只有一堆文本和HTML混合在一起。
您可以使用其中一个“整洁”库将其转换为XHTML。由于有相当多的这些,我们留下您使用和如何配置它取决于您。
只需要呈现一个包含HTML的字符串。这个模块可以吗?
ConvertInXHTMLFragment.java就是一个例子。
我还看到还有其他的docx4j模块(例如。),但我不确定哪一个是好的。
docx4j-ImportXHTML依赖于此。
发布于 2015-02-02 13:43:58
如果您有简单的HTML而不是XHTML,如
String content = "Hello <strong>Word</strong><br>";解决方案是将HTML封装到HTML元素中,例如。A div:
String content = "<div>" + content + "</div>";并手动替换未封闭的空元素,例如:
content = content.replaceAll("<br>", "<br/>");此时,您可能会收到无法识别的HTML实体的错误,例如拉丁口音(à等)。然后,您可以使用带有DTD声明的HTML文档来包围代码,而不是使用div。故事到此结束。
工作示例:
private void whatever(){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
pkg = WordprocessingMLPackage.createPackage(PageSizePaper.A4,true);
factory = Context.getWmlObjectFactory();
Tbl table = factory.createTbl();
for (Item item : Items){
Tr tableRow = factory.createTr();
Tc tableCell = factory.createTc();
/* This is the core of the problem */
String content = wrapXHTML(item.getContent());
List<Object> objects = importer.convert(wrapToXHTML(content), null);
tableCell.getContent().addAll(objects);
/* problem solved */
tableRow.getContent().add(tableCell);
table.getContent().add(tableRow);
}
pkg.getMainDocumentPart().addObject(table);
pkg.save(baos);
}
private String wrapXHTML(String content) {
content = content.replaceAll("<br>", "<br/>");
/* ... other substitutions ... */
return dtd + html + head + start + content + end;
}
private final static String dtd =
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\""
+ " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">";
private final static String html = "<html xmlns=\"http://www.w3.org/1999/xhtml\">";
private final static String head = "<head></head>";
private final static String start = "<body><div>";
private final static String end = "</div></body></html>";发布于 2018-11-02 07:42:50
HTML文本的格式应该如下所示,在我的例子中, 不起作用,所以我删除了它。
String content = "<html>Hello <strong>Word</strong><br></html>";XHTML用于将html转换为xhtml。
XHTMLImporter xHTMLImporter = new XHTMLImporterImpl(wordPackage);
Tc tableCell = factory.createTc(); 这是您需要在代码中进行的更改。
tableCell.getContent().add(wordMLPackage.getMainDocumentPart().
getContent().addAll(xHTMLImporter.convert(content, null)));
tableRow.getContent().add(tableCell);这个代码对我有用,请试试这个。
https://stackoverflow.com/questions/28176545
复制相似问题