使用ElementList丢失第二个表数据

时间:2017-06-20 12:45:04

标签: java itext

情况(我的任务):我需要计算目录。我的流程看起来像数据 - > 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;
}

1 个答案:

答案 0 :(得分:0)

如果div标签内容位于td-tag中,则当前算法不支持。我修复了它 - 删除了td-tags中的div-tag。