Como converter PDF em imagens utilizando ghostscript
01/08/2013 - Escrito por: Felipe Mitamura Hatanaka
Neste atrigo vou mostrar como converter um PDF em imagens jpg, bmp, png, entre outros (mais de 100 formatos), on-line. Para isso utilizamos o programa UNIX Ghostscript, lembrando que é necessário ter a extensão ImageMagick do PHP. ImageMagick é um software para criar, editar e compor imagens que possui a licensa LLC. O processo de instalação não é assunto deste artigo. O Ghost Script converte o pdf gerando um arquivo de imagem por página.
O Ghostscript é utilizado com o comando gs (gswin32, gswin32c, gs386, gsos2), que é um interpretador de PostScript e Portable Document Format (PDF). O comando gs lê arquivos em sequência, página por página, podendo gerar assim as imagens relativas as páginas.
A seguir o código (pdf.php) para fazer a conversão, em que $exportPath é o caminho de saída, dJPEGQ é a qualidade da imagem e $pdf é o nome do arquivo PDF.
exec("'gs' '-dNOPAUSE' '-sDEVICE=jpeg' '-dUseCIEColor' '-dTextAlphaBits=4' '-dGraphicsAlphaBits=4' '-o$exportPath' '-r$res' '-dJPEGQ=90' '$pdf'",'');
Abaixo um código de exemplo para você seguirem:
function ExcluiDir($Dir){ if ($dd = opendir($Dir)) { while (false !== ($Arq = readdir($dd))) { if($Arq != "." && $Arq != ".."){ $Path = "$Dir/$Arq"; if(is_dir($Path)){ ExcluiDir($Path); }elseif(is_file($Path)){ unlink($Path); } } } closedir($dd); } rmdir($Dir); } ini_set('display_errors', 1); if(isset($_POST['pagina'])) { if($_FILES['arquivo']["name"] != "" ) { if($_FILES['arquivo']["error"] == UPLOAD_ERR_OK) { if( preg_match('@\.(pdf)$@i', $_FILES['arquivo']['name'], $reg) ) { $pdf = $_FILES['arquivo']["name"]; $tmpfile = $_FILES['arquivo']["tmp_name"]; if (move_uploaded_file($tmpfile, $pdf)) { $exportPath=realpath(dirname(__FILE__))."/paginas/%01d.bmp"; ExcluiDir(realpath(dirname(__FILE__))."/paginas"); mkdir(realpath(dirname(__FILE__))."/paginas"); set_time_limit(900); exec("'gs' '-dNOPAUSE' '-sDEVICE=jpeg' '-dUseCIEColor' '-dTextAlphaBits=4' '-dGraphicsAlphaBits=4' '-o$exportPath' '-r$res' '-dJPEGQ=100' '$pdf'",''); } else { echo 'erro'; } } } } } }
E o codigo html para fazer upload do pdf.
Veja como funciona, envie um PDF com menos de 1 MB e irei mostrar apenas as 3 primeiras páginas (foi estipulado este tamanho de arquivo e quantidade de páginas apenas para não sobrecarregar meu servidor, mas o código acima não restringe o tamanho do PDF):