情况(我的任务):我需要计算目录。我的流程看起来像数据 - > java类 - > xml - > xslt - > html - >解析为ElementList - >分析元素列表 - >制作pdf。在舞台'xslt'上,我为(未来)表内容的点添加标记。在舞台'分析元素列表'中,我在ElementList元素中制作目录并清除标记。到目前为止,没有问题。对于正确的位置点页码,我必须多次形成pdf。当我创建第二个(或更多)时间pdf时会出现问题。看起来表格中缺少某些内容(可能是文字和/或图片) - 并非所有内容都消失了。
在第一次pdf制作之后,所有内容都存在。 如果使用带有解析元素的第二个实例ElementList,则第二个pdf使内容正确。
重新使用ElementList有什么问题?如何修复它?
PS。 itext-5.5.11 + xmlparser-5.5.11
PPS。抱歉我的英语不好
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;
}
答案 0 :(得分:0)
如果div标签内容位于td-tag中,则当前算法不支持。我修复了它 - 删除了td-tags中的div-tag。