Tạo động các tài liệu PDF từ ứng dụng Java
Nhiều ứng dụng yêu cầu to động các tài liệu PDF. Các ứng dụng như vậy trải rộng từ việc các
ngân hàng to các báo cáo kháchng để gửi qua email đến các độc giả mua các chương của
cuốn sách cụ thể và nhận chúng dưới định dạng PDF. Danh sách này là vô tận. Trong bài này,
chúng tôi sẽ sử dụng thư viện Java iText để tạo ra các tài liệu PDF. Chúng tôi sẽ đưa bạn qua
một ứng dụng ví dụ mẫu để bạn có thể tự mình thực hiện nó và hiu nó tốt hơn.
Làm quen với phiên bản 5.3.0 của iText
iText là mt thư viện Java có sẵn miễn phí từ http://itextpdf.com/ (xem phần Tài nguyên). T
viện iText mạnh mẽ và hỗ trợ việc tạo các tài liệu HTML, RTF và XML, ngoài việc tạo các tệp
PDF. Bạn có thể chọn một loạt các phông chữ để sử dụng trong tài liệu. Ngoài ra, cấu trúc của
iText cho phép bạn to ra bất kỳ các kiểu tài liệu nào đã nói ở trên bằng mã tương tự.
Thư viện iText chứa các lớp để tạo ra văn bn PDF theo các phông chữ khác nhau, tạo ra các
bảng trong tài liệu PDF, thêm các nh mvào các trang và v.v. Còn có nhiều tính năng hơn nữa
sẵn trong iText. Không thể trìnhy tất cả chúng chỉ trong một bài viết. Chúng tôi sẽ trình
bày các vấn đề cơ bản cần thiết để tạo PDF. Để biết thêm thông tin chi tiết, hãy tham khảo tài
liệu hướng dẫn về iText từ nhà cung cấp (xem phần Tài nguyên).
Chúng tôi sẽ sử dụng Eclipse để phát triển ứng dụng dụ mẫu của mình. Là mt IDE nguồn mở,
Eclipse hoàn toàn miễn phí và khá mạnh. Bạn có thể ti về Eclipse ngay bây giờ (xem phần Tài
nguyên).
IText API: Xem xét k hơn
Lớp com.itextpdf.text.Document là lớp cnh để tạo tài liệu PDF. Đây là lớp đầu tiên được khởi
chy. Một khi đã to ra tài liệu, bn cần mt trình viết để viết vào lớp đó.
Com.itextpdf.text.pdf.PdfWriter là một trình viết PDF. Một s các lớp thường dùng ph biến
khác được cho dưới đây:
com.itextpdf.text.Paragraph—Lớp này đại diện cho một đoạn thụt vào.
com.itextpdf.text.Chapter—Lớp này đại din cho mt chương trong tài liệu PDF.
được to ra bằng cách sử dụng một Paragraph (đoạn) làm tiêu đề và mt int làm s
chương.
com.itextpdf.text.Font—Lớp này chứa tt cả các đặc t của mt phông chữ, chẳng hạn
như họ các phông chữ, kích thước, kiểu dáng và màu sắc. Các phông chữ khác nhau được
khai báo như các hằng số tĩnh trong lớp này.
com.itextpdf.text.List—Lớp này đại diện cho một danh sách, rồi danh sách này lại chứa
một số ListItems (các mục danh sách).
com.itextpdf.text.pdf.PDFPTableĐây là một bảng có thể được đặt ở một v t tuyệt
đối, nhưng cũng có thể được thêm vào tài liệu làm lp Table (bảng).
com.itextpdf.text.Anchor—Neo (Anchor) có thể là một tài liệu tham khảo hoặc một
đích đến của một tài liệu tham khảo.
Tải về và cấu hình iText trong Eclipse
Là một thư viện Java thuần túy, iText tồn tại dưới dạng mt tệp JAR (xem phần i nguyên).
Một khi bn đã tải về thư viện này (chẳng hn, tại đường dẫn C:\temp), các bước sau đây sẽ cấu
hình thư viện iText trong một môi trường Eclipse:
1. Tạo một dự án Java mới trong Eclipse có tên là iText.
2. Nhấn chuột phi vào dự án iText trong khung nhìn Package Explorer và chn Properties.
3. Nhấn Java Build Path. Trên tab Libraries, nhấn Add External JARs.
4. Duyệt đến thư mục C:\ temp và chn tệp iText-5.3.0.jar trong thư mục này.
5. Nhấn OK.
Bây gi iText được cấu hình và Eclipse đã sn sàng tạo các ứng dụng Java để to động các tài
liệu PDF.
Về đầu trang
Ứng dụng dụ mẫu
điều gì tốt hơn khi chính bạn bắt tay vào xây dựng ứng dụng mẫu phải không? Bây giờ bạn
các công c(Eclipse IDE) các thư viện (thư vin iText) cần thiết, chúng ta đã sẵn sàng
thiết kế và phát triển một chương trình chy dụ mẫu.
Hãy tạo ra một tài liệu PDF đơn giản có chứa mt số phần tử cơ bản như văn bản thuần, văn bản
màu có phông chữ không theo mặc định, bảng, danh sách, chương, phần, v.v. Mục đích của ứng
dụng này là để cho bạn quen với cách sử dụng thư vin iText. Có rt nhiều lớp để thực hiện
nhiều công việc cho bạn liên quan đến việc tạo tài liệu PDF. Không thể trình bày tất cả các lớp
đó ở đây. Javadocs của iText là mt nguồn thông tin tốt về cách sử dụng các lp đó. Hãy bt đầu
viết mã.
Bước đầu tiên là to một tài liệu. Một tài liu là thùng chứa cho tt cả các phn tử của một tài
liệu PDF.
Liệt kê 1. Tạo đối tượng tài liệu
Document document = new Document(PageSize.A4, 50, 50, 50, 50);
Đối số đầu tiên là kích thước trang (page size). Đối số tiếp theo tương ứng là các l trái, phi,
đầu trang và cui trang. Kiểu tài liệu này chưa được định nghĩa. Nó phụ thuộc vào kiểu của trình
writer mà bạn to. Trong ví dmẫu của mình, chúng tôi chọn trình writer là
com.itextpdf.text.pdf.PdfWriter. Những trình writer khác là HtmlWriter, RtfWriter, XmlWriter
nhiều trình viết khác nữa. Tên của chúng đã tự giải thích các mục đích của chúng rồi.
Liệt kê 2. Tạo đối ợng PdfWriter
PdfWriter writer = PdfWriter.getInstance(document, \
new FileOutputStream("C:\\ITextTest.pdf"));
document.open();
Đối số đầu tiên là tài liệu tham chiếu đến đối tượng tài liệu và đối số thứ hai chỉ là tên đúng của
tệp sẽ viết kết quả đầu ra vào. Tiếp theo, chúng tôi mở tài liệu để viết.
Bây gi, chúng tôi sẽ thêm một đoạn văn bản vào trang đầu tiên của tài liệu. Bất kỳ văn bn nào
đều được thêm vào với sự trợ giúp của lớp com.itextpdf.text.Paragraph. Bạn có thể to một đoạn
mặc định trong văn bản của mình và các thiết lập mặc định về các phông chữ, màu sắc, kích
thước và v.v. Nếu không, bạn có thể cung cấp phông chữ riêng của mình. Trong bàiy, chúng
i cũng sẽ thảo luận về anchor (neo liên kết) đến tài liu PDF. Trong tài liệu PDF này, chúng tôi
đã sử dụng backToTop làm liên kết. Khi bạn nhấn chuột vào liên kết backToTop, nó sẽ đưa bạn
đến trang đầu tiên của tài liệu. Bạn cần thiết lập văn bản như là đích neo đến trang đầu tiên.
Chúng ta hãy xem cách thiết lập đích neo và thiết lập phông chữ cho đoạn văn bản đã thêm o.
Liệt kê 3. Tạo đối tượng đoạn văn bản
Anchor anchorTarget = new Anchor("First page of the document.");
anchorTarget.setName("BackToTop");
Paragraph paragraph1 = new Paragraph();
paragraph1.setSpacingBefore(50);
paragraph1.add(anchorTarget);
document.add(paragraph1);
document.add(new Paragraph("Some more text on the \
first page with different color and font type.",
FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD, new
CMYKColor(0,
255, 0, 0))));
Hình 1 cho thấy kết quả đầu ra của mã dmẫu trong Liệt kê 3. Để đóng tài liệu lại, hãy thêm
document.close(); vào cui đoạn mã trong Liệt kê 3.
Hình 1. Kết quả đầu ra của mã ví dụ mẫu trong Liệt kê 3
Bạn chỉ cần xemch thêm văn bản thuần vào tài liệu PDF. Tiếp theo, chúng ta cần thêm một số
phần tử phức tạp vào tài liệu này. Hãy bắt đầu bằng việc to một chương mới. Chương (chapter)
là mt phần đặc biệt, bắt đầu bằng một trang mới và có một con số được hiển thị theo mặc định.
Liệt kê 4. Tạo đối tượng chapter
Paragraph title1 = new Paragraph("Chapter 1",
FontFactory.getFont(FontFactory.HELVETICA,
18, Font.BOLDITALIC, new CMYKColor(0, 255, 255,17)));
Chapter chapter1 = new Chapter(title1, 1);
chapter1.setNumberDepth(0);
Trong đoạn mã của Liệt kê 4, chúng ta đã tạo ra một đối tượng chapter mới là chapter1, có tiêu
đề "This is Chapter 1" (Đây là Chương 1). Việc thiết lập số độ sâu là 0 sẽ không hiển thị số
chương trên trang.
Một section (phần) là một phần tử con của một chương. Trong đoạn mã của Liệt kê 5, chúng ta
to ra một section có tiêu đề "This is Section 1 in Chapter 1" (Đây là Phn 1 trong Chương 1).
Để thêm một số văn bản vào phn này, chúng ta to một đối tượng paragraph (đoạn) khác là
someSectionText và thêmvào đối tượng section.
Liệt kê 5. Tạo đối tượng section
Paragraph title11 = new Paragraph("This is Section 1 in Chapter 1",
FontFactory.getFont(FontFactory.HELVETICA, 16, Font.BOLD,
new CMYKColor(0, 255, 255,17)));
Section section1 = chapter1.addSection(title11);
Paragraph someSectionText = new Paragraph("This
text comes as part of section 1 of chapter 1.");
section1.add(someSectionText);
someSectionText = new Paragraph("Following is a 3 X 2 table.");
section1.add(someSectionText);
Trước khi chúng ta thêm bng, chúng ta hãy xem xét xem tài liu sẽ trông như thế nào. Thêm hai
dòng sau đây để đóng tài liệu trong Hình 2. Sau đó biên dịch và chạy chương trình để tạo ra tài
liệu PDF: document.add(chapter1);document.close();.
Hình 2. Kết quả đầu ra ví dụ mẫu của chương
Tiếp theo, chúng ta to một đi tượng table (bng). Một bảng chứa một ma trận các hàng và các
cột. Một ô (cell) trong một hàng có thể mở rộng nhiều hơn một cột. Tương tự như vậy, mt ô
trong một cột có thể mở rộng nhiều hơn một hàng.
Liệt kê 6. Tạo đối tượng table