Đọc Và Ghi File PDF Trong Java - Viblo
Có thể bạn quan tâm
PDF (Portable Document Format) là một định dạng tập tin văn bản khá phổ biển của hãng Adobe Systems. Tương tự như định dạng Word (.doc), PDF hỗ trợ văn bản thô (text) cùng với phông chữ, hình ảnh đồ họa, âm thanh và nhiều hiệu ứng khác. Tuy nhiên, việc hiển thị văn bản PDF không phụ thuộc vào môi trường làm việc của người sử dụng (cấu hình máy, phần mềm và hệ điều hành). Không như văn bản Word, một văn bản PDF, trong hầu hết các trường hợp, sẽ được hiển thị giống nhau trên những môi trường làm việc khác nhau. Chính vì ưu điểm này, định dạng PDF đã trở nên phổ biển cho việc phát hành sách, báo hay các tài liệu khác qua mạng Internet.
Có nhiều lựa chọn để tạo file .pdf trong Java: 1. Từ data object chuyển đổi thành XML (sủ dụng JAXB, XStream...), sau đó chuyển đổi thành XSL-FO (XSL Formatting Objects) và từ đó render ra file PDF bằng cách sử dụng Formatting Objects Processor (thường là Apache™ FOP). 2. Ngoài ra bạn của thể lựa chọn sử dụng library để thực hiện việc này. Một số library phổ biến: - iText - Apache PDFBox - BFO
Trong khuôn khổ blog này tôi xin giới thiệu với các bạn cách đọc và ghi file .pdf sử dụng iText. Itext là một thư viện cho phép bạn đọc, tạo và chỉnh sửa file pdf trên nhiều ngôn ngữ như Java, .Net, Android...
Để sử dụng itext trước tiên bạn cần download itext http://sourceforge.net/projects/itext/ và include itext vào chương trình của bạn.
I. Tạo file PDF đơn giản với Itext.
Chúng ta cùng tìm hiểu qua một chút về cấu trúc cơ bản của 1 file pdf. Mọi file pdf đều gồm các thành phần sau: 1. Header là dòng đầu tiên của file .pdf xác định version kĩ thuật được sử dụng trong file pdf. 2. Body được sử dụng để giữ toàn bộ dữ liệu được hiển thi cho người dùng bao gồm : text stream, image, các thành phần multimedia... 3.'xref' Table là bảng tham khảo chéo, trong đó có chứa các tài liệu tham khảo cho tất cả các đối tượng trong tài liệu. 4. Trailer quy định cách đọc các 'xref' Table và các đối tượng đặc biệt khác.
Bây giờ chúng ta sẽ thực hiện tạo một file .pdf đơn giản.
import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; import java.io.FileOutputStream; import java.io.FileNotFoundException; public class HelloWorldExample { public static void main(String[] args) { // tạo một document Document document = new Document(); try { // khởi tạo một PdfWriter truyền vào document và FileOutputStream PdfWriter.getInstance(document, new FileOutputStream("HelloWorld.pdf")); // mở file để thực hiện viết document.open(); // thêm nội dung sử dụng add function document.add(new Paragraph("A Hello World PDF document.")); // đóng file document.close(); } catch (DocumentException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }Và đây là kết quả mà ta nhận được.
Bây giờ chúng ta sẽ tìm hiểu một số Element đơn giản trong iText:
Chunk : dùng để thêm một đoạn nhỏ của văn bản
import com.itextpdf.text.Chunk; ... for(int i = 0; i < 10; i++) { Chunk chunk = new Chunk("Hello World!!"); document.add(chunk); } ... kết quả nhận được sẽ là:Chunk chỉ thực hiện việc viết từ trái sang phải và không biết khi nào cần phải xuống dòng, để làm điều này chúng ta cần bọc nó trong 1 Phrase.
Phrase:
import com.itextpdf.text.Phrase; ... Phrase phrase = new Phrase(); for(int i = 0; i < 10; i++) { Chunk chunk = new Chunk("Hello World!!"); phrase.add(chunk); } document.add(phrase); ...Phrase giúp bạn thêm được dấu xuống dòng nhưng nếu bạn muốn căn chỉnh vị trí, thụt đầu dòng thì nó lại không thực hiện được. Để giải quyết vấn đề này ta sử dụng Paragraph.
Paragraph:
import com.itextpdf.text.Element; ... //Khai báo 2 paragraph Paragraph paragraph1 = new Paragraph("This is Paragraph 1"); Paragraph paragraph2 = new Paragraph("This is Paragraph 2"); //Định dạng đoạn văn bản thứ nhất paragraph1.setIndentationLeft(80); paragraph1.setIndentationRight(80); paragraph1.setAlignment(Element.ALIGN_CENTER); paragraph1.setSpacingAfter(15); //Đinh dạng đoạn văn bản thứ 2 paragraph2.setSpacingBefore(15); paragraph2.setAlignment(Element.ALIGN_LEFT); //Thêm nội dung cho cả 2 đoạn văn bản trên Phrase phrase = new Phrase("This is a large sentence."); for(int i = 0; i < 10; i++) { paragraph1.add(phrase); paragraph2.add(phrase); } //Thêm 2 đoạn văn bản vào document document.add(paragraph1); document.add(paragraph2); ...Và đây là kết quả thu được: Bạn có thể thực hiện hầu hết các format văn bản khi sử dụng Paragraph
II. Anchor (link), Image, List, Table trong iText
-
Anchor (link)
Để tạo link với iText ta sử dụng class Anchor. Link được tạo ra tương tự như trong Html.
-
Image
Bạn có thể làm rất nhiểu thứ với Image khi sử dụng itext như là zoom, xoay, tạo border...
-
List
Bạn có thể thêm ordered list hoặc unordered list vào document của bạn khi sử dụng class List của iText.
-
Table
Khi bạn muốn tạo 1 table trong document thì PdfPTable là class mà bạn cần dùng đến
III. Đọc file PDF với iText
Bây giờ ta sẽ tiến hành đọc file .pdf có sẵn.
import java.io.IOException; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.parser.PdfTextExtractor; public class Progam { public static void main(String[] args) { try { //Khai báo PdfReader với giá trị truyền vào là path của file cần đọc PdfReader reader = new PdfReader("Java How to Program, 9th edition.pdf"); //In ra số lượng page của file đã đọc System.out.println("This PDF has "+reader.getNumberOfPages()+" pages."); //Sử dụng PdfTextExtractor để đọc toàn bộ text ở trang 100 String page = PdfTextExtractor.getTextFromPage(reader, 100); System.out.println("Page 100 Content:\n\n"+page+"\n\n"); } catch (IOException e) { e.printStackTrace(); } } }Và đây là kết quả thu được:
IV. Lời kết
iText là 1 library rất tiện ích khi làm việc với file PDF trong java. Trong khuôn khổ blog này mình chỉ giới thiệu được những tính năng cơ bản nhất của iText. Hẹn gặp lại các bạn ở blog sau.
Tài liệu tham khảo: - Itext documents: http://itextpdf.com/apis - Ebook : iText in Action, Second Edition
Link Git sản phẩm: Đang cập nhật
Từ khóa » đọc Ghi File Trong Java Swing
-
4 Bước Ghi File Java Với Form Giao Diện Swing - NIIT - ICT Hà Nội
-
Đọc Ghi File Trong Java - Học Java Miễn Phí Hay Nhất - VietTuts
-
Java Swing: Hướng Dẫn đọc Ghi Thông Tin Vào File Text - YouTube
-
Java - Bài 26: Đọc Dữ Liệu Từ File Với Scanner - YouTube
-
Cách đọc Ghi File Trong Java - Lập Trình Không Khó
-
Java: Đọc, Ghi Và Tạo Tập Tin | V1Study
-
Tổng Hợp Cách đọc File Text Trong Java - Deft Blog
-
Đọc Ghi File CSV Trong Java - Deft Blog
-
đọc Ghi File Trong Java | Khoá-họ
-
Ghi File Trong Java Swing - Cộng đồng Java Việt Nam
-
Đọc/Ghi File Văn Bản - Học Java - CodeGym
-
Đọc Ghi File Excel Trong Java Sử Dụng Apache POI - Openplanning
-
Làm Việc Với Text File | Võ Văn Hải's Blog
-
[Java] Đọc Ghi Theo Object Trong Java - Read Write Object In Java