2009-04-12 47 views
177

Tôi đang cố gắng chuyển đổi dữ liệu XML thành tệp PDF từ trang web và tôi hy vọng tôi có thể thực hiện điều này hoàn toàn trong JavaScript. Tôi cần để có thể vẽ văn bản, hình ảnh và hình dạng đơn giản. Tôi rất muốn có thể làm điều này hoàn toàn trong trình duyệt.Tạo tệp PDF bằng JavaScript

Trả lời

303

Tôi vừa mới viết một thư viện có tên là jsPDF tạo tệp PDF bằng Javascript một mình. Nó vẫn còn rất trẻ, và tôi sẽ sớm bổ sung thêm các tính năng và sửa lỗi. Cũng có một vài ý tưởng cho giải pháp trong các trình duyệt không hỗ trợ URI dữ liệu. Nó được cấp phép theo giấy phép MIT tự do.

Tôi đã xem qua câu hỏi này trước khi tôi bắt đầu viết nó và nghĩ rằng tôi muốn trở lại và cho bạn biết :)

Generate PDFs in Javascript

+7

Tôi đã từng truyền cảm hứng cho jsPDF chưa? Tôi đã học về jsPDF vào ngày bạn công bố nó. Nhìn tuyệt vời cho đến nay. Tôi đã kết thúc với Prawn vì nó dễ dàng là thư viện thế hệ PDF tốt nhất hiện có cho các yêu cầu của tôi. Tôi vẫn muốn làm tất cả công việc của mình trong trình duyệt vì tôi không tích cực, tôi sẽ đưa Ruby vào hệ thống mà tôi đang triển khai. Tôi đang xem jsPDF rất chặt chẽ. Tôi rất muốn giúp đỡ nhưng thời gian của tôi rất hạn chế. Điều đó có thể thay đổi trong tương lai. – amoeba

+2

Bạn đã truyền cảm hứng cho nó một chút :), tôi đã tìm kiếm trên internet để xem nó đã tồn tại chưa và thấy rằng một số người sẽ thấy nó hữu ích. Hãy cho tôi biết nếu bạn muốn giúp đỡ. Tôi là @MrRio trên twitter. –

+0

không có hình ảnh nhúng theo như tôi biết. –

-14

Thậm chí nếu bạn có thể tạo PDF trong bộ nhớ trong JavaScript, bạn vẫn sẽ gặp vấn đề về cách chuyển dữ liệu đó cho người dùng. Rất khó để JavaScript chỉ cần đẩy một tệp vào người dùng.

Để tải tệp này cho người dùng, bạn sẽ muốn gửi máy chủ để trình duyệt hiển thị hộp thoại lưu.

Với điều đó đã nói, thực sự không quá khó để tạo tệp PDF. Chỉ cần đọc spec.

+0

Không khó chút nào, ví dụ như có vẻ như nó hoạt động với URI dữ liệu http://en.wikipedia.org/wiki/Data_URI_scheme (Tôi đã thực hiện nó trước đây nhưng tôi không nhớ nếu tôi đã sử dụng dữ liệu- URI). –

+36

Bạn có thể dễ dàng tạo tệp trong JavaScript những ngày này. (Tôi đến từ tương lai) –

+3

Thực sự đơn giản hiện nay .. hãy kiểm tra ví dụ này: https://github.com/ChenWenBrian/FileSaver.js –

83

Một thư viện javascript đáng nói là pdfmake.

Sự hỗ trợ trình duyệt không xuất hiện để được mạnh mẽ như jsPDF, cũng không có vẻ như là một lựa chọn cho hình dạng, nhưng các tùy chọn để định dạng văn bản được nâng cao hơn sau đó các tùy chọn hiện có sẵn trong jsPDF.

+4

Câu trả lời này nên được upvoted nhiều hơn, pdfmake là mạnh hơn rất nhiều so với jspdf. Tuy nhiên chỉ là một lưu ý phụ, nó là wrapper xung quanh thư viện PDFKit. – vittore

+0

Awesome man :) Tuyệt vời: +1 –

+0

một lưu ý khác, jspdf không có hỗ trợ utf-8 và pdfmake chỉ hỗ trợ utf-8 cho phông chữ mặc định. – Leo

38

Tôi duy trì PDFKit, cũng hỗ trợ pdfmake (đã được đề cập ở đây). Nó hoạt động trong cả Node lẫn trình duyệt và hỗ trợ một loạt nội dung mà các thư viện khác không thực hiện:

  • Nhúng phông chữ phụ, hỗ trợ cho unicode.
  • Rất nhiều nội dung bố cục văn bản nâng cao (cột, ngắt trang, ngắt dòng unicode đầy đủ, văn bản đa dạng cơ bản, v.v.).
  • Làm việc trên nhiều thứ phông chữ hơn cho kiểu chữ nâng cao (chữ ghép OpenType/AAT, thay thế ngữ cảnh, v.v.). Sắp có: xem chi nhánh phông chữ nếu bạn quan tâm.
  • Đồ họa khác: gradient, v.v.
  • Được xây dựng với các công cụ hiện đại như trình duyệt và luồng. Có thể sử dụng cả trong trình duyệt và nút.

Khám phá http://pdfkit.org/ để biết hướng dẫn đầy đủ để biết chính mình những gì PDFKit có thể làm. Và ví dụ về các loại tài liệu có thể được tạo ra, hãy xem tài liệu dưới dạng PDF generated từ một số tệp Markdown bằng chính PDFKit: http://pdfkit.org/docs/guide.pdf.

Bạn cũng có thể dùng thử tương tác trong trình duyệt tại đây: http://pdfkit.org/demo/browser.html.

+0

Đây có phải là thư viện phía máy chủ không? Tôi nghĩ rằng các cuộc thảo luận là ở phía khách hàng thư viện js. – Ayush

+6

PDFKit hoạt động ở cả Nút và trình duyệt như được đề cập trong câu trả lời. Xem liên kết đến bản trình diễn trình duyệt. – devongovett

+0

Điều này có nén hình ảnh không? Tôi đang làm việc trên một ứng dụng web có chức năng tương tự như camscanner và tôi đang tìm kiếm tạo PDF thông qua javascript để tận dụng định dạng nén và nhiều trang. –

2

Bạn có thể sử dụng dịch vụ miễn phí này bằng cách thêm một liên kết mà tạo pdf từ bất kỳ url (ví dụ http://www.phys.org):

http://freehtmltopdf.com/?convert=http%3A%2F%2Fwww.phys.org&size=US_Letter&orientation=portrait&framesize=800&language=en

+0

Cập nhật: Khi tôi đi kiểm tra dịch vụ http://freehtmltopdf.com này, dịch vụ này không còn khả dụng nữa. Nghe có vẻ như nó là tuyệt vời mặc dù! –

+0

đã chọn bây giờ - hoạt động. và nó là tuyệt vời, tôi sử dụng một dịch vụ mà tôi trả tiền cho mỗi pdf, và cần phải mã, đây là một giải quyết vấn đề như vậy. –

7

Một dự án thú vị là texlive.js.

Nó cho phép bạn biên dịch (La) TeX sang PDF trong trình duyệt.

+0

Ví dụ thế giới hello hiển thị độc đáo nhưng mất khoảng 30 giây để hoàn thành. –

Các vấn đề liên quan