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.. Thư viện iText chứa các lớp để tạo ra văn bản PDF theo các phông chữ khác nhau, tạo ra các bảng trong
Trang 1Tạo động các tài liệu PDF từ ứng dụng Java
Nhiều ứng dụng yêu cầu tạo độ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 tạo các báo cáo khách hàng để 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à hiểu nó tốt hơn
Làm quen với phiên bản 5.3.0 của iText
iText là một thư viện Java có sẵn miễn phí từ http://itextpdf.com/ (xem phần Tài nguyên) Thư 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 tạo 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 bản 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 hình mờ vào các trang và v.v Còn có nhiều tính năng hơn nữa
có sẵn trong iText Không thể trình bày 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 ví dụ mẫu của mình Là một IDE nguồn mở, Eclipse hoàn toàn miễn phí và khá mạnh Bạn có thể tải 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 chính để tạo tài liệu PDF Đây là lớp đầu tiên được khởi chạy Một khi đã tạo ra tài liệu, bạn cần có một 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 diện cho một chương trong tài liệu PDF Nó
được tạo ra bằng cách sử dụng một Paragraph (đoạn) làm tiêu đề và một int làm số chương
com.itextpdf.text.Font—Lớp này chứa tất cả các đặc tả của một 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ị trí tuyệt
đối, nhưng cũng có thể được thêm vào tài liệu làm lớp 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
Trang 2Tả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 một tệp JAR (xem phần Tài nguyên) Một khi bạn đã tải về thư viện này (chẳng hạn, 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 phải vào dự án iText trong khung nhìn Package Explorer và chọn 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à chọn 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 đã sẵn sàng tạo các ứng dụng Java để tạo động các tài liệu PDF
Về đầu trang
Ứng dụng ví dụ mẫu
Có đ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 công cụ (Eclipse IDE) và các thư viện (thư viện 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 chạy ví dụ mẫu
Hãy tạo ra một tài liệu PDF đơn giản có chứa một 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ư viện iText Có rất 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à một nguồn thông tin tốt về cách sử dụng các lớp đó Hãy bắt đầu viết mã
Bước đầu tiên là tạo một tài liệu Một tài liệu là thùng chứa cho tất cả các phần 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, phải, đầu trang và cuối 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 tạo Trong ví dụ mẫ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
và 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 tượng PdfWriter
Trang 3PdfWriter 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 bản 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ể tạo 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ài này, chúng tôi cũng sẽ thảo luận về anchor (neo liên kết) đến tài liệu 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 và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ã ví dụ mẫu trong Liệt kê 3 Để đóng tài liệu lại, hãy thêm
document.close(); vào cuối đoạn mã trong Liệt kê 3
Trang 4Hình 1 Kết quả đầu ra của mã ví dụ mẫu trong Liệt kê 3
Bạn chỉ cần xem cách 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 tạo một chương mới Chương (chapter)
là một 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
Trang 5Mộ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 tạo ra một section có tiêu đề "This is Section 1 in Chapter 1" (Đây là Phần 1 trong Chương 1)
Để thêm một số văn bản vào phần này, chúng ta tạo một đối tượng paragraph (đoạn) khác là
someSectionText và thêm nó và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 bảng, chúng ta hãy xem xét xem tài liệu 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 tạo một đối tượng table (bảng) 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, một ô 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
Trang 6PdfPTable t = new PdfPTable(3);
t.setSpacingBefore(25);
t.setSpacingAfter(25);
PdfPCell c1 = new PdfPCell(new Phrase("Header1"));
t.addCell(c1);
PdfPCell c2 = new PdfPCell(new Phrase("Header2"));
t.addCell(c2);
PdfPCell c3 = new PdfPCell(new Phrase("Header3"));
t.addCell(c3);
t.addCell("1.1");
t.addCell("1.2");
t.addCell("1.3");
section1.add(t);
Trong đoạn mã của Liệt kê 6, chúng ta tạo ra một đối tượng bảng PDFPTable là t có ba cột và tiếp tục thêm các hàng Tiếp theo, chúng ta tạo ra ba đối tượng PDFPcell, có văn bản khác nhau Chúng ta tiếp tục thêm chúng vào bảng Chúng được thêm vào hàng đầu tiên, bắt đầu từ cột đầu tiên, di chuyển sang cột tiếp theo trong cùng hàng Sau khi hoàn thành một hàng, các ô tiếp theo được thêm vào cột đầu tiên của hàng kế tiếp Cũng có thể thêm một ô vào bảng bằng cách chỉ cung cấp văn bản của ô đó, chẳng hạn như t.addCell("1.1"); Cuối cùng, đối tượng table (bảng) được thêm vào đối tượng section (phần)
Sau cùng, chúng ta hãy xem cách thêm một danh sách vào tài liệu PDF Một danh sách có chứa một số các ListItem Một danh sách có thể được đánh số hoặc không được đánh số Việc
chuyển đối số đầu tiên thành true (đúng) có nghĩa là bạn muốn tạo danh sách có đánh số
Liệt kê 7 Tạo đối tượng list (danh sách)
List l = new List(true, false, 10);
l.add(new ListItem("First item of list"));
l.add(new ListItem("Second item of list"));
section1.add(l);
Trang 7Chúng ta đã thêm mọi thứ vào đối tượng chapter1 Bây giờ chúng ta thêm một hình ảnh vào dự
án java này Chúng ta có thể mở rộng quy mô hình ảnh bằng cách sử dụng một trong những phương thức Image (Hình ảnh) sau:
scaleAbsolute()
scaleAbsoluteWidth()
scaleAbsoluteHeight()
scalePercentage()
scaleToFit()
Trong Liệt kê 8, chúng ta đã sử dụng phương thức scaleAbsolute Và sau đó thêm đối tượng image vào section này
Liệt kê 8 Thêm Image vào tài liệu chính
Image image2 = Image.getInstance("IBMLogo.bmp");
image2.scaleAbsolute(120f, 120f);
section1.add(image2);
Lớp com.itextpdf.text.Anchor trong iText đại diện cho một liên kết hoặc tới một trang web bên ngoài hoặc bên trong trong tài liệu Có thể nhấn chuột vào anchor (neo liên kết) giống như một liên kết trong một trang web Để thêm anchor chúng ta cần tạo ra một anchor mới và thiết lập tài liệu tham chiếu đến Anchor đích đã tạo ra trong Liệt kê 3 Sau đó thêm anchor này vào phần và thêm phần này vào tài liệu
Liệt kê 9 Thêm Anchor vào tài liệu chính
Paragraph title2 = new Paragraph("Using Anchor",
FontFactory.getFont(FontFactory.HELVETICA, 16, Font.BOLD,
new CMYKColor(0, 255, 0, 0)));
section1.add(title2);
title2.setSpacingBefore(5000);
Anchor anchor2 = new Anchor("Back To Top");
anchor2.setReference("#BackToTop");
section1.add(anchor2);
Trang 8Không còn các phần tử nào để thêm vào chapter1 nữa, đây là lúc để thêm chapter1 vào
document (tài liệu) chính Chúng ta cũng sẽ đóng đối tượng tài liệu ở đây khi chúng ta đã thực hiện xong ứng dụng ví dụ mẫu
Liệt kê 10 Thêm một chương vào tài liệu chính
document.add(chapter1);
document.close();
Về đầu trang
Chạy ứng dụng ví dụ mẫu
1 Tải ứng dụng ví dụ mẫu, tệp j-itextsample.jar (xem phần Tải về)
2 Giải nén tệp j-itextsample.jar vào một thư mục Ví dụ, nếu bạn giải nén nó vào C:\temp, thì bạn sẽ đặt các tệp nguồn và lớp vào C:\temp\com\itext\test
3 Mở một dấu nhắc lệnh và thay đổi thư mục này thành C:\temp
4 Thiết lập đường dẫn lớp của hệ thống của bạn theo dấu nhắc lệnh này Hãy đưa
C:\temp\itext-5.3.0.jar vào đường dẫn lớp của hệ thống Trên Windows®, chạy lệnh set classpath=C:\temp\itext-5.3.0.jar;%classpath%
5 Chạy ứng dụng bằng lệnh java com.itext.test.ITextTest
Chương trình sẽ tạo ra tài liệu ITextTest.pdf tại C:\ Hình 3 cho thấy một ảnh chụp màn hình của trang đầu tiên của tài liệu PDF
Trang 9Hình 3 Ảnh chụp màn hình của tài liệu PDF
Hình 4 cho thấy một ảnh chụp màn hình của Chương 1 (Chapter 1) và phần, văn bản, bảng, danh sách và hình ảnh của nó trong tài liệu PDF
Trang 10Hình 4 Ảnh chụp màn hình của tài liệu PDF
Hình 5 cho thấy một ảnh chụp màn hình của liên kết Neo trong tài liệu PDF
Trang 11Hình 5 Ảnh chụp màn hình của tài liệu PDF