Tạo tài liệu PDF hấp dẫn chỉ bằng một số lệnh đơn giản với sức mạnh của PDFKit.
PDFKit là một thư viện Node.js, giúp lập trình viên dễ dàng tạo và làm việc với các file PDF. Nó cung cấp một API đơn giản nhưng hiệu quả để sản xuất PDF và thêm các kiểu nội dung khác nhau, chẳng hạn như text, ảnh và hình dạng.
Dưới đây là cách dùng PDF Kit để tạo PDF trong Node.js.
Thiết lập PDFKit
Bạn phải có Node.js và npm (trình quản lý gói Node.js) được cài trên máy.
Đảm bảo bạn đã cài những công cụ này bằng cách chạy các lệnh terminal sau:
node -v
npm -v
Để bắt đầu dùng PDFKit trong dự án Node.js, cài nó bằng cách chạy lệnh npm sau:
npm install pdfkit
Lệnh này sẽ cài đặt PDFKit và thêm nó vào các phần phụ thuộc của dự án.
Tạo tài liệu PDF với PDFKit
Để tạo tài liệu PDF bằng PDFKit, cần gói pdfkit và mô đun fs (file sy) trong tệp script:
const PDFDocument = require('pdfkit');
const fs = require('fs');
Tiếp theo, tạo một phiên bản mới của class PDFDocument. Class này đại diện cho một file PDF:
const doc = new PDFDocument();
Phiên bản đã tạo này là một stream có thể đọc được. Điều đó có nghĩa bạn có thể dùng phương thức pipe() để lưu nội dung của nó vào một file.
Để làm việc này, hãy đưa phiên bản doc vào một stream có thể viết được tạo bởi fs.createWriteStream:
doc.pipe(fs.createWriteStream('MyPDFDoc.pdf'));
Phương thức createWriteStream lưu nội dung của file PDF vào một vị trí cụ thể trên hệ thống file cục bộ.
Khối code trên sẽ lưu tệp PDF kết quả vào thư mục làm việc hiện tại, kèm theo tên MyPDFDoc.pdf.
Điều quan trọng bạn cần ghi nhớ là kết thúc stream sau khi thêm nội dung vào PDF. Bạn có thể làm việc đó bằng lệnh sau:
doc.end();
Giờ chạy lệnh node node [script name] để tạo file PDF MyPDFDoc.pdf trong thư mục làm việc hiện tại.
Thêm text với PDFKit
Trước khi chuyển tài liệu để lưu nó, bạn có thể thực hiện các thay đổi khác nhau. PDFKit khiến việc thêm text vào tài liệu trở nên đơn giản và bao gồm nhiều lựa chọn tùy biến cách hiện đầu ra.
Để thêm text vào tài liệu, chỉ cần gọi text() và chuyển văn bản bạn muốn thêm dưới dạng đối số:
doc.text("Coding is Easy!")
Khi PDFKit thêm text vào tài liệu, nó sẽ theo dõi vị trí X và Y hiện tại của văn bản. Vì thế, bất cứ khi nào bạn gọi phương thức text này, PDFKit sẽ thêm một dòng mới bên dưới dòng trước đó.
Tuy nhiên, bằng cách cung cấp tọa độ X và Y cho phương thức text sau chính văn bản đó, bạn có thể thay đổi vị trí của nó:
doc.text('Coding is Easy!', 100, 100)
Để di chuyển lên hoặc xuống một dòng, gọi phương thức moveDown hoặc moveUp với số dòng text cần di chuyển:
doc.moveDown(3);
doc.moveUp();
Theo mặc định, gọi một trong hai phương thức mà không chuyển đối số sẽ khiến nó di chuyển chỉ một dòng.
PDFKit hỗ trợ từng font trong số 14 font chữ chuẩn được xác định bởi định dạng PDF. Dùng phương thức font() để xác định font chữ bạn yêu cầu. Chỉ cần chuyển trong tên font tương ứng dưới dạng một chuỗi:
doc.font('Times-Roman')
.text('Coding is Easy!');
Bạn cũng có thể thay đổi kích thước font và màu văn bản bằng phương thức fontSize() và fillColor().
Ví dụ:
// Code này thay đổi màu text sang đỏ và kích thước font là 8
doc.fillColor('red')
.fontSize(8)
.text('Coding is Easy!');
Thêm ảnh với PDFKit
Để chèn ảnh vào tài liệu PDF, chỉ cần chuyển đường dẫn của nó tới phương thức ảnh trên tài liệu:
doc.image('path/to/image.jpeg')
PDFKit cho phép bạn thêm ảnh ở định dạng JPEG hoặc PNG. Mặc định, PDFKit sẽ chèn ảnh ở kích thước gốc. Bạn có thể thay đổi kích thước ảnh bằng cách cung cấp đối tượng chứa các cặp key-value dưới dạng đối số cho image(). Bạn có thể căn chỉnh chiều rộng, cao, ngang và dọc.
Ví dụ:
// Chỉ xác định chiều rộng
doc.image('path/to/image.jpg', { width: 300 });
// Xác định cả chiều rộng và cao
doc.image('path/to/image.jpg', { width: 300, height:200 })
Thêm trang bằng PDFKit
Để thêm trang mới cho tài liệu PDF, chỉ cần gọi phương thức addPage trên tài liệu:
doc.addPage()
Để tự động thêm nội dung mỗi lần bạn thêm trang mới, dùng sự kiện pageAdded trên phiên bản tài liệu.
Ví dụ:
doc.on('pageAdded', () => doc.text("Coding is Easy!"));
PDFKit cho phép bạn xác định kích thước trang khi tạo tài liệu mới hoặc thêm trang mới vào tài liệu hiện có. Để dùng bất kỳ khổ trang đã được xác định trước, chuyển một đối tượng sang PDFDocument hoặc addPage(). Dùng thuộc tính kích thước để xác định một chuỗi tên của kích thước trang. Ví dụ:
// Hàm khởi tạo
const doc = new PDFDocument({ size: 'A5' });
// Hàm addPage
doc.addPage({ size: 'A7' });
Chuyển đối tượng lựa chọn này sang hàm tạo PDFDocument sẽ thiết lập kích thước trang cho toàn bộ tài liệu. Sau đó, bạn có thể ghi đè mặc định này bằng cách chuyển một giá trị khác cho phương thức addPage.
Bạn có thể đặt lề bằng cách chuyển một đối tượng sang thuộc tính margins khi thêm trang.
Thuộc tính margins lấy một đối tượng với các thuộc tính top, bottom, left và right đại diện cho từng lề.
Ví dụ:
// Thêm lề khác nhau cho từng bên
doc.addPage({
margins: {
top: 72,
bottom: 72,
left: 50,
right: 50
}
});
Code này thiết lập lề ở trên và dưới là 72. Lề trái và phải là 50. Lưu ý rằng lề mặc định cho tài liệu được tạo bằng PDFKit là 1 inch (72) trên tất cả các mặt.
Code này đặt lề 72, lề trái và phải là 50. Lưu ý rằng lề mặc định cho tài liệu được tạo bởi PDFKit là 1 inch (72) cho tất cả các mặt.
Để thiết lập tất cả lề trên, dưới, trái và phải sang cùng một giá trị, chỉ cần chuyển một đối tượng kèm thuộc tính margin sang phương thức addPage:
doc.addPage({ margin: 60 }) // Thêm lề 60 cho từng bên
PDFKit cho phép bạn sản xuất tài liệu chuẩn từ các ứng dụng Node.js. Với PDFKit, bạn có thể xử lý tài liệu phức tạp dễ dàng.