我试图转换html文本生成一个单词表。它工作得很好,创建的word文件是正确的,除了字符样式。
这是我第一次尝试使用Apache POI。
到目前为止,我能够检测到新的线()标记(请参阅下面的代码)。但我还想检查一些其他标记,如、,并为每个部分设置正确的运行值。
举例来说:
这是我的文字,现在是斜体,但也在粗体取决于其重要性
我想我应该解析文本,并为每个部分应用不同的运行,但我不知道如何做。
private static XWPFParagraph getTableParagraph(XWPFTableCell cell, String text)
{
int fontsize= 11;
XWPFParagraph paragraph = cell.addParagraph();
cell.removeParagraph(0);
paragraph.setSpacingAfterLines(0);
paragraph.setSpacingAfter(0);
XWPFRun myRun1 = paragraph.createRun();
if (text==null) text="";
else
{
while (true)
{
int x = text.indexOf("<br>");
if (x <0) break;
String work = text.substring(0,x );
text= text.substring(x+4);
myRun1.setText(work);
myRun1.addBreak();
}
}
myRun1.setText(text);
myRun1.setFontSize(fontsize);
return paragraph;
}
字符串
1条答案
按热度按时间ltskdhd11#
在转换HTML文本时,永远不要只使用字符串方法。
XML
和HTML
都是标记语言。它们的内容是标记,而不仅仅是纯文本。需要遍历标记以获取所有单个节点及其含义。这个遍历过程从来都不是微不足道的,因此有专门的库。在这些库的深处也需要使用字符串方法,但这些方法被 Package 成用于遍历标记的有用方法。对于遍历
HTML
,例如可以使用jsoup。特别是使用NodeVisitor的NodeTraversor对于遍历HTML
非常有用。我的示例创建了一个实现
NodeVisitor
的ParagraphNodeVisitor
。这个接口请求方法public void head(Node node, int depth)
,每当NodeTraversor
在节点的头部时调用该方法,并且每当NodeTraversor
在节点的尾部时调用public void tail(Node node, int depth)
。在那些方法中,可以实现用于处理单个节点的过程。在我们的例子中,这个过程的主要部分是我们是否需要一个新的XWPFRun
以及这个运行需要什么设置。范例:
字符串
测试结果:
的数据
免责声明:这是一个工作草案,显示的原则。它既不是完全准备好的,也不是在生产环境中使用的代码准备好的。