2013-05-15 28 views
6

Cách xác định xem trang PDF có chứa văn bản hay chỉ là hình ảnh, sử dụng Java không?Xác định xem trang PDF có chứa văn bản hay chỉ là hình ảnh

Tôi đã tìm kiếm thông qua nhiều diễn đàn và trang web, nhưng tôi chưa thể tìm thấy câu trả lời.

Có thể trích xuất văn bản từ PDF để biết trang có ở định dạng hoặc văn bản định dạng không?

PdfReader reader = new PdfReader(INPUTFILE); 
     PrintWriter out = new PrintWriter(new FileOutputStream(OUTPUTFILE));    
     for (int i = 1; i <= reader.getNumberOfPages(); i++) { 
     // here I want to test the structure of the page !!!! if it's possible       
     out.println(PdfTextExtractor.getTextFromPage(reader, i)); 
     } 
+1

Điều này có vẻ khá liên quan đến tình cờ. Có lẽ bạn sẽ cần một tiền thưởng ở đây – Coffee

+1

Cảm ơn bạn Mr Adel Tôi hy vọng như vậy :) –

Trả lời

6

Không có cách nào chống nước để làm những gì bạn muốn.

Văn bản có thể xuất hiện theo nhiều cách khác nhau bên trong tệp PDF. Ví dụ: người ta có thể vẽ tất cả các hình tượng bằng cách sử dụng toán tử trạng thái đồ họa thay vì sử dụng trạng thái văn bản. (Tôi xin lỗi nếu điều này nghe có vẻ như Trung Quốc với bạn, nhưng tôi có thể đảm bảo với bạn đó là ngôn ngữ PDF thích hợp.)

Nếu một giải pháp đặc biệt bao gồm các tình huống phổ biến nhất và bỏ lỡ một PDF lạ một lần là OK cho bạn, sau đó bạn đã có một giải pháp tốt đầu tiên.

Trong mã của bạn, bạn lặp lại tất cả các trang và hỏi iText nếu có bất kỳ văn bản nào trên trang. Đó là một dấu hiệu tốt.

Nội bộ, mã của bạn đang sử dụng giao diện RenderListener. iText phân tích cú pháp nội dung của trang và kích hoạt các phương thức trong triển khai thực hiện RenderListener cụ thể. Đây là triển khai thực hiện tùy chỉnh: MyTextRenderListener. Triển khai tùy chỉnh này được sử dụng trong ví dụ ParsingHelloWorld.

Ngoài ra còn có phương thức renderImage() (xem ví dụ MyImageListener). Nếu phương pháp này được kích hoạt, bạn chắc chắn rằng 100% cũng có Hình ảnh trong trang và bạn có thể sử dụng đối tượng ImageRenderInfo để có được vị trí, chiều rộng và chiều cao của hình ảnh (nghĩa là: nếu bạn biết cách diễn giải số Matrix được trả về theo phương thức getImageCTM()).

Sử dụng tất cả các yếu tố này, bạn đã có thể có được một chặng đường dài để đạt được những gì bạn cần, nhưng lưu ý rằng sẽ luôn có các tệp PDF lạ sẽ thoát khỏi tất cả các séc của bạn.

+0

Cảm ơn bạn rất nhiều Mr @ Bruno Lowagie –

Các vấn đề liên quan