【问题标题】:Merging PDF's using Ghostscript outputs as grayscale / loses color将使用 Ghostscript 输出的 PDF 合并为灰度/失去颜色
【发布时间】:2018-04-26 23:08:35
【问题描述】:

我有一个脚本,它采用 base64 字符串并将其转换为 png 图像。然后我使用 Imagick 将 png 转换为使用 Adob​​eRGB1998 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 而不是 imagick 来合并 pdf。 Imagick 返回了一个合并的彩色 pdf,但似乎达到了一个限制,即有多少 PDF 的 imagick 能够一次合并。 Ghostscript 对于合并多少 PDF 没有任何问题或限制,因此我想继续使用这种方法而不是 Imagick,但是我需要解决 PDF 以灰度而不是彩色输出的问题。有人可以帮忙吗?

谢谢!

【问题讨论】:

    标签: php ghostscript imagick


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-17
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多