Làm cách nào để chuyển đổi tài liệu PDF thành hình ảnh xem trước trong PHP? [đóng cửa]


199

Những thư viện, phần mở rộng, v.v. sẽ được yêu cầu để hiển thị một phần tài liệu PDF thành tệp hình ảnh?

Hầu hết các thư viện PDF PDF mà tôi đã tìm thấy tập trung vào việc tạo tài liệu PDF, nhưng có cách nào đơn giản để hiển thị tài liệu thành định dạng hình ảnh phù hợp cho việc sử dụng web không?

Môi trường của chúng tôi là một chồng LAMP.


Tôi rất thích có thể làm điều này và có tập tin có .jpgphần mở rộng. Tôi đã thử phương pháp .htaccess AddHandler và nó không hoạt động.
Keyslinger

Câu trả lời:


228

Bạn cần ImageMagickGhostScript

<?php
$im = new imagick('file.pdf[0]');
$im->setImageFormat('jpg');
header('Content-Type: image/jpeg');
echo $im;
?>

Các [0]phương tiện page 1.


11
có nó hoạt động. Bạn cũng có thể làm: $ im-> setResolution (300, 300) chẳng hạn để hiển thị pdf của bạn ở độ phân giải mong muốn.
Luis Melgratti

6
Tôi chưa thử nó, nhưng nếu bạn đang sử dụng tài liệu google và không bận
David Hobs

4
nhưng làm thế nào để đưa ImageMagick và GhostScript vào tệp php
namratha

1
@ think123 sử dụng $im->thumbnailImage(1500, 0);Điều đó sẽ đặt hình ảnh jpg của bạn thành chiều rộng 1500 và giữ lại tỷ lệ. Xem tài liệu
Kevin Jantzer

1
Từ câu trả lời của tôi dưới đây - Nếu bạn đang tải PDF từ một blob thì đây là cách bạn lấy trang đầu tiên thay vì trang cuối: $ im-> readimageblob ($ blob); $ im-> setiteratorindex (0);
jrjohnson

34

Đối với những người không có ImageMagick vì bất kỳ lý do gì, các hàm GD cũng sẽ hoạt động cùng với GhostScript. Chạy lệnh ghostscript với exec()để chuyển đổi PDF sang JPG và thao tác với tệp kết quả với imagecreatefromjpeg().

Chạy lệnh ghostscript:

exec('gs -dSAFER -dBATCH -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300 -sOutputFile=whatever.jpg input.pdf')

Để thao tác, tạo một hình ảnh giữ chỗ mới $newimage = imagecreatetruecolor(...)và đưa vào hình ảnh hiện tại. $image = imagecreatefromjpeg('whatever.jpg')và sau đó bạn có thể sử dụng imagecopyresampled()để thay đổi kích thước hoặc bất kỳ số lượng imagemagicklệnh không tích hợp nào khác


3
Để chỉ có được một hình ảnh của trang đầu tiên, hãy thêm các khóa -dFirstPage = 1 -dLastPage = 1 vào lệnh.
Tim Dearborn

Nếu nó vẫn không hoạt động, bạn có thể cần cung cấp đường dẫn đầy đủ đến gsnhị phân.
vươn

Có vẻ như nó đang chạy một lệnh hệ thống. Điều gì xảy ra nếu người dùng tải lên một tệp có tên something;rm -rf /?
iProgram

Nếu tôi muốn tất cả các trang của pdf để chuyển đổi thành hình ảnh. Vậy thì phải làm thế nào?
Dhara

31

Bạn cũng có thể lấy số lượng trang bằng cách sử dụng

$im->getNumberImages();

Sau đó, bạn có thể tạo ngón tay cái của tất cả các trang bằng vòng lặp, vd.

'file.pdf['.$x.']'

34
(Đây thực sự nên là một nhận xét về câu trả lời của Paolo Bergantino)
Simon East

Câu trả lời thông minh. không được đưa ra bởi người khác nhưng bạn chú ý và viết.
Ashu Kumar

16

Sử dụng phần mở rộng php Imagick . Để kiểm soát kích thước mong muốn của hình ảnh đầu ra raster, hãy sử dụng hàm setResolution

<?php    
$im = new Imagick();
$im->setResolution(300, 300);     //set the resolution of the resulting jpg
$im->readImage('file.pdf[0]');    //[0] for the first page
$im->setImageFormat('jpg');
header('Content-Type: image/jpeg');
echo $im;
?>

(Phần mở rộng về câu trả lời của ông Cameron Bergantino và Luis Melgratti. Bạn cần đặt độ phân giải trước khi tải hình ảnh.)


11

Nếu bạn đang tải PDF từ một đốm màu, đây là cách bạn có được trang đầu tiên thay vì trang cuối cùng:

$im->readimageblob($blob);
$im->setiteratorindex(0);

10
(Đây thực sự nên là một nhận xét về câu trả lời của Paolo Bergantino)
Simon East

9

