簡體   English   中英

Java使用itext在現有pdf中設置本地文件超鏈接

[英]Java Set local file Hyperlink in existing pdf using itext

我正在嘗試在現有的PDF中提供一個超級鏈接,單擊該鏈接將打開文件。 如何才能做到這一點?

我嘗試按照Code進行操作,它對於外部超鏈接(如http://www.google.com)工作正常,但不適用於D:/intro.pdf等本地文件超鏈接。

我正在使用itext pdf庫。

代碼:

        String in = "D:/introduction.pdf";
        String out = "D:/introduction.pdf";

        try {
            PdfReader reader = new PdfReader(in);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            PdfStamper stamper = new PdfStamper(reader, baos);


            PdfContentByte canvas=stamper.getOverContent(6);
            Chunk imdb = new Chunk("Local Link");
            imdb.setAnchor("http://www.google.com"); // this work
         // imdb.setAnchor("D://intro.pdf");  // this does not work

            ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, new Phrase(imdb), 100, 10, 0);



            stamper.close();
            FileOutputStream fileOutputStream = new FileOutputStream(out);


            IOUtils.write(baos.toByteArray(), fileOutputStream);
        } catch (Exception e) {

        }

我也嘗試使用注釋,如下所示:

                PdfAnnotation annotation;

                PdfName aa=new PdfName("test test");
                annotation = PdfAnnotation.createLink(stamper.getWriter(),
                        new Rectangle(50f, 750f, 180f, 800f),aa,PdfAction.gotoRemotePage("file:///D:/intro.pdf","1", false, true));


                annotation.setTitle("Click Here");

                stamper.addAnnotation(annotation, 1);

我也嘗試過@ Bruno Lowagie的以下代碼注釋:[它在給定頁面上創建鏈接,但在intro.pdf文件中,當我單擊同一頁面上的鏈接(intro.pdf)] 見下圖
如上圖所示( intro.pdf第2頁的圖像)

                PdfReader reader1 = new PdfReader("D://introduction.pdf");
                PdfStamper stamper1 = new PdfStamper(reader1, new FileOutputStream("D://intro.pdf"));
                PdfAnnotation link1 = PdfAnnotation.createLink(stamper1.getWriter(),
                    new Rectangle(136, 780, 559, 806), PdfAnnotation.HIGHLIGHT_INVERT,
                    new PdfAction("D://introduction.pdf", 1));
                link1.setTitle("Click Here");
                stamper1.addAnnotation(link1, 2);
                stamper1.close();

提前致謝。

您需要指定協議。 對於網頁,您的URI以http://開頭; 對於文件,您的URI應該以file://開頭。

但是,由於您要鏈接的文件也是PDF文件,因此您可能不想使用setAnchor()方法。 您應該改用setRemoteGoto()方法。 請參見MovieLinks2示例。

如果要添加到現有文檔的鏈接,請執行以下操作:

PdfReader reader = new PdfReader("hello.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("hello_link.pdf"));
PdfAnnotation link = PdfAnnotation.createLink(stamper.getWriter(),
    new Rectangle(36, 790, 559, 806), PdfAnnotation.HIGHLIGHT_INVERT,
    new PdfAction("hello.pdf", 1));
stamper.addAnnotation(link, 1);
stamper.close();

如果您查看PDF文檔,您會發現名為hello_link.pdf的新文件包含一個鏈接注釋,該注釋引用了舊文件hello.pdf:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM