poi-tl
poi-tl copied to clipboard
请问可以解析html标签吗?
Sayi您好: 现在这版本貌似不支持html的标签解析,比如p标签,u 标签,sup 标签等。如果内容里面包含html格式,则生成的word也是带有这些标签无法解析的。 另外,比如一个{{content}},它的值是“巴拉巴拉巴拉 u 下划线 /u "这种,我看通过Style设置的是完整的content的值,而不是'u'标签内的值,请问这种怎么处理呢?
你好,暂时不支持解析,但的确是个好想法
我在网上找了一个解析html内容的插件,不知道是否需要。
我在网上找了一个解析html内容的插件,不知道是否需要。
请问可否共享呢?目前自己解析的,感觉会有问题。有完善的插件最好。
找到一种结果很完美的解决办法。 把富文本的地方当成引入外部word,如{{+html}} 然后定义变量的时候 param.put("html", new DocxRenderData(此处是一个由HTML转换为word的InputStream)) InputStream 我是用了 AsposeWord 转换的:
Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.insertHtml(html); ByteArrayOutputStream out = new ByteArrayOutputStream(); doc.save(out, SaveFormat.DOCX);
最后把 OutputStream 转为 InputStream 供 new DocxRenderData() 使用。 效果完美!当然了,AsposeWord 是收费的。
找到一种结果很完美的解决办法。 把富文本的地方当成引入外部word,如{{+html}} 然后定义变量的时候 param.put("html", new DocxRenderData(此处是一个由HTML转换为word的InputStream)) InputStream 我是用了 AsposeWord 转换的:
Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.insertHtml(html); ByteArrayOutputStream out = new ByteArrayOutputStream(); doc.save(out, SaveFormat.DOCX);
最后把 OutputStream 转为 InputStream 供 new DocxRenderData() 使用。 效果完美!当然了,AsposeWord 是收费的。
我搞不懂转为inputStream后怎么使用
写了个插件,因为引入了一些依赖,不适于通过pull request提交,作为一个扩展包。 地址:https://github.com/draco1023/poi-tl-ext 有兴趣的可以试试,通过富文本编辑器得到的html大部分效果都实现了,部分特性后续完善,欢迎交流反馈。
基于jsoup解析html格式元素,为自定义结构元素,消除各种值嵌套关系,然后转换格式支持,输出为word段落
//
public static ParagraphTree readDomParagraph(Element element) {
ParagraphTree elementTree = new ParagraphTree();
String sub_style = element.attr("style");// 样式
if(sub_style.trim().length() != 0) {
String[] its = sub_style.split(";");
for(int j=0;j<its.length;j++) {
String[] n_v = its[j].split(":");
elementTree.addStyle(n_v[0], n_v[1]);//
}
}
String tag = element.tagName();
List<Node> nodes = element.childNodes();
if (element.childrenSize() == 0) {
elementTree.setTag(tag);
elementTree.setText(element.text());
return elementTree;
}
for(int t=0;t<nodes.size();t++) {
Node node = nodes.get(t);
if(node instanceof TextNode) {
ParagraphTree newTree = new ParagraphTree();
newTree.setText(node.outerHtml());
newTree.setTag(tag);
newTree.setStyle(elementTree.getStyle());// TODO: 核实属性是否正确 引用父对象
elementTree.addChild(newTree);
}else if(node instanceof Element) {
Element childElement = (Element)node;
ParagraphTree clindTree = readDomParagraph(childElement);// 进入【递归】处理
elementTree.addChild(clindTree);// 需要先构建子节点信息
}
}
return elementTree;
}