tags:

views:

1138

answers:

4

Currently i can create PDF files from images in Imagick with this function

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

And it's possible to fetch multiple pages with imagick like this

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

But is it possible to save two image objects to two pages? (example of what i am thinking, its not possible like this)

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

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

Is this working?

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

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

exec("convert file*.pdf all.pdf");
schnaader
This returns a Segmentation fault. Nice try though :S
Ólafur Waage
convert file1.pdf file2.pdf all.pdf also does not work
Ólafur Waage
A: 

I do not know php or this Imagick library, but if calling an external program is acceptable I can recommend the program pdfjoin to merge pdf files.

It does have an dependency to pdflatex, so if this is something you intend to run on a server you might have to install extra latex stuff but the end result from pdfjoin very good, so I think it will be worth it.

hlovdal
+1  A: 

CAM::PDF is a pure-Perl solution for low-level PDF manipulation like this. You can either use the appendpdf.pl command-line tool, or do it programmatically like this:

use CAM::PDF; my $doc1 = CAM::PDF->new('file1.pdf'); my $doc2 = CAM::PDF->new('file2.pdf'); $doc1->appendPDF($doc2); $doc1->cleanoutput('out.pdf');

If you can figure out how to make ImageMagick write to a string instead of to a file (I'm not an ImageMagick expert...) then you save some performance overhead by keeping it all in Perl.

(I'm the author of CAM::PDF. It's free software: GPL+Artistic dual-licensed).

Chris Dolan
+1  A: 

I know this is long past due, but this result came up when I was trying to do the same thing. Here is how you create a multi-page PDF file in PHP and 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!');
}
Mitch C