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.
11 trang |
Chia sẻ: lylyngoc | Lượt xem: 1770 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Tạo động các tài liệu PDF từ ứng dụng Java, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Tạ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ừ (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.
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 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
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 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.
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 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.
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
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
PdfPTable 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);
Chú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);
Khô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.
Hì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.
Hì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.
Hình 5. Ảnh chụp màn hình của tài liệu PDF