我的任务是使用 Windows 操作系统和 Python 打印 PDF 文件。因此,当我通过 HP 打印机打印时,我会得到该 PDF 的精确副本,但背景为灰色。
PyFPDF
库生成 PDF。效果很好。这是PDF 文件的输出。如果我通过 Adobe Acrobat Reader 打印,则没有灰色背景。但是当我使用ghostscript
打印时,它带有灰色背景。
import subprocess
import win32print
generated_pdf_name = 'some_pdf_name.pdf'
current_printer = win32print.GetDefaultPrinter()
query = f'{os.path.join("GHOSTSCRIPT", "bin", "gswin64c.exe")} -dPrinted -dBATCH -dNOPAUSE -dFitPage -q -dNumCopies=1 -dNoCancel -sDEVICE=mswinpr2 -dDeviceGrayToK=false -sOutputFile="%printer%{current_printer}" "{os.path.join(generated_pdf_name)}"'
subprocess.call(query, shell=True)
这里我使用了MS Windows打印机,所以
-sDEVICE=mswinpr2
。我也尝试过gsprint
。但它不显示我的 PDF 文件中的图像。所以我就搬进了ghostscript
。它打印了这个 PDF 文件的所有内容,但唯一的问题是灰色背景。
看看灰色彩色打印输出,我需要没有灰色背景的纯输出。我错过了上面的任何内容吗?
看起来您的“PDF 文件”只不过是扫描图像,但由于您没有提供实际的 PDF 文件,因此无法判断。
我的猜测(在没有看到原始 PDF 的情况下只能这样)是整个内容都是图像,并且“白色背景”并不是真正的白色,而是“接近白色”。
mswinpr2 设备的工作原理是将 PDF 文件渲染为位图,然后将该位图发送到打印机(Acrobat Reader 的工作方式完全不同)。我猜想将“不完全白色”渲染为 RGB 会使其变得更白,这会导致背景变得稍微更灰色,以至于在打印时,它明显是灰色的。
本质上有两种选择;您可以修复原始 PDF 文件,使背景真正为白色,或者您可以使用不同的 ICC 配置文件进行渲染,这将导致背景渲染不同的颜色。
Ghostscript 文档中介绍了使用不同的 ICC 配置文件。