Hướng dẫn best php pdf parser - trình phân tích cú pháp pdf php tốt nhất

TL; DR cho văn bản PDF đơn giản và trích xuất siêu dữ liệu, sử dụng pdfparser. Đối với các tùy chọn nâng cao, hãy thử PDFTOTEXT và PDFINFO từ Poppler. Để tham gia hoặc chia các tệp PDF, mã hóa chúng hoặc áp dụng hình mờ, sử dụng PDFTK. Để tạo ảnh chụp màn hình JPEG hoặc PNG của PDF, hãy sử dụng ImageMagick hoặc PDFTocairo. For simple PDF text and metadata extraction, use pdfparser. For advanced options, try pdftotext and pdfinfo from Poppler. To join or split PDF files, encrypt them or apply watermarks, use pdftk. To make a JPEG or PNG screenshot of a PDF, use ImageMagick or pdftocairo.

Trong bài viết trước, tôi đã mô tả một số công cụ có thể được sử dụng cùng với PHP để tạo các tệp PDF. Trước đó, sự lựa chọn không dễ dàng và chúng tôi có rất nhiều tiêu chí để xem xét trong khi chọn công cụ tốt nhất. Hôm nay chúng tôi sẽ duyệt các khả năng để đọc và chỉnh sửa các tệp PDF hiện có.

Thư viện PHP bản địa

Một lần nữa, chúng tôi sẽ bắt đầu kiểm tra xem có bất kỳ thư viện PHP nào để thao tác với các tệp PDF mà không phụ thuộc vào các công cụ nhị phân bên ngoài.

PDFPARSER

Có một thư viện thú vị gọi là Smalot/PDFPARSER. Nó có hơn 1500 sao trên GitHub. Nó phân tích một tệp pdf vào một mảng các đối tượng tài liệu được xử lý thêm để có được những gì chúng ta cần.

Thư viện thuận tiện vì nó hỗ trợ cả phân tích tệp hiện có hoặc chuỗi có dữ liệu PDF. Nó cho phép bạn trích xuất siêu dữ liệu và văn bản thuần túy từ một tài liệu cùng với các đối tượng khác (hình ảnh, phông chữ). Tuy nhiên, các tệp được mã hóa chưa được hỗ trợ. Bạn có thể kiểm tra thư viện tại trang demo của nó.It allows you to extract metadata and plain text from a document along with other objects (images, fonts). However, encrypted files are not yet supported. You can test the library at its demo page.

$parser = new Smalot\PdfParser\Parser();
$document = $parser->parseFile('test.pdf');

// creator, date of creation, number of pages etc.
print_r($document->getDetails());

// text dump
echo $document->getText();

Smalot/PDFPARSER có hỗ trợ thương mại từ thực tế.

tc-lib-pdf-parser

Đây là một thư viện được tạo bởi người tạo TCPDF, một thư viện nổi tiếng tạo các tệp PDF. Trình phân tích cú pháp này thu hút ít sự quan tâm hơn so với người đầu tiên, mặc dù tác giả có hơn 15 năm kinh nghiệm xử lý các tệp PDF.

Bạn có thể so sánh cả hai thư viện bằng cách phân tích các tài liệu khác nhau. Chúng có thể khác nhau đặc biệt là về xử lý các tệp bị hỏng.

FPDI

Tôi đã quen thuộc với thư viện này khi tôi nhận được một báo cáo lỗi cho một mô-đun đánh dấu hình mờ trong một số hệ thống sách điện tử. Mô -đun nhận được tệp PDF, phân tích cú pháp bằng FPDI, tạo ra một hình mờ với FPDF và đóng dấu nó trên tất cả các trang.

Vấn đề là phiên bản miễn phí của FPDI chỉ hỗ trợ PDF phiên bản 1.4 trở xuống. Để hỗ trợ các phiên bản tài liệu cao hơn, bạn phải mua một thư viện đầy đủ. Và đó là những gì mà báo cáo lỗi là về. Chúng tôi quyết định chuyển sang một công cụ khác, pdftk, được mô tả dưới đây.

Công cụ dòng lệnh đầu tiên tôi chơi là PDFTK. Tôi đã sử dụng nó để tham gia các tài liệu riêng biệt vào một, áp dụng hình mờ và trích xuất siêu dữ liệu cơ bản, giống như một số trang. Nó hỗ trợ tất cả các định dạng PDF không giống như thư viện FPDI. Điều duy nhất mà thiếu thiếu là một tính năng trích xuất văn bản.join separate documents into one, apply watermarks and extract basic metadata, like a number of pages. It supports all PDF formats unlike FPDI library. The only thing that’s missing is a text extraction feature.

Sự cần thiết phải trích xuất văn bản thuần túy từ một tài liệu đã dẫn tôi đến thư viện Apache PDFBox. Nó được viết bằng Java và, như tôi đã mô tả trước đây, nó cung cấp một số tính năng rất hay. Tuy nhiên, trong thế giới PHP, chúng ta chỉ có thể truy cập một trình bao bọc CLI cho thư viện đó có một bộ tùy chọn giới hạn.

