Làm cách nào để đọc tệp PDF bằng PHP?

Chúng ta đã biết cách xem pdf trên trình duyệt được hướng dẫn chi tiết tại đây. Tuy nhiên, điều này sẽ hiển thị pdf trên cùng một trang mà chúng tôi đã yêu cầu

Do đó, có những trường hợp chúng ta cần mở pdf trên một tab khác thay vì cùng một trang. Trong những trường hợp như vậy, chúng tôi có thể sử dụng liên kết target="_blank"

Thuộc tính đích href mô tả nơi tài liệu được liên kết sẽ mở

Hãy cùng khám phá với các trường hợp sau đây với ví dụ

Mở tệp pdf trong tab mới được lưu trữ trên máy chủ web

Click here to open the file

Giải trình. Trường hợp tập tin “đường dẫn/tên tập tin. pdf” là vị trí của tệp pdf trên máy chủ web. Sau khi nhấp vào văn bản liên kết, nó sẽ mở một tab mới và hiển thị tệp pdf

Tạo pdf và mở trên trình duyệt

Trong những trường hợp như vậy, chúng tôi có thể xác định đường dẫn href cho tập lệnh nơi chúng tôi đã viết mã tạo pdf. Ví dụ

Click here to open the file

Giải trình. Tên tệp được cung cấp renderPdf. php nằm trên thư mục gốc. Chúng tôi có thể đặt tập lệnh ở bất kỳ đâu trên máy chủ và cung cấp đường dẫn

kết xuấtPdf. tệp php phải xác định tiêu đề php và thay đổi mã bắt buộc để tạo chế độ xem pdf trên trình duyệt. Đối với các mẫu mã, chúng ta có thể tham khảo

TL; DR Để trích xuất siêu dữ liệu và văn bản PDF đơn giản, hãy sử dụng pdfparser. Đối với các tùy chọn nâng cao, hãy thử pdftotext và pdfinfo từ Poppler. Để nối hoặc tách các tệp PDF, mã hóa chúng hoặc áp dụng hình mờ, hãy 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

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 tệp PDF. Trước đó, việc lựa chọn không hề dễ dàng và chúng tôi có rất nhiều tiêu chí để xem xét khi chọn công cụ tốt nhất. Hôm nay chúng ta 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 gốc

Một lần nữa, chúng ta sẽ bắt đầu từ việc 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 không

pdfparser

Có một thư viện thú vị được gọi là smalot/pdfparser. Nó có hơn 1500 sao trên GitHub. Nó phân tích một tệp PDF thành 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 cú pháp một tệp hiện có hoặc một 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ó

$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ừ Actualys

trình phân tích cú pháp tc-lib-pdf

Đây là 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 trình phân tích cú pháp đầ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ề cách xử lý các tệp bị hỏng

FPDI

Tôi đã làm quen với thư viện này khi nhận được báo cáo lỗi về mô-đun đánh dấu chìm trong một hệ thống sách điện tử nào đó. Mô-đun đã nhận được một tệp PDF, phân tích cú pháp bằng FPDI, tạo hình mờ bằng 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à nội dung của báo cáo lỗi. Chúng tôi quyết định chuyển sang một công cụ khác, pdftk, được mô tả bên dưới

Công cụ dòng lệnh

Công cụ dòng lệnh đầu tiên tôi sử dụng là pdftk. Tôi đã sử dụng nó để nối các tài liệu riêng biệt thành một, áp dụng hình mờ và trích xuất siêu dữ liệu cơ bản, chẳng hạn 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 còn thiếu là tính năng trích xuất văn bản

Nhu cầu 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 tôi chỉ có thể truy cập trình bao bọc CLI cho thư viện đó có một số tùy chọn hạn chế

Sau đó, tôi phát hiện ra thư viện Poppler, được cho là hỗ trợ đầy đủ 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 – , mà chúng ta có thể chạy từ PHP. Ví dụ: công cụ pdftotext cung cấp 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ể duy trì bố cục tài liệu phù hợp trong khi hiển thị hoặc cắt tài liệu thành một vùng được chỉ định. Ngoài ra, pdfinfo cung cấp thông tin toàn diện về 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

Đôi khi bạn có thể muốn tạo ảnh chụp màn hình PNG hoặc JPEG của tài liệu. Bạn có thể làm điều đó với _______________ từ Poplar hoặc sử dụng ImageMagick _______________. Tại thời điểm viết bài, không có thư viện PHP gốc nào để hiển thị PDF

Giấy gói

Đối với pdftk, hãy xem thư viện này. mikehaertl/php-pdftk

Có thể truy cập PDFBox CLI 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 một tệp 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à bao gồm tất cả poppler-utils, nhưng hiện tại 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 một thư mục đầu ra cho một tệp [nó không trả về dữ liệu đã 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 trình bao bọc, vì poppler-utils chỉ là một tập hợp các trình bao bọc CLI cho thư viện Poppler C++ 😉

Chọn cái nào?

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

Các thư viện PHP gốc 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à Composer

Các công cụ CLI, đặc biệt là các 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 chặt chẽ vào lúc này. Có thể tất cả các tối ưu hóa đi kèm với PHP 7 sẽ khiến đ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ó nhiều đối tượng hơn và do đó có thể nhận được nhiều hỗ trợ hơn từ cộng đồng

Bạn nên chọn một công cụ tốt nhất cho các yêu cầu cụ thể của mình. Hầu hết các công cụ sẽ thực hiện tốt công việc trong khi chỉ cần hiển thị tệp PDF không được mã hóa thành hình ảnh hoặc một số văn bản thuần túy. Nhưng nếu bạn cần kiểm soát nhiều 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, thì poppler-utils sẽ là một lựa chọn tốt

Đôi khi tôi chợt nhận 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 có 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ùng một vấn đề xử lý. Đó là lý do tại sao tôi thích chọn những 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à kiên trì gắn bó với một công nghệ duy nhất.

Làm cách nào để đọc tệp PDF trong PHP?

Đưa nó vào trang web được yêu cầu bằng PHP. Tạo một biểu mẫu HTML, trong đó chúng tôi có thể chọn một tệp PDF từ máy tính của bạn và cũng có thể kiểm tra xem phần mở rộng của tệp đó có phải là PDF hay không . Tiếp cận. Đảm bảo bạn đã cài đặt máy chủ XAMPP hoặc máy chủ WAMP trên máy của mình. Trong bài viết này, chúng tôi sẽ sử dụng máy chủ XAMPP.

Làm cách nào để đọc một tệp trong PHP?

Tệp đọc PHP - fread[] . Tham số đầu tiên của fread[] chứa tên của tệp để đọc và tham số thứ hai chỉ định số byte tối đa để đọc.

Làm cách nào để mở tệp PDF trong cửa sổ bật lên trong PHP?

php $filePath = 'tệp/ví dụ. pdf'; . file_exists[$filePath]] { echo "Tệp $filePath không tồn tại"; . pdf"; tiêu đề ['Kiểu nội dung. ứng dụng/pdf']; . nội tuyến;

Làm cách nào để lấy hình ảnh từ PDF trong PHP?

Cách chuyển đổi PDF thành hình ảnh bằng PHP với ImageMagick .
Bước 1. Mở môi trường mã hóa PHP và bắt đầu bằng cách tạo đối tượng tưởng tượng bằng mã. .
Bước 2. Bây giờ hãy đọc hình ảnh từ tệp PDF mục tiêu bằng mã. .
Bước 3. Ví dụ, để chuyển đổi tất cả các trang PDF của bạn sang định dạng PNG, chỉ cần chạy đoạn mã sau

Chủ Đề