2009-08-09 43 views
40

Xin chào, tôi biết về một số PDF Máy phát điện cho php (fpdf, dompdf, v.v.) Điều tôi muốn biết là về trình phân tích cú pháp.Có trình phân tích cú pháp PDF cho PHP không?

Vì lý do ngoài tầm kiểm soát của tôi, một số thông tin tôi cần chỉ nằm trong một bảng bên trong pdf và tôi cần trích xuất bảng đó và chuyển đổi nó thành một mảng.

Mọi đề xuất?

+2

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

+0

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

Trả lời

1

Hãy xem GhostScript hoặc ITextSharp, có nhiều phiên bản đa nền tảng khác nhau của cả hai.

1

Zend_Pdf là một phần của Zend Framework. bang tay của họ:

Thành phần Zend_Pdf là một PDF cơ thao túng (Portable Document Format) . Nó có thể tải, tạo, sửa đổi và lưu tài liệu. Do đó, nó có thể giúp bất kỳ ứng dụng PHP nào tự động tạo tài liệu PDF bằng cách sửa đổi tài liệu hiện có hoặc tạo tài liệu mới từ đầu.

+0

+1 - Zend Framework thành phần đáng tin cậy làm những gì họ nói rằng họ sẽ. – karim79

+5

Tôi không tin rằng bạn có thể đọc văn bản trong các tệp PDF bằng cách sử dụng Zend_Pdf –

+0

Bên cạnh đó Zend_Pdf không hỗ trợ định dạng PDF> 1.4 –

0

Nó có thể không thực sự là một bảng bên trong PDF là PDF mất rằng loại thông tin ...

3

Các bạn đã nhìn xPDF? Có một chương trình trong đó gọi là pdftotext sẽ thực hiện chuyển đổi. Bạn có thể gọi nó từ PHP và sau đó đọc trong phiên bản văn bản của PDF. Bạn sẽ cần phải có khả năng chạy exec() hoặc system() từ php, do đó, điều này có thể không hoạt động trên tất cả các giải pháp lưu trữ mặc dù.

Ngoài ra, có một số ví dụ trên PHP site sẽ chuyển đổi PDF thành văn bản, mặc dù nó khá thô. Bạn có thể muốn thử một số ví dụ đó. Trên số đó PHP page, tìm kiếm luc tại phpt dot org.

+0

Tôi đã thử xpdf dựa trên đề xuất của bạn và ngạc nhiên về hiệu quả hoạt động của nó - cảm ơn! – Tomba

0

This là PHP PDF phân tích cú pháp, mà tồn tại trong hai hương vị:

  1. Phiên bản miễn phí có thể phân tích các file PDF lên để định dạng PDF 1.5
  2. Thương add-on có thể phân tích bất kỳ định dạng PDF (lên đến hiện tại 1.9)
+0

Liên kết đó đã chết, nhưng tôi nghĩ đây là một nhánh của nó: https://github.com/mark9000/FPDI – nullability

29

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:

  1. 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ể) ...
  2. 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) ...
  3. 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 ...
  4. 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 ...

+2

+1 Tôi thậm chí có thể gọi nó là ác mộng. Spec là rất lớn, một tập tin PDF gần như giống như một hệ thống tập tin với rất nhiều lựa chọn khác nhau và sự lựa chọn trong ... bạn chắc chắn có thể thấy làm thế nào họ có thể ẩn khả năng jail-breaking trong đó. – Rudu

+2

Bạn có mong đợi điều gì ít hơn từ Adobe không? – bpeterson76

+0

@ bpeterson76, vâng .. Tôi không muốn các tệp PDF của mình có thể tải xuống được: ( –

17

tôi sử dụng PDFBox cho rằng (http://pdfbox.apache.org/). Phần mềm này là javabased và nền tảng độc lập. Nó hoạt động nhanh và đáng tin cậy. Bạn có thể sử dụng nó thông qua exec hoặc shell execute hoặc thông qua một PHP/Java-Bridge (http://php-java-bridge.sourceforge.net/)

+1

Cảm ơn rất nhiều, đó chính xác là những gì tôi đang tìm kiếm! – 2ndkauboy

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