2009-02-13 13 views
5

Actualmente puedo crear archivos PDF a partir de imágenes en Imagick con esta funciónla creación de dos páginas en PDF con Imagick

$im->setImageFormat("pdf"); 
$im->writeImage("file.pdf"); 

Y es posible acceder a varias páginas con imagick como esto

$im = new imagick("file.pdf[0]"); 
$im2 = new imagick("file.pdf[1]"); 

Pero es posible guardar dos objetos de imagen en dos páginas? (ejemplo de lo que estoy pensando, no es posible como esto)

$im->setImageFormat("pdf"); 
$im->writeImage("file.pdf[0]"); 

$im2->setImageFormat("pdf"); 
$im2->writeImage("file.pdf[1]"); 

Respuesta

13

Sé que esto ya se ha retrasado, pero este resultado surgió cuando intentaba hacer lo mismo. Aquí es cómo se crea un archivo PDF de varias páginas en PHP e Imagick.

$images = array(
    'page_1.png', 
    'page_2.png' 
); 
$pdf = new Imagick($images); 
$pdf->setImageFormat('pdf'); 
if (!$pdf->writeImages('combined.pdf', true)) { 
    die('Could not write!'); 
} 
+1

¿Hay alguna manera de hacer esto a partir de los blobs de imagen (a diferencia de los archivos de imagen)? – dicroce

+0

Esto creará una sola página pdf usando la última imagen en la matriz –

1

¿Este trabajo?

$im->setImageFormat("pdf"); 
$im->writeImage("file1.pdf"); 

$im2->setImageFormat("pdf"); 
$im2->writeImage("file2.pdf"); 

exec("convert file*.pdf all.pdf"); 
+0

Esto devuelve un error de segmentación. Buen intento, sin embargo: S –

+0

convertir archivo1.pdf archivo2.pdf all.pdf tampoco funciona –

0

no sé php o Imagick esta biblioteca, pero si llamar a un programa externo es aceptable que puedo recomendar el programa pdfjoin para combinar archivos PDF.

Tiene una dependencia de pdflatex, así que si esto es algo que pretendes ejecutar en un servidor, es posible que tengas que instalar material adicional de látex, pero el resultado final de pdfjoin es muy bueno, así que creo que valdrá la pena eso.

1

CAM::PDF es una solución pura de Perl para la manipulación de PDF de bajo nivel como esta. Puede usar la herramienta de línea de comandos appendpdf.pl, o hacerlo programáticamente de la siguiente manera:

use CAM :: PDF; my $ doc1 = CAM :: PDF-> nuevo ('archivo1.pdf'); my $ doc2 = CAM :: PDF-> nuevo ('archivo2.pdf'); $ doc1-> appendPDF ($ doc2); $ doc1-> cleanoutput ('out.pdf');

Si puede averiguar cómo hacer que ImageMagick escriba en una cadena en lugar de hacerlo en un archivo (no soy un experto en ImageMagick ...), entonces guardará un poco el rendimiento manteniéndolo todo en Perl.

(Soy el autor de CAM :: PDF. Es software libre: GPL + Artística con doble licencia).

1

respuesta aceptada no funcionaba para mí, como resultado, siempre se genera una página PDF (última imagen del constructor), para hacer este trabajo que tenía que conseguir descriptor de archivo en primer lugar, como este:

$images = array(
    'img1.png', 'img2.png' 
); 
$fp = fopen('combined.pdf', 'w'); 
$pdf = new Imagick($images); 
$pdf->resetiterator(); 
$pdf->setimageformat('pdf'); 
$pdf->writeimagesfile($fp); 
fclose($fp); 
Cuestiones relacionadas