使用 iText 5.5.13.2 在现有 PDF 中创建 link

Create a link in Existing PDF Using iText 5.5.13.2

如何在 PDF 中添加外部 link 并重定向到网页。 . . .

示例图片如下所述

点击 Goolge,用户应该重定向到网页 https://www.google.com

这是我的代码

private void createPDFiText() {
        int margin = getResources().getDimensionPixelSize(R.dimen._5sdp);
        Document document = new Document(PageSize.A4, margin, margin, margin, margin);

        try {
            PdfWriter.getInstance(document, getOutputStream());
            document.open();

            for (int i = 12; i <= 17; i++) {
                
                Phrase phrase = new Phrase("Open ");
                Phrase phrase1 = new Phrase(" on Click On it.");

                Font anchorFont = new Font(Font.FontFamily.UNDEFINED, 25);
                anchorFont.setColor(BaseColor.BLUE);
                anchorFont.setStyle(Font.FontStyle.UNDERLINE.getValue());

                Anchor anchor = new Anchor("Google", anchorFont);
                anchor.setReference("www.google.com");


                phrase.add(anchor);
                phrase.add(phrase1);
                
                document.add(phrase);
                

            }
            document.close();

        } catch (DocumentException | IOException e) {
            e.printStackTrace();
        }

    }

我指的是这个answer。看一看。使用 iText 5.5.13.2 修改现有的 pdf 文件很复杂。但是提到的解决方案更容易。 iText 7 有更方便的方式来修改现有的 pdf。 还有其他几种方法。像 PdfStamper 等

根据参考答案,添加以下代码制作锚点。

Phrase phrase = new Phrase("Open ");
Phrase phrase1 = new Phrase(" on Click On it.");

Font anchorFont = new Font(Font.FontFamily.UNDEFINED, 11);
anchorFont.setColor(BaseColor.BLUE);
anchorFont.setStyle(Font.FontStyle.UNDERLINE.getValue());

Anchor anchor = new Anchor("Google", anchorFont);
anchor.setReference("www.google.com");

phrase.add(anchor);
phrase.add(phrase1);
document.add(phrase);

根据需要更改字体和颜色。

完整代码:

try {
    PdfReader reader = new PdfReader("test.pdf"); //src pdf path (the pdf I need to modify)

    Document document = new Document();
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("test2.pdf")); // destination pdf path
    document.open();

    PdfContentByte cb = writer.getDirectContent();
    PdfImportedPage page = writer.getImportedPage(reader, 1);

    document.newPage();
    document.setPageSize(reader.getPageSize(1));

    cb.addTemplate(page, 0, 0);

    Phrase phrase = new Phrase("Open ");
    Phrase phrase1 = new Phrase(" on Click On it.");
    Font anchorFont = new Font(Font.FontFamily.UNDEFINED, 11);
    anchorFont.setColor(BaseColor.BLUE);
    anchorFont.setStyle(Font.FontStyle.UNDERLINE.getValue());

    Anchor anchor = new Anchor("Google", anchorFont);
    anchor.setReference("https://www.google.com");

    phrase.add(anchor);
    phrase.add(phrase1);
    document.add(phrase);

    document.close();

    } catch (IOException e) {
        e.printStackTrace();
    } catch (DocumentException e) {
        e.printStackTrace();
    }
}