2013-08-05 2 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 예제를 참조하십시오. 당신이 PDF 문서 내에서 보면

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

, 당신은 새 파일이 hello_link.pdf라는 것을 볼 수 있습니다 :

기존 문서에 대한 링크를 추가하려면

이 그것을 수행하는 방법이다 ("1", "/intro.pdf 파일 : /// D");

enter image description here

+0

imdb.setRemoteGoto : 이전 파일 hello.pdf을 참조하는 링크 주석을 포함 이것은 또한 작동하지 않습니다 –

+1

Er ...'setAnchor()'와 함께 URI를 사용하거나'setRemoteGoto()'와 함께 간단한 파일 경로를 사용하십시오. 이 예제를 살펴보고 솔루션을 혼합하지 마십시오. –

+0

이 예제를 사용해 보겠습니다. –

관련 문제