2012-03-13 3 views
1

iText + XHTMLRenderer를 사용하여 큰 HTML 파일을 PDF로 변환합니다. 매우 (XHTMLRenderer + iText보다 HTML을 PDF로 변환하는보다 효율적인 방법

num  instances   bytes class name 
1:  1344539  776639912 [B 
2:  1798853  301253344 [C 
3:  535059  72768024 org.xhtmlrenderer.render.InlineLayoutBox 
4:  762761  52412032 [Ljava.lang.Object; 
5:  1519522  48624704 java.lang.String 
6:  1149491  45979640 com.someco.p.d 
7:  203533  38674984 [I 
8:  216490  31313568 <constMethodKlass> 
9:  216490  29455216 <methodKlass> 
10:  387065  24772160 org.xhtmlrenderer.render.InlineBox 
11:   23732  23915216 <constantPoolKlass> 
12:  727350  23275200 java.awt.Rectangle 
13:  243878  23095936 [Ljava.util.HashMap$Entry; 
14:  147045  22350840 org.xhtmlrenderer.render.LineBox 
15:  667914  21373248 java.util.HashMap$Entry 
16:  855194  20524656 java.util.concurrent.LinkedBlockingQueue$Node 
17:   23732  18543256 <instanceKlassKlass> 
18:  537890  17212480 org.xhtmlrenderer.css.style.derived.RectPropertySet 
19:  688836  16532064 org.xhtmlrenderer.layout.PaintingInfo 
20:  688836  16532064 java.awt.Dimension 
21:  264061  15254448 <symbolKlass> 
22:  268028  15009568 org.xhtmlrenderer.render.InlineText 

분명히, 이것은로 인해 일어난 : 이것은 히스 덤프입니다

This is a jstack dump: 
02aaabc585000 nid=0x3af7 runnable [0x00002aaaf0269000] 
    java.lang.Thread.State: RUNNABLE 
    at java.awt.geom.Path2D$Double.rectCrossings(Path2D.java:1288) 
    at java.awt.geom.Path2D.intersects(Path2D.java:2290) 
    at java.awt.geom.Path2D.intersects(Path2D.java:2314) 
    at org.xhtmlrenderer.layout.BoxCollector.intersectsAggregateBounds(BoxCollector.java:90) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:121) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:139) 
    at org.xhtmlrenderer.layout.BoxCollector.collect(BoxCollector.java:46) 
    at org.xhtmlrenderer.layout.Layer.paint(Layer.java:314) 
    at org.xhtmlrenderer.pdf.ITextRenderer.paintPage(ITextRenderer.java:384) 
    at org.xhtmlrenderer.pdf.ITextRenderer.writePDF(ITextRenderer.java:348) 
    at org.xhtmlrenderer.pdf.ITextRenderer.createPDF(ITextRenderer.java:315) 
    at org.xhtmlrenderer.pdf.ITextRenderer.createPDF(ITextRenderer.java:246) 

: 오늘, 우리의 개발 환경에서 모든 자원을 게걸스럽게 사용에서 그것을 렌더링 관리 , 매우) 큰 HTML 파일을 변환합니다. HTML을 "화면"으로 렌더링하지 않고 큰 HTML 파일을 변환하지 못하도록하거나 HTML을 PDF 으로 변환하는보다 효율적인 방법을 찾으려면 처음에는 (이것은 XHTMLRednerer가 기본적으로하는 것입니다) .

웹에서 인터넷 검색 및 검색은 좋은 대안을 제시하지 못했습니다. 그들은 우리가 신뢰할 수있는 것을 모르는 일부 스케치 회사에 의해 모두입니다. 누구든지 대안을 염두에두고 있습니까? HTMLWorker로 iText를 함께 제공하는 데 사용

+1

몇 가지 프로젝트에서 [wkhtmltopdf] (http://code.google.com/p/wkhtmltopdf/)를 성공적으로 사용했습니다. 그럴 가치가 있니? – Viccari

+0

wkhtmltopdf +1, 잘 작동합니다. – btantlinger

+1

이것은 Java 도구가 아니며 외부 바이너리입니다. 많은 바이너리가 있지만 순수한 자바 솔루션을 찾고 있습니다. – dansch

답변

2

http://sourceforge.net/projects/xmlworker/

XMLWorker. 지나치게 복잡한 html에서는 작동하지 않을 수도 있지만 시도해보십시오.

현재 해결책은 물론 iText7과 함께 pdfHTML (iText7 부가 기능)을 사용하는 것입니다.

관련 문제