gpt4 book ai didi

java - 解析 HTML 片段并添加到 PdfPTable

转载 作者:太空宇宙 更新时间:2023-11-04 14:25:18 25 4
gpt4 key购买 nike

我正在创建一个由多个 PdfPTable 组成的 PDF,其中一些 PdfCell 由简单的短语组成,其他则需要解析 HTML 片段。为了确保解析的 HTML 添加所需的样式并在正确的位置,我将其存储在段落中,然后将其添加到 PdfPCell。然而,这样做会导致我在处理一些 HTML 标签(如列表和引号)时遇到问题。下面是我正在做的事情的一个粗略示例,我该如何正确处理 HTML 列表、引号等?

例如:iText 正确处理 HTML 列表并知道将其转换为 iText List/ListItem。我需要将该列表添加到我的 PdfTable 中。我知道将列表元素放在段落中会取消正确的样式(整个列表最终位于一行上,没有编号),并且想知道处理此问题的正确方法

PdfPTable table = new PdfPTable(1);
table.addCell(parseHtmlToParagraph(htmlString));
table.addCell(new Phrase("Name" + user.getName()));
<小时/>
public Paragraph parseHtmlToParagraph(String str) throws IOException {
StringReader body = new StringReader(str);
final Paragraph para = new Paragraph();

XMLWorkerHelper.getInstance().parseXHtml(new ElementHandler() {
@Override
public void add(Writable w) {
if (w instanceof WritableElement) {
List<Element> elements = ((WritableElement) w).elements();
for (Element e : elements) {
para.add(e);
}
}
}
}, body);

return para;
}

最佳答案

答案很简单:通过在文本模式中创建单元格而不是在复合模式中创建单元格,您将抛弃所有结构(例如列表结构) >.

像这样创建你的单元格:

PdfPCell cell = new PdfPCell();
List<Element> elements = ((WritableElement) w).elements();
for (Element e : elements) {
cell.addElement(e);
}

您正在使用 addCell() 方法隐式创建 PdfPCell 实例。您将 Paragraph 传递给此方法,但此 Paragraph 被转换为 Phrase。当您使用 Phrase 隐式创建 PdfPCell 时,该 Phrase 中存在的所有内容都将降级为纯粹的文本元素。

关于java - 解析 HTML 片段并添加到 PdfPTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26745277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com