Como faço para converter um documento PDF em uma imagem de visualização em PHP? [fechadas]


199

Quais bibliotecas, extensões etc. seriam necessárias para renderizar uma parte de um documento PDF em um arquivo de imagem?

A maioria das bibliotecas PDF PHP que encontrei se concentra na criação de documentos PDF, mas existe uma maneira simples de renderizar um documento para um formato de imagem adequado para uso na Web?

Nosso ambiente é uma pilha LAMP.


Eu adoraria poder fazer isso e ter o arquivo com uma .jpgextensão. Eu tentei o método .htaccess AddHandler e não funcionou.
Keyslinger

Respostas:


228

Você precisa ImageMagickeGhostScript

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

Os [0]meios page 1.


11
sim funciona Você também pode fazer: $ im-> setResolution (300, 300), por exemplo, para renderizar seu pdf na resolução desejada.
Luis Melgratti

6
Eu não tentei, mas se você estiver usando o Google Docs e não se importa com o iFrame, esta sugestão pode funcionar (também é um plugin wp) forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6
David Hobs,

4
mas como incluir ImageMagick e GhostScript no arquivo php
namratha 29/11

1
@ think123 use $im->thumbnailImage(1500, 0);Isso definirá sua imagem jpg para uma largura de 1500 e manterá a escala. Veja a documentação
Kevin Jantzer

1
Da minha resposta abaixo - Se você está carregando o PDF de um blob, é assim que você obtém a primeira página, e não a última: $ im-> readimageblob ($ blob); $ im-> setiteratorindex (0);
Jrjohnson 17/07/2014

34

Para aqueles que não têm o ImageMagick por qualquer motivo, as funções GD também funcionarão em conjunto com o GhostScript. Execute o comando ghostscript com exec()para converter um PDF em JPG e manipule o arquivo resultante com imagecreatefromjpeg().

Execute o comando ghostscript:

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

Para manipular, crie uma nova imagem de espaço reservado $newimage = imagecreatetruecolor(...)e traga a imagem atual. $image = imagecreatefromjpeg('whatever.jpg')e, em seguida, você pode usar imagecopyresampled()para alterar o tamanho ou qualquer número de outros imagemagickcomandos não internos


3
Para obter apenas uma imagem da primeira página, adicione as opções -dFirstPage = 1 -dLastPage = 1 ao comando.
Tim Dearborn

Se ainda não estiver funcionando, pode ser necessário fornecer o caminho completo para o gsbinário.
craned

Parece que está executando um comando do sistema. E se o usuário enviar um arquivo com o nome something;rm -rf /?
IProgram

Se eu quiser que toda a página do pdf seja convertida em imagem. então como fazer?
Dhara

31

Você também pode obter a contagem de páginas usando

$im->getNumberImages();

Então você pode criar miniaturas de todas as páginas usando um loop, por exemplo.

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

34
(Isso deve realmente ser um comentário sobre a resposta de Paolo Bergantino)
Simon Médio

resposta inteligente. não é dado por outro, mas você percebe e escreveu.
Ashu Kumar

16

Use a extensão php Imagick . Para controlar o tamanho desejado da imagem de saída raster, use a função 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;
?>

(Extensão sobre Paolo Bergantino, sua resposta, e Luis Melgratti, seu comentário. Você precisa definir a resolução antes de carregar a imagem.)


11

Se você estiver carregando o PDF a partir de um blob, é assim que você obtém a primeira página em vez da última página:

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

10
(Na verdade, isso deve ser um comentário sobre a resposta de Paolo Bergantino)
Simon East

9

Você também pode tentar executar o utilitário 'converter' que acompanha o imagemagick.

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

3
Em vez de pdf_doc.pdf, pdf_doc.pdf [0] é o preferido.
John Kurlak

O convert faz parte do pacote ImageMagick; tente sudo yum instale o ImageMagick
Jack Miller

Se ainda não estiver funcionando, pode ser necessário fornecer o caminho completo para o convertbinário.
craned 29/01

1
echo 'image-0.jpg';retorna uma string.
suz

trabalhou para mim, graças
Isabella

4

Eu sou o autor do PDFlib, que é um wrapper GhostScript para php, a vantagem de usar esta biblioteca é que ela já foi testada e não requerImageMagic

Sempre os GhostScriptcomandos são mais rápidos do que ImageMagicquando se trata de pdf, portanto, você deve optar por um wrapper GhostScript ou comandos puros do GhostScript

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

Olá, estou usando seu PDFlib para criar PNGs a partir de PDFs. $ pdflib = novo 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 (); O PDFlib tem uma opção para definir a largura e a altura dos arquivos PNG criados?
WGS

Olá, o PDFLib não fornece métodos para manipular imagens, mas você pode fazer assim. uma vez que você gerou os pngs usando PDFlib você pode usar outro libraray manipulação de imagem como github.com/Treinetic/ImageArtist para fazer o seu trabalho ...
IMAL hasaranga perera

por favor, tente o método acima sugerido, mas se você ainda estiver com problemas, envie-me um e-mail para imal@treinetic.com e eu ajudarei você com um código de exemplo ... Saúde !!
Imal hasaranga perera # 8/18

Vou tentar. Obrigado pela sugestão.
WGS

3

Eu instalo terminado! Funcionou!

Você pode instalar o imagemagick no Windows.

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

Além disso, você pode ser usado class imagickna classe PHP Imagick

Obrigado a todos me ajudaram!


2

Pense de maneira diferente, você pode usar a seguinte biblioteca para converter pdf em imagem usando javascript

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


Se eu quiser exibir a imagem de visualização no servidor, como podemos usá-la?
Chithra

Você pode dar uma olhada nisto: github.com/scandel/pdfThumbnails . Eu acho que você pode fazer upload da miniatura da imagem gerada aqui ao lado do arquivo real e salvá-la, dessa forma você economizará mais tempo computacional no servidor (desde que o processo de miniaturas tenha sido feito em um computador do lado do cliente).
você precisa saber é o seguinte

1

Aqui está uma classe simples que eu escrevi e usei em alguns projetos. Apenas envolve imagicke lida com a gravação de cada página no disco. Se alguém ainda estiver procurando uma maneira fácil de fazer isso, esse link poderá ser útil.


2
As respostas somente de link são de baixo valor no StackOverflow porque, se o link se move ou morre, a resposta é totalmente inútil. Para melhorar sua resposta, a maior parte da sua solução deve ser codificada aqui.
Mckmackusa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.