¿Cómo convierto un documento PDF en una imagen de vista previa en PHP? [cerrado]


199

¿Qué bibliotecas, extensiones, etc. serían necesarias para representar una parte de un documento PDF en un archivo de imagen?

La mayoría de las bibliotecas PDF de PHP que he encontrado se centran en la creación de documentos PDF, pero ¿hay alguna manera simple de representar un documento en un formato de imagen adecuado para uso web?

Nuestro entorno es una pila LAMP.


Me encantaría poder hacer esto y que el archivo tenga una .jpgextensión. Intenté el método .htaccess AddHandler y no funcionó.
Keyslinger

Respuestas:


228

Necesitas ImageMagickyGhostScript

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

Los [0]medios page 1.


11
Si, funciona. También puede hacer: $ im-> setResolution (300, 300) por ejemplo para renderizar su pdf a la resolución deseada.
Luis Melgratti

66
No lo he probado, pero si está usando documentos de Google y no le importa el iFrame, esta sugerencia podría funcionar (también es un complemento de wp) forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6
David

44
pero cómo incluir ImageMagick y GhostScript en el archivo php
namratha

1
@ think123 use $im->thumbnailImage(1500, 0);Eso establecerá su imagen jpg en un ancho de 1500 y retendrá la escala. Ver documentación
Kevin Jantzer

1
De mi respuesta a continuación: si está cargando el PDF desde un blob, así es como obtiene la primera página en lugar de la última página: $ im-> readimageblob ($ blob); $ im-> setiteratorindex (0);
jrjohnson

34

Para aquellos que no tienen ImageMagick por cualquier razón, las funciones GD también funcionarán, junto con GhostScript. Ejecute el comando ghostscript con exec()para convertir un PDF a JPG y manipule el archivo resultante con imagecreatefromjpeg().

Ejecute el comando ghostscript:

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

Para manipular, cree una nueva imagen de marcador de posición $newimage = imagecreatetruecolor(...), y traiga la imagen actual. $image = imagecreatefromjpeg('whatever.jpg'), y luego puede usar imagecopyresampled()para cambiar el tamaño, o cualquier número de otros imagemagickcomandos no integrados


3
Para obtener una imagen de la primera página, agregue los modificadores -dFirstPage = 1 -dLastPage = 1 al comando.
Tim Dearborn

Si todavía no funciona, es posible que deba proporcionar la ruta completa al gsbinario.
Craned

Parece que está ejecutando un comando del sistema. ¿Qué pasa si el usuario sube un archivo llamado something;rm -rf /?
iProgram

Si quiero que toda la página del pdf se convierta en imagen. entonces como hacer?
Dhara

31

También puede obtener el recuento de páginas usando

$im->getNumberImages();

Luego puede crear los pulgares de todas las páginas usando un bucle, por ejemplo.

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

34
(Esto debería ser un comentario sobre la respuesta de Paolo Bergantino)
Simon East

respuesta inteligente. no dado por otro pero te das cuenta y escribiste.
Ashu Kumar

16

Utiliza la extensión php Imagick . Para controlar el tamaño deseado de la imagen de salida ráster, use la función 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;
?>

(Extensión sobre Paolo Bergantino su respuesta y Luis Melgratti su comentario. Debe establecer la resolución antes de cargar la imagen).


11

Si está cargando el PDF desde un blob, así es como obtiene la primera página en lugar de la última página:

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

10
(Esto debería ser un comentario sobre la respuesta de Paolo Bergantino)
Simon East

9

También puede intentar ejecutar la utilidad 'convertir' que viene con imagemagick.

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

3
En lugar de pdf_doc.pdf, se prefiere pdf_doc.pdf [0].
John Kurlak

convertir es parte del paquete ImageMagick; intente sudo yum instalar ImageMagick
Jack Miller

Si aún no funciona, es posible que deba proporcionar la ruta completa al convertbinario.
Craned

1
echo 'image-0.jpg';devuelve una cadena
suz

funcionó para mí, gracias
Isabella

4

Soy el autor de PDFlib, que es un contenedor de GhostScript para php, la ventaja de usar esta biblioteca es que ya está probado y no requiereImageMagic

Los GhostScriptcomandos siempre son más rápidos que ImageMagiccuando se trata de pdf, por lo que debe elegir un contenedor GhostScript o comandos GhostScript puros

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

Hola, estoy usando su PDFlib para crear PNG a partir de archivos PDF. $ pdflib = nuevo ImalH \ PDFLib \ PDFLib (); $ pdflib-> setPdfPath ($ pdf_file_path); $ pdflib-> setOutputPath ($ folder_path_for_images); $ pdflib-> setImageFormat (\ ImalH \ PDFLib \ PDFLib :: $ IMAGE_FORMAT_PNG); $ pdflib-> setDPI (100); $ pdflib-> setPageRange (1, $ pdflib-> getNumberOfPages ()); $ pdflib-> convert (); ¿PDFlib tiene una opción para establecer el ancho y alto de los archivos PNG creados?
WGS

Hola, no PDFLib no proporciona métodos para manipular imágenes, pero puede hacerlo así. una vez que generó los pngs usando PDFLib, puede usar otra biblioteca de manipulación de imágenes como github.com/Treinetic/ImageArtist para hacer su trabajo ...
imal hasaranga perera

intente el método anterior que sugerí, pero si aún tiene dificultades, envíeme un correo electrónico a imal@treinetic.com y lo ayudaré con un código de muestra ... ¡¡¡salud !!
imal hasaranga perera

Voy a intentarlo Gracias por la sugerencia.
WGS

3

Lo instalo terminado! Ha funcionado!

Puede hacer imagemagick de instalación base en Windows.

En php (local)uso llame 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");    
?>

Además, puedes usarlo class imagicken la clase PHP Imagick

Gracias a todos me ayudaron!


2

Piensa diferente, puedes usar la siguiente biblioteca para convertir pdf a imagen usando javascript

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


Si quiero mostrar la imagen de vista previa en el servidor, ¿cómo podemos usar eso?
chithra

Es posible que desee echar un vistazo a esto: github.com/scandel/pdfThumbnails . Creo que puede cargar la miniatura de la imagen generada aquí junto con el archivo real y guardarla, de esta manera ahorrará más tiempo computacional en su servidor (ya que el proceso de creación de miniaturas se realizó en una computadora del lado del cliente).
sajed zarrinpour

1

Aquí hay una clase simple que he escrito y usado en un par de proyectos. Simplemente envuelve imagicky maneja la escritura de cada página en el disco. Si alguien todavía está buscando una manera fácil de hacer esto, este enlace puede ser útil.


2
Las respuestas de solo enlace tienen un valor bajo en StackOverflow porque si el enlace se mueve o muere, la respuesta se vuelve absolutamente inútil. Para mejorar su respuesta, la mayor parte de su solución debe codificarse aquí.
mickmackusa
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.