我尝试使用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文件合并为一个的确切方法是什么?
答案 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一无所知,我无法告诉你如何纠正它。