Tôi đã viết trước đó (cho các nhu cầu tương tự) và tôi có thể nói điều này: Vui chơi. Đó là một nhiệm vụ khá phức tạp. Các PDF specification là lớn và khó sử dụng. Có một số phương pháp lưu trữ văn bản bên trong nó. Và kicker là mỗi máy phát PDF là khác nhau trong cách nó hoạt động. Vì vậy, trong khi một cái gì đó như TFPDF hoặc DOMPDF tạo ra REALLY dễ đọc PDF (từ một quan điểm máy), Acrobat làm cho một số tài liệu thực sự địa ngục.
Lý do là cách viết văn bản. Hầu hết các trình kết xuất dựa trên DOM - tôi đã sử dụng-- viết toàn bộ dòng dưới dạng một chuỗi và định vị nó một lần (thật dễ đọc). Acrobat cố gắng để có hiệu quả hơn (và nó là) bằng cách viết một hoặc có thể một vài nhân vật tại một thời điểm, và định vị chúng một cách độc lập. Trong khi REALLY này đơn giản hóa việc render, nó làm cho việc đọc MUCH trở nên khó khăn hơn.
Phía lên ở đây, là định dạng PDF trong chính nó là thực sự đơn giản. Bạn có "đối tượng" theo một cú pháp thông thường.Sau đó, bạn có thể liên kết chúng lại với nhau để tạo nội dung. Đặc điểm kỹ thuật thực hiện tốt công việc mô tả định dạng tệp. Nhưng đọc thế giới thực sẽ mất một chút sức mạnh não ...
Một số mảnh hữu ích của lời khuyên mà tôi đã phải học cách cứng nếu bạn đang đi để viết nó cho mình:
- Adobe thích vẽ lại phông chữ. Vì vậy, ký tự
65
có thể sẽ không phải là A
... Bạn cần phải tìm một đối tượng bản đồ và suy ra những gì nó đang làm dựa trên những gì nhân vật có trong đó. Và nó có hiệu quả kể từ khi một nhân vật không xuất hiện trong tài liệu cho phông chữ đó, nó không bao gồm nó (mà làm cho cuộc sống khó khăn nếu bạn cố gắng chỉnh sửa một ... Read More khả thi. Viết các lớp cho từng loại đối tượng và mỗi kiểu gốc (chuỗi, số, v.v.). Hãy để những lớp đó phân tích cho bạn. Sẽ có một chút công bằng của sự lặp lại trong đó, nhưng bạn sẽ tiết kiệm cho mình cuối cùng khi bạn nhận ra rằng bạn cần phải tinh chỉnh một cái gì đó cho chỉ một loại cụ thể) ...
- Viết cho một phiên bản cụ thể hoặc hai PDF spec và thực thi nó. Kiểm tra số phiên bản, và nếu nó cao hơn bạn mong đợi, bảo lãnh ... Và không cố gắng "làm cho nó hoạt động". Nếu bạn muốn hỗ trợ các phiên bản mới hơn, hãy thoát ra khỏi đặc điểm kỹ thuật và nâng cấp trình phân tích cú pháp từ đó. Đừng cố gắng để thử và lỗi theo cách của bạn lên (nó không phải là niềm vui) ...
- Chúc may mắn với các luồng nén. Tôi đã tìm thấy rằng thông thường bạn không thể tin tưởng các đối số chiều dài để xác minh những gì bạn đang giải nén. Đôi khi (đối với một số máy phát điện) nó hoạt động tốt ... Những người khác nó tắt bởi một hoặc nhiều byte. Tôi chỉ cố gắng làm lệch hướng nếu bộ lọc phù hợp, và sau đó buộc chiều dài ...
- Khi kiểm tra độ dài, không sử dụng
strlen
. Sử dụng mb_strlen($string, '8bit')
vì nó sẽ bù cho các bộ ký tự khác nhau (và cho phép các ký tự có khả năng không hợp lệ trong bộ ký tự khác).
Nếu không, điều may mắn nhất ...
Tôi đang tặng tiền thưởng cho bất kỳ ai có thể cho chúng ta một ví dụ làm việc về cách trích xuất văn bản của pdf. Giải pháp phải sử dụng các thư viện miễn phí (không có xPDF hoặc PDF2Text) và nền tảng độc lập (phải làm việc trên win và unix, do đó không có PDF2Text). Nó có thể sử dụng hàm exec() hoặc shell() của PHP. – 2ndkauboy
Cảm ơn Kau-Boy. Có lẽ tiền thưởng sẽ giúp thúc đẩy các câu trả lời chi tiết hơn. – elviejo79