使用PHP Ghostscript将多个PDF文件合并为一个

时间:2016-08-24 15:24:34

标签: php pdf ghostscript

我尝试使用Ghostscript在我的服务器上合并多个PDF文件,代码如下:

$files = array(
        '1.pdf',
        '2.pdf',
        '3.pdf'
);

$output = 'single.pdf';

$cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$output ";

foreach($files as $file)
    $cmd .= "pdfs/$file ";

var_dump(shell_exec($cmd));

我使用的脚本位于根文件夹中,PDF文件位于名为 pdfs 的文件夹中:

/[pdfs]
|__ 1.pdf
|__ 2.pdf
|__ 3.pdf
script.php

文件夹和文件的权限均为777

但尽管如此,一切都没有发生,返回值为NULL

那么我做错了什么?使用Ghostscript将多个PDF文件合并为一个的确切方法是什么?

1 个答案:

答案 0 :(得分:0)

只是一个评论; Ghostscript执行'合并'PDF文件,它可以将多个PDF文件作为输入并创建一个全新的PDF文件,其视觉外观应与输入相同,但它不会合并PDF文件,输入被完全解释,新文件只有输入文件的外观。

那么,你确定Ghostscript工作正常吗? 您是否尝试过处理单个PDF文件? 它有效吗?

如果没有,则最可能的问题是您的$ PATH环境变量中没有包含Ghostscript可执行文件的目录(这是一个常见问题)。您可以通过在命令行中提供Ghostscript可执行文件的完全限定路径来测试这一点,而不是:

$cmd = "/usr/local/bin/gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$output ";

尝试类似:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=single.pdf 1.pdf
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=single.pdf 2.pdf
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=single.pdf 3.pdf

显然,您必须修改路径以匹配您的设置。如果可以,那么问题可能是目录不在$ PATH中,您可以添加它或只使用完整路径。

还有一个我无法帮助你的逻辑错误;

在我看来,你的'foreach'将为数组中的每个文件调用一次cmd。这意味着每个文件将通过调用Ghostscript进行处理。因此每个文件都会生成一个单独的PDF文件。由于它们都使用相同的OutputFile,因此它们将相互覆盖。

如果您希望使用所有文件的输入创建单个输出,则需要完全一次调用Ghostscript,而不是每个输入文件调用一次,并且命令行需要包含所有文件输入文件。

实质上你现在拥有的是:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=single.pdf 1.pdf 2.pdf 3.pdf

你想要的是:

something.outerHTML += '<input onclick="func()" id="button_id" ...>'

由于我对PHP一无所知,我无法告诉你如何纠正它。