2017-11-23 30 views
2

거대한 카탈로그 (~ 1500 페이지)를 HTML로 생성하고 Jsoup와 openhtmltopdf (비행 접시를 사용하는)을 통해 PDF로 변환합니다. 결과 PDF에서 많은 링크를 클릭 할 수 없으며 이유를 찾을 수 없습니다. 그것은 176 페이지와 10.000 링크가있는 PDF를 생성openhtmltopdf/flying dish : 거대한 PDF의 많은 링크를 클릭 할 수 없습니다. (PDF 주석이 설정되지 않았습니다.)

import org.jsoup.helper.W3CDom; 
import org.w3c.dom.Document; 
import org.jsoup.Jsoup; 
import com.openhtmltopdf.pdfboxout.PdfRendererBuilder; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 

public class Main { 

    public static void main(String[] args) throws Exception { 

     PdfRendererBuilder pdfBuilder = new PdfRendererBuilder(); 

     String html = "<html><head></head><body>"; 
     for (Integer i = 0; i < 10000; i++) { 
      html += "<a href='http://www.google.de?q=" + i + "'>blabla</a> <br>"; 
     } 
     html += "</body></html>"; 

     File file = new File("/tmp/tmp.pdf"); 
     FileOutputStream fop = new FileOutputStream(file); 

     W3CDom w3cDom = new W3CDom(); 
     Document w3cDoc = w3cDom.fromJsoup(Jsoup.parse(html)); 

     pdfBuilder.withW3cDocument(w3cDoc, "/"); 
     pdfBuilder.toStream(fop); 
     try { 
      pdfBuilder.run(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

:

다음 프로그램을 고려하십시오. 페이지 1 ~ 3에서 그들은 클릭 가능하며, 이후에는 동일하지 않지만 클릭 할 수 없습니다. 마지막으로 클릭 가능한 링크는 112 번이며, 소스 코드에서 내가 발견 :

870 0 obj 
<< 
/W 0.0 
/S /S 
>> 
endobj 
871 0 obj 
<< 
/S /URI 
/URI (http://www.google.de?q=111) 
>> 
endobj 
872 0 obj 
<< 
/W 0.0 
/S /S 
>> 
endobj 
873 0 obj 
<< 
/S /URI 
/URI (http://www.google.de?q=112) 
>> 
endobj 
874 0 obj 
<< 
/W 0.0 
/S /S 
>> 
endobj 
875 0 obj 
<< 
/F1 1049 0 R 
>> 
endobj 

은 분명히 수 (112) 후 주석 객체에 더 이상 저장 한 URL이 없습니다.

내 프로그램은 자연스럽게 더 복잡합니다. 그것의 처음 5 개 6 개의 페이지에 모든 연결은 누른 후에, 몇몇은이고 대부분은 그렇지 않다. 어떤 것들은 여전히 ​​클릭 할 수 있지만 완전히 무작위로 보인다.

아무도 도와 줄 수 있습니까? 어떤 아이디어로 인해이 문제가 발생하거나이를 해결할 수 있습니까? openhtmltopdf의 버그?

-

편집 1 : 대신 withW3cDocument의 withHtmlContent를 사용 같은 문제가있다.

+1

문제를 재현하려고 시도했지만 문제가 해결되었습니다. 정확한 코드로 생성 된 PDF는 176 페이지로 구성되며 클릭 가능한 링크는 10k입니다. 나는'jsoup 1.11.2'와'openhtmltopdf-pdfbox-0.0.1-RC11'을 사용했습니다. – obourgain

+1

나 같은데,'openhtmltopdf-pdfbox-0.0.1-RC12'로 완벽하게 작동합니다. 사용하는 라이브러리 버전을 공유해야합니다. – Babl

+0

문제가 해결되었습니다. 전에 RC8과 1.10.2를 사용했습니다. 내 현상금으로 지금 무엇을합니까? – Paflow

답변

0

생성 된 PDF는 jsoup 1.11.2openhtmltopdf-pdfbox-0.0.1-RC11으로 완벽하게 작동합니다.

이 문제는 수정 된 구 버전 openhtmltopdf의 버그로 인해 발생한 것 같습니다.