使用iText将文本添加到pdf的特定页面

时间:2018-06-22 19:24:22

标签: java pdf itext

我需要创建一个工具,该工具每隔一页就为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();
    }

有什么想法仅在特定页面上添加超链接/文本吗?

1 个答案:

答案 0 :(得分:1)

您写道:

  

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

这是iText文档:PdfStamper

  

getOverContent

     

public PdfContentByte getOverContent(int pageNum)

     

获取PdfContentByte来覆盖原始页面   文档。

     

参数:

     

pageNum-写入额外内容的页码

     

返回:

     

一个PdfContentByte覆盖原始文档的页面

这是您编写的代码:

PdfContentByte canvas = stamper.getOverContent(1);

您使用1作为pageNum的值。

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

重要提示:

您写

  

我遵循了iText文档

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

如果这是正确的,那么为什么仍使用旧版本的iText?当前版本为7.1.2,并且该版本不再存在PdfStamper类。正如chapter 5iText 7 Jump-Start tutorial中所述,如今将内容添加到现有PDF的方法有所不同。

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