好友
阅读权限10
听众
最后登录1970-1-1
|
请教各位大神:python使用PDF静默打印
试过很多方法了,一般都是基于第三方库和第三方工具,
痛点:
1.第三方库,存在收费,可以打印。
2.第三方工具,无法内嵌自己的项目。
有没有不依赖第三方工具或者收费库的免费打印的方式??
方法一:使用win32print库与win32api库报错
报错内容如下:
Traceback (most recent call last):
win32api.ShellExecute(0, "print", file_path, None, ".", 0)
pywintypes.error: (31, 'ShellExecute', '连到系统上的设备没有发挥作用。')
源代码如下:
import win32print
import win32api
import os
def print_pdf(file_path, printer_name=None):
# 如果未指定打印机,则使用默认打印机
if printer_name is None:
printer_name = win32print.GetDefaultPrinter()
# 打印属性,此处为默认设置
printer_attribs = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
# 打开打印机
h_printer = win32print.OpenPrinter(printer_name, printer_attribs)
# 获取文档属性
doc_info = (os.path.basename(file_path), None, None)
# 开始打印任务
job_id = win32print.StartDocPrinter(h_printer, 1, doc_info)
# 开始打印任务的一个页面
win32api.ShellExecute(0, "print", file_path, None, ".", 0)
# 结束打印任务
win32print.EndDocPrinter(h_printer)
# 使用示例
file_path = "PDFFILE\\CRYSTAL_BUNDLE_NO.pdf"
print_pdf(file_path)
方法二:使用外部工具gsprint与gswin64c,可以静默打印但依赖外部工具,对于项目而言不合理,
import win32api
import win32print
def print_pdf_with_gsprint(pdf_file_name, printer_name, gsprint_path, ghostscript_path):
win32api.ShellExecute(
0,
'open',
gsprint_path,
f'-ghostscript "{ghostscript_path}" -printer "{printer_name}" -dPDFFitPage "{pdf_file_name}"',
'.',
0
)
# 使用示例
pdf_path = r"PDFFILE\CRYSTAL_BUNDLE_NO.pdf" # 使用原始字符串,替换为你的PDF文件路径
printer_name = "FUJI XEROX DocuPrint CM315/318 z" # 打印机名称
gsprint_path = "gsprint.exe" # 替换为你的Gsprint的实际路径
ghostscript_path = "gswin64c.exe" # 替换为你的Ghostscript的实际路径
print_pdf_with_gsprint(pdf_path, printer_name, gsprint_path, ghostscript_path)
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|