使用Imagick创建两个pdf页面

时间:2009-02-13 12:53:17

标签: php pdf imagick

目前我可以使用此功能从Imagick中的图像创建PDF文件

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

并且可以像想象一样获取多个页面

$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 个答案:

答案 0 :(得分:13)

我知道这已经过去很久了,但是当我试图做同样的事情时,这个结果出现了。以下是如何使用PHP和Imagick创建多页PDF文件。

    $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 :(得分:2)

接受的答案对我不起作用,因此,它总是生成一页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);

答案 2 :(得分:1)

这有效吗?

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

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

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

答案 3 :(得分:1)

CAM::PDF是一种用于低级PDF操作的纯Perl解决方案。您可以使用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 +艺术双重许可)。

答案 4 :(得分:0)

我不知道php或这个Imagick库,但如果调用外部程序是可以接受的,我可以推荐程序pdfjoin来合并pdf文件。

它确实依赖于pdflatex,所以如果这是你打算在服务器上运行的东西,你可能需要安装额外的乳胶东西,但pdfjoin的最终结果是非常好的,所以我认为这是值得的