![](/img/trans.png)
[英]Merge PDFs in Ghostscript with Python list of UNC Paths
[英]Converting RGB PDFs to CMYK PDFs via GhostScript CLI / Python (quality problem)
我正在尝试使用 python 脚本实现以下目标:
我的问题是将 RGB PDF 转换为 CMYK PDF。 带有 15MB 照片的 SVG 将导出为 15MB RGB PDF,然后转换(使用 GhostScript)为 3MB CMYK ZBCD1B68617759B1DFCFF0403A6ZB5。 尝试 ImageMagic 时,output PDF 的分辨率由密度决定,我在设置密度时找不到如何保持 PDF 的 canvas 大小。
到目前为止,我有一个脚本可以读取 SVG 文件并进行一些操作(使用 svgutils 添加徽标,通过扫描 SVG 文本文件来更改一些文本)。 然后它使用 Inkscape 导出网络就绪的 PDF(使用“--export-area-page”并将文本转换为路径)和临时 PDF(使用“--export-margin=X”,其中 X 是出血大小,还将文本转换为路径)。 临时的 PDF 是我需要的,除了它是 RGB 而不是 CMYK。 所以,然后我想转换这个文件(Inkscape 不适用于 CMYK)。
这是我用来转换文件的 function(它是用 GhostScript 设置的,我也在试用 ImageMagick):
converter_program = "GHOSTSCRIPT"
def convertPDFtoPrintReadyPDF(pdf_in, new_filename=None, output_location=None):
global converter_program
if (new_filename == None):
new_filename = os.path.basename(pdf_in).replace(".svg", ".pdf")
if (output_location == None):
output_location = os.path.dirname(pdf_in)
output_file = output_location + "\\" + new_filename
argument_list = []
if (converter_program == "GHOSTSCRIPT"):
pdf_tool_loc = r'"C:\Program Files\gs\gs9.55.0\bin\gswin64c.exe"' # Added "c" at end for non-window version (command line)
argument_list.append('-o "' + output_file + '"')
argument_list.append(r"-sDEVICE=pdfwrite")
argument_list.append(r"-dUseBleedBox")
argument_list.append(r"-dQUIET")
argument_list.append(r"-dPDFSETTINGS=/printer")
argument_list.append(r"-dCompressPages=false")
argument_list.append(r"-dMaxInlineImageSize=200000")
argument_list.append(r"-dDetectDuplicateImages")
#argument_list.append(r"-dJPEGQ=100")
argument_list.append(r"-dAutoFilterColorImages=false")
argument_list.append(r"-dAutoFilterGrayImages=false")
#argument_list.append(r"-sCompression=Flate")
#breaks the code: argument_list.append(r"-sColorImageFilter=/Flate")
#argument_list.append(r"-r600")
argument_list.append(r"-dColorImageResolution=600")
argument_list.append(r"-dGrayImageResolution=300")
argument_list.append(r"-dMonoImageResolution=1200")
argument_list.append(r"-dDownsampleColorImages=false")
argument_list.append(r"-sProcessColorModel=DeviceCMYK")
argument_list.append(r"-sColorConversionStrategy=CMYK")
argument_list.append(r"-sColorConversionStrategyForImages=CMYK")
argument_list.append('"' + pdf_in + '"')
elif (converter_program == "IMAGEMAGICK"):
pdf_tool_loc = 'magick'
argument_list.append(r'convert "' + pdf_in + '"')
argument_list.append(r"-density 300")
argument_list.append(r"-resize 100%")
argument_list.append(r"-colorspace CMYK")
argument_list.append('"' + output_file + '"')
#convert tp_rgb.pdf -verbose -density 300 -colorspace CMYK tp_cmyk.pdf
argument_string = " ".join(argument_list)
subprocess.run(pdf_tool_loc + " " + argument_string, shell=True, check=True)
return output_file
版本:
Python 3.8.10
鬼脚本 9.55.0
ImageMagick 7.1.0-16
我发现了一些 GhostScript 参数可以添加到转换过程中:
argument_list.append(r"-dAutoFilterColorImages=false")
argument_list.append(r"-dAutoFilterGrayImages=false")
argument_list.append(r"-dColorImageFilter=/FlateEncode")
argument_list.append(r"-dGrayImageFilter=/FlateEncode")
argument_list.append(r"-dDownsampleMonoImages=false")
argument_list.append(r"-dDownsampleGrayImages=false")
因此,完整的参数列表如下所示:
argument_list.append('-o "' + output_file + '"')
argument_list.append(r"-sDEVICE=pdfwrite")
argument_list.append(r"-dUseBleedBox")
argument_list.append(r"-dQUIET")
argument_list.append(r"-dDetectDuplicateImages")
argument_list.append(r"-dAutoFilterColorImages=false")
argument_list.append(r"-dAutoFilterGrayImages=false")
argument_list.append(r"-dColorImageFilter=/FlateEncode")
argument_list.append(r"-dGrayImageFilter=/FlateEncode")
argument_list.append(r"-dDownsampleMonoImages=false")
argument_list.append(r"-dDownsampleGrayImages=false")
argument_list.append(r"-dColorImageResolution=300")
argument_list.append(r"-dGrayImageResolution=300")
argument_list.append(r"-sProcessColorModel=DeviceCMYK")
argument_list.append(r"-sColorConversionStrategy=CMYK")
argument_list.append(r"-sColorConversionStrategyForImages=CMYK")
argument_list.append('"' + pdf_in + '"')
这将 15MB->3MB 转换为 15MB->53MB。 它仍然需要一些调整,但现在正处于正确的轨道上(如果我得到更好的过程,我会更新这个答案)。
由于这篇文章,我找到了信息: http://zeroset.mnim.org/2014/07/14/save-a-pdf-to-cmyk-with-inkscape/
文档在这里(不要忘记删除要搜索的前导字母(“dColorImageFilter”到“ColorImageFilter”): https://www.ghostscript.com/doc/current/VectorDevices.htm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.