Tạo tài liệu PDF từ ứng dụng Java bằng thư viện iText
Nếu ứng dụng của bạn cần tạo tài liệu PDF, bạn cần có thư viện iText. Thư viện mã nguồn mở iText giúp cho việc tạo PDF trở nên dễ dàng. Bài này sẽ giới thiệu về iText và đưa ra hướng dẫn từng bước cơ bản cahs sử dụng nó để tạo ra các tài liệu PDF từ ứng dụng Java. Nhiều ứng dụng yêu cầu tạo động ...
Nếu ứng dụng của bạn cần tạo tài liệu PDF, bạn cần có thư viện iText. Thư viện mã nguồn mở iText giúp cho việc tạo PDF trở nên dễ dàng. Bài này sẽ giới thiệu về iText và đưa ra hướng dẫn từng bước cơ bản cahs sử dụng nó để tạo ra 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, ví dụ: Tạo báo cáo gửi khách hàng qua email, gửi báo giá, xuất hoá đơn ... dưới dạng PDF. Trong bài viết này, chúng tôi sẽ sử dụng thư viện iText để tạo các tài liệu PDF. Chúng tôi sẽ tạo ứng dụng mẫu để bạn có thể hiểu nó tốt hơn.
Làm quen với phiên bản 5.5.9 của iText
iText là một thư viện Java có sẵn và miễn phí từ http://itextpdf.com. Thư viện iText mạnh mã và hỗ trợ các tài liệu HTML, RTF và XML, ngoài việc tạo các tệp PDF. Ngoài ra, cấu trúc iText cho phép bạn tạo ra bất kỳ tài liệu nào nhưn đã nói ở trên cùng một code.
Thư viện iText chứa các class để tạo ra văn bản PDF theo các font 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 ... Còn nhiều tính năng hơn nữa có sẵn trong iText, không thể trình bày hết trong một bài viết. Chúng tôi sẽ trình bày các vấn đề cơ bản và cần thiết để tạo PDF. Để biết thông tin chi tiết, hay tham khảo tài liệu hướng dẫn về iText từ nhà cung cấp iText API
Giới thiệu IText API:
Class com.itextpdf.text.Document là class chính để tạo tài liệu PDF. Đây chính là class được tạo đầu tiên. Một khi tạo ra tài liệu, bạn cần dùng class com.itextpdf.text.pdf.PdfWriter để ghi vào file PDF. Sau đây là một số lớp thường dùng phổ biến khi tạo file pdf
- com.itextpdf.text.Paragraph : Class này để tạo 1 dòng có đoạn thụt vào
- com.itextpdf.text.Chapter: Dùng để tạo 1 chương trong tài liệu PDF
- com.itextpdf.text.Font: Dùng để thiết lập font chữ, kích thước, kiểu dáng và màu sắc
- com.itextpdf.text.List: Tạo 1 danh sách
- com.itextpdf.text.pdf.PDFPTable: Dùng để tạo bảng cho tài liệu PDF
- com.itextpdf.text.Anchor: Anchor tạo link đến một tài liệu tham khảo
Tiến hành tạo ví dụ mẫu tạo ra một tài liệu PDF đơn giản.
package asia.viblo; import java.io.FileNotFoundException; import java.io.FileOutputStream; import com.itextpdf.text.Anchor; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; public class VibloPdf { public static void main(String[] args) { // Tạo đối tượng tài liệu Document document = new Document(PageSize.A4, 50, 50, 50, 50); try { // Tạo đối tượng PdfWriter PdfWriter.getInstance(document, new FileOutputStream("C:viblo_asia.pdf")); // Mở file để thực hiện ghi document.open(); // Thêm nội dung sử dụng add function document.add(new Paragraph("Viblo Asia")); Anchor anchorTarget = new Anchor("First page of the document."); anchorTarget.setName("BackToTop"); document.add(anchorTarget); // Đóng File document.close(); System.out.println("Write file succes!"); } catch (FileNotFoundException | DocumentException e) { e.printStackTrace(); } } }
Kết quả đầu ra:
Tiếp theo chúng ta sẽ thêm một số phần tử phức tạp vào tài liệu này.
1.Tạo đối tượng chapter
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 tử đặc biệt, bắt đầu 1 trang mới và có một son số được hiển thị mặc định
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); document.add(title1); document.add(chapter1); chapter1.setNumberDepth(0);
2.Tạo đối tượng section
Mỗi section như là một phần tử con của một chương, Trong đoạn code sau chúng ta sẽ tạo một section
Section section1 = chapter1.addSection(title1); 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); document.add(section1);
3.Tạo đối tượng Chunk
Dùng để thêm một đoạn văn bản nhỏ, chunk sẽ thực hiện viết từ trái sang phải và không biết khi nào xuống dòng, để làm được điều này thì cần dùng thêm đối tượng Phrase
Phrase phrase = new Phrase(); for(int i = 0; i < 100; i++) { Chunk chunk = new Chunk("Viblo"); phrase.add(chunk); } document.add(phrase);
4.Tạo đối tượng table
Chúng ta tạo ra đối tượng PdfTable là t có 3 cột, tiếp theo chúng ta thêm các đối tượng PdfCell có nội dung khác nhau và thêm chúng vào bảng.
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"); document.add(t);
** Kết quả đầu ra: **
5.Tạo đối tượng list:
List l = new List(true, false, 10); l.add(new ListItem("First item of list")); l.add(new ListItem("Second item of list")); document.add(l);
6.Thêm Image vào file pdf
Image image1 = Image.getInstance("framgia.jpg"); document.add(new Paragraph("Image 1")); document.add(image1);
** Kết quả đầu ra: **
7.Thêm Anchor vào file PDF.
// Thêm link vào đoạn văn bản Anchor anchor = new Anchor("iText API"); anchor.setReference("http://developers.itextpdf.com/examples/itext-building-blocks"); document.add(anchor);
**Kết luận: **
Bạn đã thấy được một số phần tử cơ bản về tạo PDF trong java, trong bài viết tới tôi sẽ giới thiệu về các tính năng khác của iText: tạo form, thao tác với xml hoặc html file