2009-02-13 83 views
5

目前我可以创建从Imagick图像PDF文件使用此功能创建两个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]"); 

回答

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

这工作正常?

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

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

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

这将返回分段错误。很好,但尝试:S – 2009-02-13 13:17:21

+0

convert file1.pdf file2.pdf all.pdf也不起作用 – 2009-02-13 13:17:55

0

我不知道PHP或本Imagick库,但如果调用外部程序是可以接受的,我可以推荐节目pdfjoin合并PDF文件。

它确实对pdflatex有依赖性,所以如果这是你打算在服务器上运行的东西,你可能不得不安装额外的latex东西,但pdfjoin的最终结果是非常好的,所以我认为这将是值得的它。

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 +艺术双授权)。

1

接受的答案是不工作对我来说,作为一个结果,它总是产生一个页面的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);