2

我的 java 应用程序读取数据库行,并创建 iText PDF 文件。问题是我得到的行中的某些单元格包含粗体 HTML 标记,这意味着我还必须在各自的 iText 段落中显示粗体块。

因此,例如 DB 行的一个单元格可能如下:

This is an <b>important</b> line and i <b>want</b> formatting in it

我目前正在做的只是用 jsoup 获得粗体

org.jsoup.nodes.Document doc = Jsoup.parse(input);
org.jsoup.select.Elements bold = doc.select("B");
System.out.println("[BODY: "+doc.body().text()+"] BOLD:>> " + bold.text());

我真正想做的是在粗体和非粗体部分之间分割字符串。因此,我的问题的正确解决方案将输出

This is an
<b>important</b>
line and i 
<b>want</b>
formatting in it

或类似的东西,这样我就可以创建我的 iText 块并添加到我的段落中。有没有办法用 Jsoup 做到这一点?

4

2 回答 2

3

您可以使用Node's 代替Elements

final String html = "This is an <b>important</b> line and i <b>want</b> formatting in it";
Document doc = Jsoup.parse(html);


for( Node node : doc.body().childNodes() )
{
    System.out.println(node.toString());
}

输出:

This is an 
<b>important</b>
 line and i 
<b>want</b>
 formatting in it

如果前导空格有问题,请使用node.toString().trim().

于 2013-05-13T12:56:20.150 回答
0

我认为您的问题有几种解决方案:

  • 第一个,最简单的:你一个一个地遍历所有元素,并且对于每个元素,你检查它是否是一个<b>标签。为此:通用选择器,所有元素的循环并检查元素是否为粗体标记
  • 另一个更复杂一点,我想如果你有几个标签,效率会更高:你选择粗体,而非粗体带有非选择器::not('b')。您现在有 2 个元素列表,但它们没有排序。要检索订单,您可以使用elementSiblingIndex

如果您想了解更多关于选择器的信息:http: //jsoup.org/apidocs/org/jsoup/select/Selector.html

于 2013-05-13T12:57:24.810 回答