Bạn cũng có thể thử thực hiện tiện ích 'chuyển đổi' đi kèm với hình ảnh tưởng tượng.

exec("convert pdf_doc.pdf image.jpg");
echo 'image-0.jpg';

3
Thay vì pdf_doc.pdf, pdf_doc.pdf [0] được ưu tiên.
John Kurlak

chuyển đổi là một phần của gói ImageMagick; hãy thử cài đặt sudo yum ImageMagick
Jack Miller

Nếu nó vẫn không hoạt động, bạn có thể cần cung cấp đường dẫn đầy đủ đến convertnhị phân.
vươn

1
echo 'image-0.jpg';trả về một chuỗi.
suz

làm việc cho tôi, cảm ơn
Isabella

4

Tôi là tác giả của PDFlib , một trình bao bọc GhostScript cho php, lợi thế của việc sử dụng thư viện này là, nó đã được thử nghiệm và không yêu cầuImageMagic

Luôn luôn GhostScriptcác lệnh nhanh hơn so với ImageMagickhi nói đến pdf, vì vậy bạn nên sử dụng trình bao bọc GhostScript hoặc các lệnh GhostScript thuần túy

$pdflib = new ImalH\PDFLib\PDFLib();
$pdflib->setPdfPath($pdf_file_path);
$pdflib->setOutputPath($folder_path_for_images);
$pdflib->convert();

Xin chào, tôi đang sử dụng PDFlib của bạn để tạo PNG từ PDF. $ pdflib = mới ImalH \ PDFLib \ PDFLib (); $ pdflib-> setPdfPath ($ pdf_file_path); $ pdflib-> setOutputPath ($ thư mục_path_for_images); $ pdflib-> setImageFormat (\ ImalH \ PDFLib \ PDFLib :: $ IMAGE_FORMAT_PNG); $ pdflib-> setDPI (100); $ pdflib-> setPageRange (1, $ pdflib-> getNumberOfPages ()); $ pdflib-> convert (); PDFlib có tùy chọn đặt chiều rộng và chiều cao của tệp PNG đã tạo không?
WGS

Xin chào, không PDFLib không cung cấp phương pháp để thao tác với hình ảnh nhưng bạn có thể làm như thế này. một khi bạn đã tạo ra các pngs bằng PDFLib, bạn có thể sử dụng một thư viện xử lý hình ảnh khác như github.com/Treinetic/ImageArtist để hoàn thành công việc của bạn ...
imal hasaranga perera

vui lòng thử phương pháp trên tôi đã đề xuất nhưng nếu bạn vẫn gặp khó khăn hãy gửi thư cho tôi đến imal@treinetic.com và tôi sẽ giúp bạn với một mã mẫu ... chúc mừng !!
imal hasaranga perera

Tôi sẽ thử. Cám ơn vì sự gợi ý.
WGS

3

Tôi cài đặt xong! Nó đã hoạt động!

Bạn có thể làm cơ sở cài đặt hình ảnh trên windows.

Đang php (local)sử dụng gọi exec(<command line>) ex:

<?php
$pdf = "filename.pdf";
$info = pathinfo($pdf);
$file_name =  basename($pdf,'.'.$info['extension']);
echo $file_name;
$pdf = "filename.pdf[0]";
exec("convert $pdf convert-img/$file_name.jpg");    
?>

Ngoài ra, bạn có thể được sử dụng class imagicktrong lớp Imagick PHP

Cảm ơn tất cả đã giúp tôi!


2

Nghĩ khác, bạn có thể sử dụng thư viện sau để chuyển đổi pdf thành hình ảnh bằng cách sử dụng javascript

http://usiouslyangle.com/post/24/pdf-to-jpeg-png-with-pdfjs


Nếu tôi muốn hiển thị hình ảnh xem trước trong máy chủ, làm thế nào chúng ta có thể sử dụng nó?
chithra

Bạn có thể muốn xem cái này: github.com/scandel/pdfThumbnails . Tôi nghĩ rằng bạn có thể tải lên hình thu nhỏ hình ảnh được tạo ở đây cùng với tệp thực tế và lưu nó, bằng cách này bạn sẽ tiết kiệm được nhiều thời gian tính toán hơn trên máy chủ của mình (vì quá trình thu nhỏ được thực hiện trong máy tính phía máy khách).
sajed zarrinpour

1

Đây là một lớp đơn giản tôi đã viết và sử dụng cho một vài dự án. Nó chỉ kết thúc tốt đẹp imagickvà xử lý việc viết từng trang ra đĩa. Nếu bất cứ ai vẫn đang tìm kiếm một cách dễ dàng để làm điều này, liên kết này có thể hữu ích.


2
Câu trả lời chỉ liên kết có giá trị thấp trên StackOverflow vì nếu liên kết di chuyển hoặc chết, câu trả lời được hiển thị hoàn toàn vô dụng. Để cải thiện câu trả lời của bạn, phần lớn giải pháp của bạn nên được mã hóa cứng ở đây.
mickmackusa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.