Java iText:为什么无序html项目符号列表的最后一项没有显示在我的PDF上?
下面是Java iText:为什么无序html项目符号列表的最后一项没有显示在我的PDF上?,java,html,parsing,pdf,itext,Java,Html,Parsing,Pdf,Itext,下面是itextpdf示例 我面临一个问题,每当我将html内容解析为元素并填充pdfCell时,除了最后一项缺失外,其他所有内容都显示良好。是什么原因造成的 我有以下代码: // Relevant code from main part of the class: ByteArrayOutputStream baos = new ByteArrayOutputStream(); Document document = new Document(PageSize.A4, 40, 4
itextpdf
示例
我面临一个问题,每当我将html内容解析为元素并填充pdfCell
时,除了最后一项缺失外,其他所有内容都显示良好。是什么原因造成的
我有以下代码:
// Relevant code from main part of the class:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Document document = new Document(PageSize.A4, 40, 40, 40, 40);
PdfWriter writer = PdfWriter.getInstance(document, baos);
document.open();
document.add(buildContent());
document.close();
// method that should provide content to the document.
public PdfPTable buildContent() throws IOException {
InfoList infoList = infoListInstance.get();
PdfPTable table = new PdfPTable(2);
for (InfoListMessage message
: infolistList.getMessages()) {
renderMessageMetadata(message, table);
renderMessageContent(message, table);
}
return table;
}
// method where the problem occurs and exception is thrown in the for-loop line
public void renderMessageContent(
InfoListMessage message,
PdfPTable table) throws IOException {
PdfPCell cell = new PdfPCell();
for (Element e : XMLWorkerHelper.parseToElementList(message.getContent(), null)) {
cell.addElement(e);
}
table.addCell(cell);
}
我很确定它与html标记有关,但当涉及到复杂的html标记时,我通常会不知所措。下面是一个示例HTML和我的代码。以下是我将以HTML形式提供给XMLWorkerHelper.parseToElementList的内容:
<html>
<head></head>
<body>
<span>Lisätty liitteet</span>
<ul>
<li>document2.txt.txt (23 B)</li>
<li>document1.txt.txt (12 B)</li>
<li>document3.txt.txt (27 B)</li>
</ul>
</body>
</html>
利塞蒂·利泰特
- document2.txt.txt(23 B)
- document1.txt.txt(12 B)
- document3.txt.txt(27 B)
下面是应用程序创建的pdf中一个单元格的屏幕截图:
如果您从请求中获取所有元素,但无法看到插入表中的最后一行,这是因为
表(2)
的最后一行没有所需的所有元素(在您的情况下,表每行需要2个元素),请在返回前使用将最后一行标记为已完成
在public void renderMessageContent
方法中,如果XMLWorkerHelper.parseToElementList(
包含奇数个元素,则不会看到最后一个:
for (Element e : XMLWorkerHelper.parseToElementList(message.getContent(), null))
cell.addElement(e);
table.addCell(cell); // here you only add one cell to a 2 column table!!!!
请看一下。它几乎与您提到的示例相似,但HTML由无序列表组成,而不是段落:
public static final String HTML = "<ul><li>Overview line1</li>"
+ "<li>Overview line2</li><li>Overview line3</li>"
+ "<li>Overview line4</li><li>Overview line5</li></ul>";
public static final String HTML=“- 概述 ;行1
”
+“- 概述和第2行
概述和第3行”
+“- 概述和第4行
概述和第5行
”;
该列表中有5个列表项,当我们查看生成的PDF时,我们会看到所有5个:
当然,这是非常简单的HTML,用于证明列表的最后一项不会消失
以下是并非所有项目都出现的一些可能原因:
- 可能您正在嵌套列表。在表的上下文中不支持列表的深度嵌套
- 标记中可能有一个小错误。例如:您的列表项可能缺少
标记 - 也许列表项中有一些内容是特殊的,而XML Worker无法获取这些内容
请注意,我可以通过在最终的
之后添加一些额外的内容来解决这个问题:请参阅和生成的PDF。但是,这只是一个快速修复,可以解决问题,而不是修复问题。错误应该得到修复。有许多行?对于每个循环都不会保留排序…您是否进行了修改计数以检查元素是否丢失或放错了位置???@JordiCastilla是的,这里的顺序甚至不重要。元素没有显示在pdf中。即使它在循环的列表中。我假设第一列中的单元格添加到renderMessageMetadata()中
method。是的,没错。第一列添加到renderMessageMetadata()中.也许我应该在问题中的代码中说明这一点。谢谢你的详细回答!为了可能节省大家的时间,首先我只是在问题中添加了html和一个屏幕截图。如果这已经足以指出问题的话。我对html真的很糟糕,所以很有可能…我能够重现问题问题。我会将其作为错误进行归档。注意:如果我在最终的
之后添加额外内容,即使只是
,问题也会消失。请看,这不是一个好的解决方案。错误需要修复。再次感谢你。你是最好的。即时回复,帮助,错误归档,解决方法。哇。