Sau đó, tôi phát hiện ra thư viện poppler, được cho là hỗ trợ đầy đủ cho tiêu chuẩn ISO 32000-1 cho PDF. Thư viện C ++ này có thể được truy cập thông qua các công cụ CLI chuyên dụng-poppler-utils, mà chúng ta có thể chạy từ PHP. Ví dụ: công cụ pdftotext cung cấp rất nhiều quyền kiểm soát đối với kết xuất văn bản thuần túy - bạn thậm chí có thể bảo quản bố cục tài liệu thích hợp trong khi kết xuất hoặc cắt tài liệu đến một khu vực được chỉ định. Ngoài ra, pdfinfo cung cấp thông tin toàn diện về một tệp, như định dạng trang, loại mã hóa, v.v. Bạn cũng có thể sử dụng nó để trích xuất JavaScript.plain text dump – you can even preserve a proper document layout while rendering, or crop the document to a specified region. Also, pdfinfo provides comprehensive information about a file, like page format, encryption type etc. You can use it to extract JavaScript too.

Đôi khi bạn có thể muốn tạo ảnh chụp màn hình PNG hoặc JPEG của một tài liệu. Bạn có thể làm điều đó với pdftocairo từ Poppler hoặc sử dụng ImageMagick từ convert. Tại thời điểm viết bài, không có thư viện PHP gốc để hiển thị PDF.create a PNG or JPEG screenshot of a document. You can do it with pdftocairo from Poppler, or use ImageMagick’s convert. At the time of writing, there are no native PHP libraries to render a PDF.

Giấy gói

Đối với pdftk, hãy xem thư viện này: MikeHaertl/PHP-PDFTK.

PDFBox CLI có thể được truy cập thông qua Schmengler/PDFBox.

ImageMagick và Ghostscript là cơ sở cho trình bao bọc Spatie/PDF-to-Image.

Poppler có một số thư viện trình bao bọc PHP:

  • Spatie/pdf-to-text chỉ cho phép trích xuất văn bản từ PDF. Nó yêu cầu PDF đầu vào tồn tại trong hệ thống tệp. Thư viện không bao gồm các đối số đầu vào bổ sung, vì vậy bạn phải chỉ định chúng theo cách thủ công.
  • ncjoes/poppler-php: một thư viện được cho là sẽ kết thúc tất cả poppler-utils, nhưng tại thời điểm pdftotext vẫn chưa được hỗ trợ. Ngoài ra, thư viện này không thuận tiện lắm vì nó buộc bạn phải chọn thư mục đầu ra cho một tệp (nó không trả về dữ liệu được xử lý dưới dạng chuỗi).

Trên thực tế, hai thư viện này là trình bao bọc cho một gói, vì poppler-utils chỉ là một bộ sưu tập các trình bao bọc CLI cho thư viện Poppler C ++ 😉

Chọn cái nào? Bản địa hay CLI?

Có một vài cân nhắc cơ bản.

Các thư viện PHP bản địa nên hoạt động độc lập với môi trường máy chủ. Chúng dễ dàng hơn rất nhiều để thiết lập và cập nhật. Công cụ phụ thuộc duy nhất bạn sử dụng là nhà soạn nhạc.

Các công cụ CLI, đặc biệt là những công cụ được viết bằng C/C ++, có thể nhanh hơn và sử dụng ít bộ nhớ hơn. Tuy nhiên, tôi không có bằng chứng nghiêm ngặt vào lúc này. Có lẽ tất cả các tối ưu hóa đi kèm với PHP 7 sẽ làm cho điểm này trở nên lỗi thời. Ngoài ra, tôi tin rằng các công cụ C/C ++ có đối tượng rộng hơn và do đó có thể nhận được nhiều hỗ trợ cộng đồng hơn.

Bạn nên chọn một công cụ mà tốt nhất cho các yêu cầu cụ thể của bạn. Hầu hết các công cụ sẽ làm một công việc tốt trong khi chỉ đơn giản là kết xuất một tệp PDF không được mã hóa thành một hình ảnh hoặc một số văn bản đơn giản. Nhưng nếu bạn cần có nhiều quyền kiểm soát hơn đối với cấu trúc tệp đầu ra hoặc bạn muốn xử lý các tài liệu được mã hóa, poppler-utils sẽ là một lựa chọn tốt.

Đôi khi tôi xảy ra rằng nhiều nhà phát triển chỉ đang phát minh lại bánh xe, đặc biệt là khi nói đến vô số thư viện xử lý PDF cho PHP. Định dạng tài liệu di động có gần bảy trăm trang thông số kỹ thuật. Tất cả chúng ta đang vật lộn với các vấn đề xử lý tương tự. Đó là lý do tại sao tôi thích chọn các công cụ tốt nhất trong các công nghệ khác nhau và kết nối chúng với các giao diện hơn là gắn bó với một công nghệ duy nhất.

Kiểm tra danh sách phần mềm PDF tại Wikipedia.

Xem thêm

  • Chọn một công cụ PHP để tạo PDFS (Cập nhật 2021)
  • PHP: Cách chụp ảnh màn hình của trang PDF