PDFKit là một thư viện tạo tài liệu PDF cho Node và trình duyệt giúp tạo các tài liệu phức tạp, nhiều trang, có thể in được dễ dàng. API bao gồm khả năng kết nối và bao gồm cả chức năng cấp thấp cũng như trừu tượng cho chức năng cấp cao hơn. API PDFKit được thiết kế đơn giản, vì vậy việc tạo các tài liệu phức tạp thường đơn giản bằng một vài lệnh gọi hàm
Kiểm tra một số tài liệu và ví dụ để xem cho chính mình. Bạn cũng có thể đọc hướng dẫn dưới dạng PDF tự tạo với đầu ra mẫu được hiển thị nội tuyến. Nếu bạn muốn xem nó được tạo như thế nào, hãy xem README trong thư mục tài liệu
Bạn cũng có thể dùng thử bản demo tương tác trong trình duyệt của PDFKit tại đây
Cài đặt
Cài đặt sử dụng trình quản lý gói npm. Chỉ cần gõ lệnh sau sau khi cài đặt npm
npm install pdfkit
Đặc trưng
- Đồ họa vector
- API giống như canvas HTML5
- hoạt động đường dẫn
- Trình phân tích đường dẫn SVG để tạo đường dẫn dễ dàng
- phép biến hình
- Độ dốc tuyến tính và xuyên tâm
- Chữ
- gói hàng
- căn chỉnh văn bản
- danh sách gạch đầu dòng
- Nhúng phông chữ
- Hỗ trợ TrueType [. ttf], OpenType [. otf], Bộ sưu tập WOFF, WOFF2, TrueType [. ttc] và Datafork TrueType [. dfont] phông chữ
- Tập hợp phông chữ
- Xem bộ phông chữ để biết thêm chi tiết về hỗ trợ bố cục glyph nâng cao
- nhúng hình ảnh
- Hỗ trợ các tệp JPEG và PNG [bao gồm cả PNG được lập chỉ mục và PNG có độ trong suốt]
- Chú thích
- liên kết
- ghi chú
- Điểm nổi bật
- gạch chân
- vân vân
- AcroForms
- phác thảo
- bảo mật PDF
- mã hóa
- Đặc quyền truy cập [in, sao chép, sửa đổi, chú thích, điền biểu mẫu, truy cập nội dung, lắp ráp tài liệu]
- Hỗ trợ khả năng truy cập [nội dung được đánh dấu, cấu trúc logic, PDF được gắn thẻ, PDF/UA]
Sắp có
- Các mẫu lấp đầy
- API cấp cao hơn để tạo bảng và sắp xếp nội dung
- Nhiều tối ưu hóa hiệu suất hơn
- Tuyệt vời hơn nữa, có lẽ được viết bởi bạn. Vui lòng rẽ nhánh kho lưu trữ này và gửi cho tôi các yêu cầu kéo
Thí dụ
const PDFDocument = require['pdfkit']; const fs = require['fs']; // Create a document const doc = new PDFDocument[]; // Pipe its output somewhere, like to a file or HTTP response // See below for browser usage doc.pipe[fs.createWriteStream['output.pdf']]; // Embed a font, set the font size, and render some text doc .font['fonts/PalatinoBold.ttf'] .fontSize[25] .text['Some text with an embedded font!', 100, 100]; // Add an image, constrain it to a given size, and center it vertically and horizontally doc.image['path/to/image.png', { fit: [250, 300], align: 'center', valign: 'center' }]; // Add another page doc .addPage[] .fontSize[25] .text['Here is some vector graphics...', 100, 100]; // Draw a triangle doc .save[] .moveTo[100, 150] .lineTo[100, 250] .lineTo[200, 250] .fill['#FF3300']; // Apply some transforms and render an SVG path with the 'even-odd' fill rule doc .scale[0.6] .translate[470, -380] .path['M 250,75 L 323,301 131,161 369,161 177,301 z'] .fill['red', 'even-odd'] .restore[]; // Add some text with annotations doc .addPage[] .fillColor['blue'] .text['Here is a link!', 100, 100] .underline[100, 100, 160, 27, { color: '#0000FF' }] .link[100, 100, 160, 27, '//google.com/']; // Finalize PDF file doc.end[];
Đầu ra PDF từ ví dụ này [với một vài bổ sung] cho thấy sức mạnh của PDFKit — tạo ra các tài liệu phức tạp với một lượng mã rất nhỏ. Để biết thêm thông tin, hãy xem thư mục demo
và hướng dẫn lập trình PDFKit
Sử dụng trình duyệt
Có ba cách để sử dụng PDFKit trong trình duyệt
- Sử dụng Browserify. Xem mã nguồn demo và
- sử dụng webpack. Xem ví dụ hoàn chỉnh
- Sử dụng phiên bản dựng sẵn. Được phân phối dưới dạng tệp
pdfkit.standalone.js
trong bản phát hành hoặc trong thư mục góijs
Ngoài PDFKit, bạn sẽ cần một nơi nào đó để truyền đầu ra tới. HTML5 có đối tượng Blob có thể được sử dụng để lưu trữ dữ liệu nhị phân và nhận URL tới dữ liệu này để hiển thị đầu ra PDF bên trong khung nội tuyến hoặc tải lên máy chủ, v.v. Để lấy Blob từ đầu ra của PDFKit, bạn có thể sử dụng mô-đun blob-stream
Ví dụ sau sử dụng Browserify hoặc webpack để tải PDFKit
và blob-stream
. Xem here và here để biết ví dụ về cách sử dụng phiên bản dựng sẵn
// require dependencies const PDFDocument = require['pdfkit']; const blobStream = require['blob-stream']; // create a document the same way as above const doc = new PDFDocument[]; // pipe the document to a blob const stream = doc.pipe[blobStream[]]; // add your content to the document here, as usual // get a blob when you are done doc.end[]; stream.on['finish', function[] { // get a blob you can do whatever you like with const blob = stream.toBlob['application/pdf']; // or get a blob URL for display in the browser const url = stream.toBlobURL['application/pdf']; iframe.src = url; }];
Bạn có thể xem bản demo tương tác trong trình duyệt của PDFKit tại đây
Lưu ý rằng để Trình duyệt dự án bằng PDFKit, bạn cần cài đặt mô-đun brfs
với npm, được sử dụng để tải dữ liệu phông chữ tích hợp vào gói. Nó được liệt kê là devDependency
trong PDFKit's
const PDFDocument = require['pdfkit']; const fs = require['fs']; // Create a document const doc = new PDFDocument[]; // Pipe its output somewhere, like to a file or HTTP response // See below for browser usage doc.pipe[fs.createWriteStream['output.pdf']]; // Embed a font, set the font size, and render some text doc .font['fonts/PalatinoBold.ttf'] .fontSize[25] .text['Some text with an embedded font!', 100, 100]; // Add an image, constrain it to a given size, and center it vertically and horizontally doc.image['path/to/image.png', { fit: [250, 300], align: 'center', valign: 'center' }]; // Add another page doc .addPage[] .fontSize[25] .text['Here is some vector graphics...', 100, 100]; // Draw a triangle doc .save[] .moveTo[100, 150] .lineTo[100, 250] .lineTo[200, 250] .fill['#FF3300']; // Apply some transforms and render an SVG path with the 'even-odd' fill rule doc .scale[0.6] .translate[470, -380] .path['M 250,75 L 323,301 131,161 369,161 177,301 z'] .fill['red', 'even-odd'] .restore[]; // Add some text with annotations doc .addPage[] .fillColor['blue'] .text['Here is a link!', 100, 100] .underline[100, 100, 160, 27, { color: '#0000FF' }] .link[100, 100, 160, 27, '//google.com/']; // Finalize PDF file doc.end[];0, vì vậy nó không được cài đặt theo mặc định cho người dùng Node. Nếu bạn quên cài đặt, Browserify sẽ in thông báo lỗi