2012-10-02 4 views
15

HTML5/CSS3 문서 인 serverside에서 PDF를 생성하는 솔루션을 찾고 있습니다.HTML5 to PDF serverside

PDF (FOP, iText ...) 작성을위한 솔루션이 많이 있지만 HTML 페이지와 100 % 동일하게 보이는지 확인해야합니다. 따라서 FOP 나 iText와 같은 요소로 PDF 요소를 생성하고 싶지 않습니다.

실제로 브라우저에서 PDF로 인쇄 할 때 수행 할 작업이 있기 때문에 존재해야합니다. 이상적으로 솔루션에는 웹 브라우저 엔진 (webkit 또는 gecko)이 포함되어야합니다. 누군가가 어떤 언어를 무료로, 모든 솔루션의 생각이 없거나 경우에 나는 것 ...

(... HTML5의 캔버스가도 인쇄되지 않습니다) 나는 wkHtmlToPdf을 시도 ...하지만 전혀 결과는 좋지 않다 많이 고맙습니다! 감사합니다.

+0

왜 여전히 닫혀 있습니까 ?? 모든 질문은 이것보다 더 많은 "토론, 주장, 투표 또는 토론의 확대"를 유발합니다. –

+1

wkhtml2pdf now can does render canvas ... wkhtmltopdf.org를 참조하십시오. wkhtml2pdf에 대한 엄지 손가락 ... 7000 + java 클래스 (대개 –

답변

0

서버 측에서 사용하는 언어는 무엇입니까?

페이지의 스크린 샷을 만든 다음 이미지를 pdf로 변환하면 최상의 결과를 얻을 수 있습니다. 브라우저에서 렌더링 한 페이지와 정확히 같은 페이지를 표시합니다.

browshot.com과 같은 일부 Screenshot-as-a-service 도구가 있습니다. APIsupported languages을 살펴보십시오.

또는 도구를 사용할 수 있습니다. node.js에 대해서는 github에 멋진 프로젝트가 존재합니다.

+0

)를 사용하는 대신 단 하나의 실행 파일 만 있으면됩니다. 답변을 주셔서 감사합니다. 서버 측에서 Java를 사용하고 있지만 다른 용도로 사용할 수 있습니다. 이 PDF 생성. 불행하게도 스크린 샷은 옵션이 아닙니다. 생성 된 PDF는 전문가 용 프린터의 실제 PDF 여야하기 때문입니다 (예 : 텍스트는 일부 픽셀이 아닌 텍스트 여야 함). – Olivier

+0

이미지를 PDF로 변환하는 것은 정말 나쁜 생각입니다. 모든 텍스트가 풀려서 멋지게 확대되지 않으며 복사/붙여 넣기 또는 검색이 불가능합니다. 또한 PDF 파일을 필요한 것보다 크게 만듭니다. wkHtmlToPdf 또는 phantomJs 또는 일반 브라우저의 인쇄 옵션을 사용하면 텍스트가 PDF로 텍스트로 이동하고 벡터 그래픽도 벡터로 이동하여 이러한 문제를 피할 수 있습니다. – rjmunro

1

HTML의 복잡성에 따라 iText 개발자가 iText를 사용하는 프로젝트 인 XmlWorker을 사용할 수 있습니다.

23

나는 PhantomJS를 사용하여 웹 페이지에서 png 이미지를 생성했으며 PDF도 생성 할 수 있으며 일반적으로 품질이 좋습니다. 이 속성은 화면 캡처라고하며 here이라고 설명합니다. 지원되는 형식은 PNG, JPEG, GIF 및 PDF입니다.

PDF로 변환하면 페이지의 텍스트가 텍스트로 유지됩니다.

몇 가지 다른 라이브러리 나 프로그램을 테스트 한 후 PhantomJS에게 가장 완벽한 솔루션을 발견했다. PhantomJS는 실제 레이아웃과 렌더링 엔진 인 WebKit을 사용합니다.

몇 가지 예가 https://github.com/ariya/phantomjs/wiki/Examples입니다. ,

생산 PDF 출력이 가능 예 :

rasterize.js rasterizes a web page to image or PDF 

PhantomJS QuicStart Guide는 말한다 : 섹션 렌더링/래스터에서 과정에 도움이 다음 스크립트가 언급 위키피디아 기사 :

phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf 

또는 프린터 준비 컨닝 페이퍼 만들 때 : 나는 몇 페이지의 PDF 생성을 테스트 페이지가 표준을 따른다면, 그것은 좋은 결과를

phantomjs rasterize.js http://www.nihilogic.dk/labs/webgl_cheat_sheet/WebGL_Cheat_Sheet.htm webgl.pdf 

합니다. 텍스트는 선택 가능하고 고품질로 인쇄 할 수 있지만 일부 페이지에서는 pdf의 레이아웃이 png와 매우 다릅니다.

$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.png 

$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.pdf 

Example of png and pdf generation using Phantomjs

가 나는 또한 http://lab.simurai.com/buttons/ 시험 : 다음 명령을 사용하여 생성 된 두 개의 스크린 샷입니다. pdf와 png는 매우 동일하며 아래는 pdf의 샘플입니다.이 샘플을 사용하여 5641 픽셀 폭으로 래스터 화 한 다음 그 영역을 잘라 냈습니다. 이전 PDF 예제에서와 같이 PDF에서 텍스트를 선택할 수 있으며 텍스트는 선명합니다 (안티 앨리어싱 없음).

내가 Centos5 소스에서 컴파일에 Qt는 라이브러리와 PhantomJS를 설치하려면 먼저 시도

,하지만 행운을 설치하기

CSS3Buttons

. 그리고 우분투 11.10에 그 과정이 고통이었다

나는 http://phantomjs.googlecode.com/files/phantomjs-1.7.0-linux-x86_64.tar.bz2을 다운로드

tar -xjvf phantomjs-1.7.0-linux-x86_64.tar.bz2 

를 사용하여 추출 그리고 시스템의 빈 디렉토리에 실행 phantomjs 복사 :

$ cp phantomjs-1.7.0-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs 

및 phantomjs 준비했다 달리기.

생성 된 PDF가 좋지 않으면 Webkit을 업데이트하려고 할 수 있지만 그 결과가 충분하다고 가정합니다. PhantomJS는 업데이트주기가 뛰어나므로 적절한 시간에 버그를 수정해야합니다.

PhantomJS FAQ에도 좋은 정보가 있습니다.