Создание двух страниц PDF с Imagick - PullRequest
5 голосов
/ 13 февраля 2009

В настоящее время я могу создавать PDF-файлы из изображений в Imagick с помощью этой функции

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

И с помощью imagick можно получить несколько страниц, например:

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

Но возможно ли сохранить два объекта изображения на двух страницах? (пример того, о чем я думаю, это невозможно, как это)

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

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

Ответы [ 5 ]

13 голосов
/ 06 февраля 2010

Я знаю, что это давно просрочено, но этот результат появился, когда я пытался сделать то же самое. Вот как вы создаете многостраничный PDF-файл на PHP и 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!');
}
2 голосов
/ 13 июня 2013

Принятый ответ не работал для меня, в результате он всегда генерировал одну страницу pdf (последнее изображение из конструктора), чтобы сделать эту работу, мне сначала нужно было получить дескриптор файла, например:

$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);
1 голос
/ 15 февраля 2009

CAM :: PDF - это решение на чистом Perl для низкоуровневых манипуляций с PDF, подобное этому. Вы можете либо использовать инструмент командной строки appendpdf.pl , либо сделать это программно следующим образом:

использовать CAM :: PDF; my $ doc1 = CAM :: PDF-> new ('file1.pdf'); my $ doc2 = CAM :: PDF-> new ('file2.pdf'); $ Doc1-> appendPDF ($ doc2); $ Doc1-> cleanoutput ( 'out.pdf');

Если вы можете понять, как заставить ImageMagick записывать в строку, а не в файл (я не специалист по ImageMagick ...), тогда вы сэкономите некоторые издержки производительности, сохранив все это в Perl.

(я автор CAM :: PDF. Это бесплатное программное обеспечение: GPL + Artistic с двойной лицензией).

1 голос
/ 13 февраля 2009

Это работает?

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

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

exec("convert file*.pdf all.pdf");
0 голосов
/ 14 февраля 2009

Я не знаю php или эту библиотеку Imagick, но если вызов внешней программы приемлем, я могу порекомендовать программу pdfjoin для объединения PDF-файлов.

У него есть зависимость от pdflatex, поэтому, если вы собираетесь запустить его на сервере, вам, возможно, придется установить дополнительные компоненты из латекса, но конечный результат от pdfjoin очень хороший, поэтому я думаю, что он того стоит .

...