Java 使用ElementList在第二个服务器上丢失表数据
情境(我的任务):我需要计算目录。我的过程看起来像数据->java类->xml->xslt->html->解析元素列表->分析元素列表->生成pdf。在“xslt”阶段,我添加了(未来)表内容点的标记。在“分析元素列表”阶段,我制作了目录,并在元素列表的元素中清除标记。到目前为止,没有任何问题。对于正确的位置点页码,我必须多次形成pdf格式。当我创建第二次(或更多次)pdf时,就会出现问题。表中似乎缺少一些内容(可以是文本和/或图片),但并不是所有内容都消失了 在第一次pdf制作之后,所有内容都出现了。 如果为第二个pdf使用第二个实例ElementList和已解析的元素,使内容正确 恢复ElementList时有什么问题?如何解决 ps.itext-5.5.11+xmlparser-5.5.11 pps。对不起,我的英语很差Java 使用ElementList在第二个服务器上丢失表数据,java,itext,Java,Itext,情境(我的任务):我需要计算目录。我的过程看起来像数据->java类->xml->xslt->html->解析元素列表->分析元素列表->生成pdf。在“xslt”阶段,我添加了(未来)表内容点的标记。在“分析元素列表”阶段,我制作了目录,并在元素列表的元素中清除标记。到目前为止,没有任何问题。对于正确的位置点页码,我必须多次形成pdf格式。当我创建第二次(或更多次)pdf时,就会出现问题。表中似乎缺少一些内容(可以是文本和/或图片),但并不是所有内容都消失了 在第一次pdf制作之后,所有内容都
private void test() throws DocumentException, IOException {
// step 1: get parsed elements
ElementList list = contentElement.get(BODY).getElements();
// step 2: bytes for first pdf
byte[] bytes = getBytes(list);
// step 3: file 1
File out = new File("1.pdf");
FileOutputStream fos = new FileOutputStream(out);
fos.write(bytes);
fos.close();
// step 4: reuse ElementList
bytes = getBytes(list);
// step 5: file 2
out = new File("2.pdf");
fos = new FileOutputStream(out);
fos.write(bytes);
fos.close();
// Why will it be two different file ?
}
private byte[] getBytes(ElementList list) throws DocumentException, IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Rectangle page = new Rectangle(PageSize.A4);
page = page.rotate();
Document doc = new Document(page, 56, 42, 10, 10);
Rectangle body = new Rectangle(56, 60, 800, 525);
writer = PdfWriter.getInstance(doc, baos);
writer.setPageEvent(this);
doc.open();
ColumnText text = new ColumnText(writer.getDirectContent());
for (Element element : list) {
text.setText(null);
text.addElement(element);
boolean makeNewPage = ColumnText.hasMoreText(text.go());
while (makeNewPage) {
doc.newPage();
text.setSimpleColumn(body);
makeNewPage = ColumnText.hasMoreText(text.go());
}
}
doc.close();
byte[] bytes = baos.toByteArray();
baos.close();
return bytes;
}
当前算法不支持if div标记内容位于td标记中。我修复了它-删除td标签中的div标签。一些进程“消费”内容。例如,当您向
ColumnText
对象添加元素并渲染这些元素时,这些元素就消失了<代码>列文本可以直接或间接使用。由于您没有显示任何代码,也没有告诉我们您使用的是哪个版本的iText,因此很难给您提供更准确的答案。Thanx,为了您的帮助,请更新帖子:添加版本和调试代码