2014-04-24 2 views
0

URL 및 mailto 형식의 하이퍼 링크가 포함 된 PDF가 있습니다. 이제 좌표, 링크 유형 및 대상 주소와 같은 PDF 하이퍼 링크 메타 정보 양식을 추출 할 수있는 방법이나 도구 (타사가 될 수 있음)가 있습니까? 어떤 도움을 주셔서 감사합니다.PDF에서 하이퍼 링크 감지

나는 이미 iText와 PDFBox로 시도했지만 큰 성공을 거두지 못했고 일부 타사 소프트웨어도 나에게 원하는 출력을 제공하지 못했습니다.

나는 당신의 PDF 파일이 복사 방지하는 경우, 당신은 그들이 복사 할 수없는 경우 2 단계로 시작할 수 있습니다, 1 단계부터 시작해야 iText를

 PdfReader myReader = new PdfReader("pdf File Path"); 
     PdfDictionary pageDict = myReader.getPageN(1); 
     PdfArray annots = pageDict.getAsArray(PdfName.ANNOTS); 
     System.out.println(annots); 
     ArrayList<String> dests = new ArrayList<String>(); 
     if(annots != null) 
     { 
      for(int i=0; i<annots.size(); ++i) 
      { 
       PdfDictionary annotDict = annots.getAsDict(i); 
       PdfName subType = annotDict.getAsName(PdfName.SUBTYPE); 
       if (subType != null && PdfName.LINK.equals(subType)) 
       { 
        PdfDictionary action = annotDict.getAsDict(PdfName.A); 
        if(action != null && PdfName.URI.equals(action.getAsName(PdfName.S))) 
        { 
         dests.add(action.getAsString(PdfName.URI).toString()); 
        } // else { its an internal link } 
       } 
      } 
     }   
     System.out.println(dests); 
+1

@ Bobrovsky의 답변은 Doxotic을 사용하는 링크 주석을 검색하고 iText를 사용하여 링크 주석을 검색하거나 PDFBox도 비슷하게 설계되었습니다. 따라서 정말로 문서의 해당 링크가 실제로 링크 주석입니까? 예 : Adobe Reader에는 콘텐츠의 주소를 링크 주석처럼 클릭 할 수있게 만드는 옵션이 있습니다. 어쩌면 그러한 기능으로 인해 실제로 링크 된 주석이없는 동안 링크 주석이 있다고 믿게 할 수 있습니다. (BTW, 시도한 코드를 제공하는 것이 좋을 수도 있으며, 아마도 잘못된 것일 수도 있습니다.) – mkl

+0

감사합니다. 많이 해 주셔서 감사합니다.사실 내 코드는 잘 동작하고 있는데, 이는 Adobe의 속성 중 하나 인 호버 링크입니다. Adobe에서 해당 속성을 만들어서 확인할 수 있도록 사양을 알려 주실 수 있습니다. –

+1

Adobe Reader는 페이지 내용에서 URL을 고려하고 상호 작용하도록 검색합니다. 환경 설정에서이 동작을 켜고 끌 수 있습니다. 어떤 사양 *을 제공할지 모르겠습니다. – mkl

답변

0

링크 추출에 대해 Docotic.Pdf library을 사용할 수 있습니다 (면책 조항 : 회사에서 일함).

다음은 지정된 파일을 열고 모든 하이퍼 링크를 찾고 각 링크의 위치에 대한 정보를 수집하고 각 링크 주위에 직사각형을 그리는 코드입니다.

그런 다음 코드는 수집 된 정보가있는 텍스트 파일과 새 PDF (사각형이있는 링크 포함)를 만듭니다. 결국, 생성 된 두 파일은 기본 뷰어에서 열립니다.

ListAndHighlightLinks("input.pdf", "output.pdf", "links.txt"); 
0

을 사용하여 Java에 다음 코드를 시도

1 단계 : 단어 덕으로 PDF 파일을 변환 : 사용의 Adobe Acrobat Pro 또는 워드로 변환 온라인 PDF :

http://www.pdfonline.com/pdf2word/index.asp 

2 단계 : 여기에 입력 창에 전체 문서를 복사 - 붙여 넣기, 당신은 또한 가벼운 HTML 도구를 다운로드 할 수 있습니다

http://www.surf7.net/services/value-added-services/free-web-tools/email-extractor-lite/ 

선택 'URL', 당신의 구분을 선택, '주소의 유형 추출하는'추출물을 공격 등을하고 바로 그거야.

희망을주고 싶습니다.

+0

Acrobat Pro를 사용해 보았지만 일부 경우에는 실패합니다. 그러나 PDF에서 하이퍼 링크가 흡수되는 x와 y의 좌표에서 좌표를 캡처하는 방법. –

0

하나의 가능성은 Acrobat에서 사용자 정의 JavaScript를 사용하는 것, 그 페이지의 "말"을 열거하고 읽을 것입니다 :

public static void ListAndHighlightLinks(string inputFile, string outputFile, string outputTxt) 
{ 
    using (PdfDocument doc = new PdfDocument(inputFile)) 
    { 
     StringBuilder sb = new StringBuilder(); 

     for (int i = 0; i < doc.Pages.Count; i++) 
     { 
      PdfPage page = doc.Pages[i]; 
      foreach (PdfWidget widget in page.Widgets) 
      { 
       PdfActionArea actionArea = widget as PdfActionArea; 
       if (actionArea == null) 
        continue; 

       PdfUriAction linkAction = actionArea.Action as PdfUriAction; 
       if (linkAction == null) 
        continue; 

       Uri url = linkAction.Uri; 
       PdfRectangle rect = actionArea.BoundingBox; 

       // add information about found link into string buffer 
       sb.Append("Page "); 
       sb.Append(i.ToString()); 
       sb.Append(" : "); 
       sb.Append(rect.ToString()); 
       sb.Append(" "); 
       sb.AppendLine(url.ToString()); 

       // draw rectangle around found link 
       page.Canvas.DrawRectangle(rect); 
      } 
     } 

     // save document with highlighted links and text information about links to files 
     doc.Save(outputFile); 
     System.IO.File.WriteAllText(outputTxt, sb.ToString()); 

     // open created PDF and text file in default viewers 
     System.Diagnostics.Process.Start(outputTxt); 
     System.Diagnostics.Process.Start(outputFile); 
    } 
} 

는이 같은 전화와 샘플 코드를 사용할 수 있습니다 그들의 쿼드 밖으로. 그로부터 링크를 만들거나 (페이지의 링크와 비교할) 실제 텍스트 ("단어")뿐 아니라 좌표를 얻습니다.

"만"설정하면 기존 링크의 경계 인 경우 문서의 링크를 열거하고 테두리 색상 속성을 설정하는 또 다른 Acrobat JavaScript를 사용합니다 (너비도 설정해야 할 수도 있습니다).

""make "는 개인적으로 나에게 연락 할 자유가 있습니다; 그러한 것들은 내 표준"레퍼토리 "의 일부입니다.)