如何将 ghostscript pdf 转换为 png 的评论保留下来?

How to keep comments in a ghostscript pdf conversion to png?

我正在将 PDF 页面转换为图像,并且工作正常,我遇到的问题是它遗漏了 PDF 页面上的评论或注释。

当我使用 TIFF 格式时,它会保留它们,但当我输出为 PNG 时,它会删除它们。

如何保存它们?

这是我用来转换 PDF 的代码:


function Convert-pdf {

    param (
        $PDF_Output, # Output path where converted PDF files will be stored
        $path_to_pdf,
        $PNG_Output  # Output path where the PNG files will be saved
    )

  #Path to your Ghostscript EXE
  $tool = 'C:\Program Files\gs\gs9.55.0\bin\gswin64c.exe'
  $pdf = get-item $path_to_pdf
  $png = $PNG_Output + $pdf.BaseName + "%03d" + ".png"

  if(test-path $png)
  {
      "png file already exists " + $png
  }
  else
  {
      'Processing ' + $pdf.Name
      $param = "-sOutputFile=$png"
      & $tool -q -dNOPAUSE -sDEVICE=png256 $param -r300 $pdf.FullName -c quit
  }
  Move-Item $pdf $PDF_Output
  return $png
}

当我将 png256 更改为 tiff64nc 时,它会显示 PDF 上的注释,否则不会显示它们。

编辑:我使用的是 GS 版本 9.55.0

这是我通过代码输入的 pdf 的示例图像:

这是我得到的输出:

如果你想自己测试,这里是文件:

Link to PDF

在回答您的问题时,您发现 Artifex GhostScript 不会打印这些注释,但是它们可以在 Artifex MuPDF 中查看。

奇怪的是,您可以通过 Artifex Mutool 转换 pdf 文件。最快的方法是直接转换为 PNG:-

mutool convert -O resolution=300,colorspace=rgb -o output-rgb.png "69846382 annots not printing in GS png.pdf"

注意 colorspace=rgb 不限于 256 色。在您的情况下,有或没有该选项,源 5 种颜色的输出取决于其他因素,但您的文件默认为 1238 AA 颜色。

我们可以使用较短的绘制命令得到类似的结果,如果不相同的话

mutool draw -o output-rgb.png  -r 300 -c rgb "69846382 annots not printing in GS png.pdf"

我尝试了几十个选项来使用 mutool 以 GS 用来输出 256 色(和注释)的 pdf 格式重建 pdf,但取得了不同程度的成功,(尽管我有一些不错的选择,如 SVG)。您可以尝试不同的转换路径和选项,但此处的结果似乎非常相似。

如果您确实需要 256 种颜色,您可以将 png 回馈到 pdf 中,然后将其提交给 GS,以便我们获得您想要的最大 256 种颜色(在本例中为 101 种颜色),但稍后会看到更短的选项。

所以总共要获得 256 种最大颜色,您需要 3 行使用 shell path\variables 并注意多页 %d 值。

mutool draw -o "out-draw.png"  -r 300 "69846382 annots not printing in GS png.pdf"
mutool draw -o "out-draw.pdf"  "out-draw.png"
gswin64c -o "GSout256.png" -sDEVICE=png256 -r300 "out-draw.pdf"

因为通用格式处理类似于 PS 图形,分两步使用它可以得到更快的结果。

mutool draw -o "out-draw.ps" -r 300 "69846382 annots not printing in GS png.pdf"
gswin64c -o "GSout256.png" -sDEVICE=png256 -r300 "out-draw.ps"

但是双图像输入输出过程的结果比预期的“波纹” , which I should have expected. Whichever method I used to improve the result it was not an even tone 因此我怀疑即使注释很好结果也不会等于预期,这不仅仅是 Ghostscript,我得到类似的结果保存为 MSpaint 的 256 色输出 等实际上它的颜色“抖动”。

我也尝试过将一个管道传输到另一个管道但没有成功,因为 GS 应该输入管道数据,而 MuTool 可以输出到管道,但是遇到了问题,很可能是由于我通过测试不同的调用破坏了 GS(小心不小心覆盖了 exe ) 我放弃了尝试,正如我们所见,在这种情况下似乎不值得追逐。

最后,我对 最安全 最短命令进行了试验,我们目前只剩下 mutool 1023 种颜色,需要另一个命令行工具才能将这些颜色降低到每像素 8 位颜色。

mutool draw -o"out.png" -r 300 "69846382 annots not printing in GS png.pdf"
irfanview / gimp / other image converter

另一种方法是使用可以读取 pdf 并输出 8 bpp 而无需抖动的图形包,结果很像这样尝试右键单击下载