首页 > 解决方案 > 使用 iText 将文本添加到 pdf 的特定页面

问题描述

我需要创建一个工具,为 pdf 文件每隔一页添加一个超链接。

我遵循了 iText 文档,并设法添加了超链接,但仅在第一页上。

我的代码:

public void manipulatePdf(String src, String dest) throws IOException, DocumentException {

        Font bold = new Font(FontFamily.HELVETICA, 30, Font.BOLD);

        PdfReader reader = new PdfReader(src);

        int count = reader.getNumberOfPages();
        Utils.logInfoMessage("Number of pages: " + count, mLogList);
        if(count < 1) {
            Utils.logErrorMessage("file : " + src + " has no pages", mLogList);
            return;
        }

        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));

        PdfContentByte canvas = stamper.getOverContent(1);
        PdfGState gState = new PdfGState();
        gState.setFillOpacity(0.1f);
        canvas.setGState(gState);

        Chunk chunk = new Chunk("www.google.com", bold);
        chunk.setAnchor("https://www.google.ro/");

        Phrase phrase = new Phrase("");
        phrase.add(chunk);

        ColumnText ct = new ColumnText(canvas);
        ct.setSimpleColumn(36, 700, 559, 750);
        ct.addText(phrase);
        ct.go();

        stamper.close();
        reader.close();
    }

任何想法如何仅在特定页面上添加超链接/文本?

标签: javapdfitext

解决方案


你写了:

我遵循了 iText 文档,并设法添加了超链接,但仅在第一页上

这是 iText 文档:PdfStamper

获取内容

public PdfContentByte getOverContent(int pageNum)

获取一个PdfContentByte以覆盖原始文档的页面。

参数:

pageNum- 写入额外内容的页码

回报:

aPdfContentByte覆盖原始文档的页面

这是你写的代码:

PdfContentByte canvas = stamper.getOverContent(1);

您用作1的值pageNum

现在您告诉我:如果您选择1作为页码,那么您为什么会惊讶于您添加的所有内容都只添加在第一页上?

重要的:

你写

我遵循了 iText 文档

我假设您参考 iText 官方网页上的官方文档:https ://itextpdf.com

如果这是正确的,那你为什么还在使用旧版本的 iText?当前版本是 7.1.2,该PdfStamper版本中不再存在该类。正如iText 7 Jump-Start 教程的第 5 章所述,现在向现有 PDF 添加内容的方式有所不同。

仅供参考:这里还有更多教程:https ://developers.itextpdf.com/books


推荐阅读