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ạipdftotext
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.