如何使用iText

时间:2019-03-07 12:08:22

标签: java pdf-generation itext7

我正在使用iText 7.0.5的“链接”和“目标”标签来创建链接,同时生成pdf文档。当只有一个链接和目标时,它会按预期工作。但是,当我添加多个链接和目标时,它无法正常工作。 例如,有三个链接和3个目标,每个链接映射到不同的目标。如果我单击PDF中的第三个链接,它将被重定向到第三个目标,但是如果我单击第一个和第二个链接,这些链接也将被重定向到第三个目标,而不是第一个或第二个目标。 下面是示例代码,我如何使用iText创建链接和目标。 请让我知道这里可能是什么问题。还有另一种方法可以实现这一目标。谢谢。

// PDF文档将保存这些表。目的地

    Table destinationTable1 = new Table(1);
    Cell cell = new Cell().add(addHeaderCellWithBorder("First Destination"));
    cell.setProperty(Property.DESTINATION, "dest1");
    destinationTable1.addCell(cell);

    Table destinationTable2 = new Table(1);
    Cell cell = new Cell().add(addHeaderCellWithBorder("Second Destination"));
    cell.setProperty(Property.DESTINATION, "dest2");
    destinationTable2.addCell(cell);

//在另一个表中创建链接

    Table linkTable1 = new Table(100);
    Cell linkcell1 = new Cell();
    Paragraph p1 = new Paragraph();
    PdfAction firstLink = PdfAction.createGoTo("dest1");
    PdfLinkAnnotation firstLinkAnnot = new PdfLinkAnnotation(new Rectangle(0, 0, 0, 0))
            .setHighlightMode(PdfAnnotation.HIGHLIGHT_INVERT).setAction(firstLink)
            .setBorderStyle(PdfAnnotation.STYLE_UNDERLINE);
    Link link1 = new Link("First Link", firstLinkAnnot);
    p1.add(link1.setUnderline()).setFontColor(Color.BLUE).setFontSize(7).setPaddingTop(1).setMultipliedLeading(1);
    linkTable1.addCell(linkcell1.add(p1).setBorder(Border.NO_BORDER));

    Table linkTable2 = new Table(100);
    Cell linkcell2 = new Cell();
    Paragraph p2 = new Paragraph();
    PdfAction secondLink = PdfAction.createGoTo("dest2");
    PdfLinkAnnotation secondLinkAnnot = new PdfLinkAnnotation(new Rectangle(0, 0, 0, 0))
            .setHighlightMode(PdfAnnotation.HIGHLIGHT_INVERT).setAction(secondLink)
            .setBorderStyle(PdfAnnotation.STYLE_UNDERLINE);
    Link link2 = new Link("Second Link", secondLinkAnnot);
    p2.add(link2.setUnderline()).setFontColor(Color.BLUE).setFontSize(7).setPaddingTop(1).setMultipliedLeading(1);
    linkTable2.addCell(linkcell2.add(p2).setBorder(Border.NO_BORDER));

0 个答案:

没有答案