2013-08-05 46 views
0

我想在現有的PDF中提供超鏈接,點擊時將打開該文件。如何才能做到這一點?Java使用itext設置本地文件現有pdf中的超鏈接

我嘗試下面的代碼就工作的優良外部超鏈接一樣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) { 

     } 

我也嘗試使用如下註解:通過@布魯諾Lowagie

   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); 

我也嘗試下面的代碼註釋:它建立在給定鏈路但在intro.pdf文件,當我點擊鏈接它在同一頁上(intro.pdf)] see in below image
按照上述圖片

   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(); 

預先感謝(的intro.pdf頁碼-2圖像)。

回答

1

您需要指定協議。對於網頁,您的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:

enter image description here

+0

imdb.setRemoteGoto( 「文件:/// d:/intro.pdf」, 「1」);這也不起作用 –

+1

呃...或者你用'setAnchor()'使用一個URI,或者你用'setRemoteGoto()'使用一個簡單的文件路徑。請看一下這個例子,不要混合使用解決方案。 –

+0

讓我試試這個例子。 –