2009-01-22 94 views
176

將PDF文檔的一部分渲染爲圖像文件需要哪些庫,擴展等?如何將PDF文檔轉換爲PHP中的預覽圖像?

我發現的大多數PHP PDF庫都是以創建PDF文檔爲中心的,但是有沒有一種簡單的方法將文檔呈現爲適合網頁使用的圖像格式?

我們的環境是LAMP堆棧。

+0

我希望能夠做到這一點,有一個文件有`.jpg`擴展。我試過.htaccess的AddHandler方法,但它不起作用。 – Keyslinger 2016-05-18 20:11:44

回答

200

你需要ImageMagickGhostScript

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

[0]意味着page 1

+10

是的,它的工作原理。你也可以這樣做:$ im-> setResolution(300,300),例如以你想要的分辨率渲染你的pdf。 – 2009-01-22 02:16:46

+6

我還沒有嘗試過,但如果你使用的是谷歌文檔,不介意iFrame,這個建議可能會起作用(這也是一個wp插件)https://forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6 – 2012-09-05 01:27:24

+3

但如何將ImageMagick和GhostScript包含在php文件中 – namratha 2013-11-29 06:41:47

28

您也可以使用

$im->getNumberImages(); 

然後,您可以創建可以使用循環,如所有頁面的縮圖頁數。

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

對於那些沒有任何原因的ImageMagick,GD函數也可以與GhostScript結合使用。使用exec()運行ghostscript命令將PDF轉換爲JPG,然後使用imagecreatefromjpeg()處理生成的文件。

運行的ghostscript命令:

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

要操作,創建一個新的佔位符圖像,$newimage = imagecreatetruecolor(...),並在當前圖像中帶來的。 $image = imagecreatefromjpeg('whatever.jpg'),然後你可以使用imagecopyresampled()改變大小,或任意數量的其他內置,非imagemagick命令

11

如果你正在加載從BLOB PDF的你這是怎麼得到的第一個頁面,而不是最後一頁:

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

我安裝完了!它的工作!

你可能會在windows上做基地install imagemagick

php (local)使用呼叫exec(<command line>) 例如:

<?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");  
?> 

此外,你可能會使用class imagickPHP Imagick class

感謝所有幫助過我!

1

這是一個簡單的課,我已經寫了幾個項目使用。它只是包裝imagick並處理每個頁面寫入磁盤。如果有人仍然在尋找一個簡單的方法來做到這一點,this link可能會有所幫助。

8

你也可以嘗試執行imagemagick附帶的'convert'工具。

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

使用php擴展Imagick。 要控制光柵輸出圖像所需的大小,使用setResolution function

<?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; 
?> 

(在保羅Bergantino他的回答和路易斯Melgratti他的評論擴展。你需要在載入圖像之前設置的分辨率。)

3

我的PDFlib筆者這是一個GhostScript包裝爲PHP,利用使用這個庫的是,它已經測試,它不需要ImageMagic

始終GhostScript命令比快,當涉及到PDF格式,所以你要麼去一個GhostScript的包裝或純GhostScript的命令

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