使用Ghostscript输出合并PDF作为灰度/丢失颜色

时间:2017-11-14 05:35:37

标签: php ghostscript imagick

我有一个脚本,它接受一个base64字符串并将其转换为png图像。然后我使用Imagick将png转换为使用AdobeRGB1998 icc配置文件的pdf。这一切都按预期工作,并创建一个颜色pdf。

$data = str_replace("data:image/png;base64,","",$_POST["rsa"]);
$save = $path.$_POST["pdfname"].".png";


$imagick = new Imagick();
$decoded = base64_decode($data);
$imagick->readimageblob($decoded);
$imagick->writeImage($save);
$imagick->clear();
$imagick->destroy(); 

    exec("convert $path.$_POST["pdfname"].".png -profile AdobeRGB1998.icc -density 300 ".$path.".$_POST["pdfname"].".pdf", $array);

然而,当我使用Ghostscript使用下面的代码将一堆这些PDF合并在一起时,它以灰度输出,我不知道为什么。

function getPDFs($e)
{
return $path.$e['pdffilename'].".pdf ";
}
$fileArray = array_map("getPDFs(", $_POST['item']);
$outputName = $path."LatestDispatch.pdf";
$cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$outputName ";
foreach($fileArray as $file) {
    $cmd .= $file." ";
}
$result = shell_exec($cmd);

我转而使用Ghostscript而不是想象来合并pdfs。 Imagick返回了一个合并的颜色pdf,但似乎有多少PDF的想象能够立刻合并。 Ghostscript对于它合并了多少PDF没有任何问题或限制,所以想继续使用这种方法而不是Imagick,但是我需要解决这个问题的PDF输出灰度,而不是颜色。有人可以帮忙吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

首先; Ghostscript不会“合并”PDF文件。当您将PDF文件列表作为输入呈现时,并使用pdfwrite设备输出单个PDF文件时,它不会“合并”PDF文件。

每个PDF文件都被完全解释为产生一系列标记操作,然后将这些操作传递给设备。对于渲染设备,它们呈现位图。对于PDF输出,它们将作为PDF等效操作发出。

因此输出PDF文件的内容与输入文件的内容无关。外观应该是相同的,但它不是'合并'。

你还没有说过你正在使用什么版本的Ghostscript,或者你从哪里获取它(或者你使用的是什么操作系统,但我想有点Linux的风格)。命令行没有明显的错误,但如果我是你,我会从不使用脚本开始。只需从shell手动使用Ghostscript即可看看会发生什么。如果这有效,而脚本没有,那么脚本有问题,而且你没有从shell中正确地模仿它。让脚本打印出精确的命令行,并尝试查看您在shell中输入的内容是否有所不同。

如果它的行为相同,那就令人费解。但是,如果没有一些例子可以看,我可以提出建议。