2012-10-02 18 views
15

Tôi đang tìm giải pháp tạo PDF từ tài liệu HTML5/CSS3, serverside.HTML5 đến PDF serverside

Tôi biết có rất nhiều giải pháp để tạo PDF (như FOP, iText ...), nhưng tôi cần đảm bảo rằng nó sẽ trông giống 100% so với trang HTML. Vì vậy, tôi không muốn tạo một phần tử PDF bằng phần tử như FOP hoặc iText.

Thực ra, có điều gì đó tồn tại vì đó là những gì bạn làm khi bạn in dưới dạng PDF từ Trình duyệt của mình. Lý tưởng nhất, giải pháp nên nhúng một công cụ trình duyệt web (webkit hoặc gecko). Tôi đã thử wkHtmlToPdf ... nhưng kết quả không tốt chút nào (canvas HTML5 thậm chí không được in ...)

Nếu ai đó có ý tưởng về bất kỳ giải pháp, miễn phí hay không, bất kỳ ngôn ngữ nào ... Tôi sẽ đánh giá cao A LOT! Cảm ơn !!

+0

Tại sao điều này vẫn đóng? Mọi câu hỏi đều gây ra nhiều "tranh luận, tranh cãi, bỏ phiếu hoặc thảo luận mở rộng" hơn thế này. –

+1

wkhtml2pdf now * does * render canvas ... xem wkhtmltopdf.org. Thumbs up cho wkhtml2pdf ... nó là đồng bằng tuyệt vời để có chỉ là một thực thi thay vì đối phó với 7000 + java lớp học của fop –

Trả lời

0

Ngôn ngữ nào bạn đang sử dụng phía máy chủ?

Tạo ảnh chụp màn hình của trang và sau đó chuyển đổi hình ảnh sang pdf có thể sẽ mang đến cho bạn kết quả tốt nhất. Nó sẽ hiển thị trang chính xác giống như nó sẽ được hiển thị bởi một trình duyệt.

Có một số công cụ Ảnh chụp màn hình dưới dạng dịch vụ trên mạng, như browshot.com. Hãy xem APIsupported languages.

Hoặc bạn có thể sử dụng công cụ của mình. Đối với node.js tồn tại một dự án tốt đẹp trên github.

+0

Cảm ơn câu trả lời của bạn.Tôi đang sử dụng Java ở phía máy chủ, nhưng tôi mở để sử dụng cái gì khác cho thế hệ PDF này. Thật không may, ảnh chụp màn hình không phải là một lựa chọn, bởi vì pdf được tạo ra phải là một PDF thực cho một máy in chuyên nghiệp (ví dụ, văn bản phải là văn bản, không phải một số pixel). – Olivier

+0

Việc chuyển đổi hình ảnh sang PDF thực sự là một ý tưởng tồi - bạn sẽ mất tất cả văn bản, vì vậy nó sẽ không thu phóng độc đáo và sẽ không được sao chép/có thể quét hoặc tìm kiếm được. Nó cũng sẽ làm cho tập tin PDF lớn hơn nó cần phải được. Nếu bạn sử dụng wkHtmlToPdf hoặc phantomJs hoặc tùy chọn in của trình duyệt bình thường, văn bản sẽ đi vào PDF dưới dạng văn bản và bất kỳ đồ họa vector nào cũng sẽ xuất hiện dưới dạng vectơ, tránh những sự cố này. – rjmunro

1

Tùy thuộc vào độ phức tạp của HTML của bạn, bạn có thể sử dụng XmlWorker, là dự án của nhà phát triển iText và sử dụng iText.

23

Tôi đã sử dụng PhantomJS để tạo hình ảnh png từ các trang web và nó có thể tạo PDF cũng như chất lượng thường tốt. Thuộc tính này được gọi là chụp màn hình và được mô tả here. Các định dạng được hỗ trợ là PNG, JPEG, GIF và PDF.

Khi được chuyển đổi sang PDF, văn bản của các trang được giữ lại dưới dạng văn bản.

Sau khi thử nghiệm vài thư viện hoặc chương trình khác, tìm thấy PhantomJS giải pháp hoàn hảo nhất. PhantomJS sử dụng WebKit, một công cụ dựng hình và dựng hình thực sự.

Một vài ví dụ ở số https://github.com/ariya/phantomjs/wiki/Examples. Trong phần Rendering/rasterization có được nhắc đến kịch bản sau đây giúp bạn trong quá trình này:

rasterize.js rasterizes a web page to image or PDF 

PhantomJS QuicStart Guide nói:

Sản xuất ra PDF là có thể, ví dụ từ một bài viết trên Wikipedia:

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

hoặc khi tạo máy in sẵn sàng cheat sheet:

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

Tôi đã thử nghiệm pdf thế hệ của vài trang và nếu trang sau tiêu chuẩn, nó tạo ra kết quả tốt. Văn bản có thể chọn và có thể in được với chất lượng cao, nhưng trên một số trang bố cục bằng pdf không giống như trong png.Dưới đây là hai ảnh chụp màn hình được tạo ra bằng lệnh:

$ 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

Tôi cũng http://lab.simurai.com/buttons/ thử nghiệm. Pdf và png rất giống nhau và dưới đây là một mẫu pdf mà tôi rasterized đến 5641px rộng và cắt một khu vực của nó. Như trong ví dụ PDF trước, văn bản có thể chọn trong PDF và như bạn thấy, văn bản sắc nét (không có antialias!).

CSS3Buttons

CÀI ĐẶT

tôi đã cố gắng đầu tiên để cài đặt Qt thư viện và PhantomJS trên Centos5 biên dịch từ mã nguồn, nhưng không may mắn. Sau đó trên Ubuntu 11.10 và quá trình này là không đau:

tôi tải http://phantomjs.googlecode.com/files/phantomjs-1.7.0-linux-x86_64.tar.bz2 và trích xuất nó bằng cách sử

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

Và sau đó sao chép phantomjs thực thi để bin dir của hệ thống:

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

và phantomjs đã sẵn sàng chạy.

Nếu PDF được tạo không tốt, bạn có thể thử cập nhật Webkit, nhưng tôi cho rằng kết quả là đủ. PhantomJS có chu kỳ cập nhật tuyệt vời, vì vậy các lỗi nên được sửa trong thời gian hợp lý.

PhantomJS FAQ cũng có thông tin tốt về khả năng.