由于工作需求,需要按照固定顺序打印大量的PDF文件.
第一时间想到的就是用Python的模块来解决.查阅了大量的文章之后,开始了我的测试之旅…
一.第一种方案.ghostscript与gsprint打印.代码如下:
def print_pdf(x):
GHOSTSCRIPT_PATH = r'C:\workC\gs9.54.0\bin\gswin64c.exe'
GSPRINT_PATH = r'C:\workC\Ghostgum\gsview\gsprint.exe'
# YOU CAN PUT HERE THE NAME OF YOUR SPECIFIC PRINTER INSTEAD OF DEFAULT
currentprinter = win32print.GetDefaultPrinter()
print(x)
win32api.ShellExecute(
'open', \
GSPRINT_PATH, \
'-ghostscript \
"' + GHOSTSCRIPT_PATH + '" \
-printer \
"' + currentprinter + '" \
"'+ x +'" ', \
'.', \
x:是需要打印PDF的绝对路径
需要安装ghostscript以及gsprint.
查找了很多个地方才发现gsprint原来是gsview的一个组件.特此说明,大家避免被坑.
下载链接:
ghostscript:https://download.csdn.net/download/
由于工作需求,需要按照固定顺序打印大量的PDF文件.第一时间想到的就是用Python的模块来解决.查阅了大量的文章之后,开始了我的测试之旅…一.第一种方案.ghostscript与gsprint打印.代码如下:def print_pdf(x): GHOSTSCRIPT_PATH = r'C:\workC\gs9.54.0\bin\gswin64c.exe' GSPRINT_PATH = r'C:\workC\Ghostgum\gsview\gsprint.exe' # YOU
实现思路:导入相关工作模块->通过对话框形式选择待打印文件的文件夹->自定义打印机空闲检查函数和打印函数->依次取出文件夹中的文件并在打印机空闲时打印。
注意事项:此代码运行需要网络中有正常可用的打印机,运行时可以兼容文件大小差异很大的文件。
确保打印是按照顺序来的核心代码如下:
#定义检查函数,用于确保文件按照顺序打印
printer = win32print.GetDefaultPrinter()
handle=win32print.OpenPrinter(printer)
tasks=win32print.EnumJobs(handle,0,-1,1)#按顺序打印的核心
if tasks:#发现打印队列中有任务就持续sleep直到打印完成
#print("打印机中有任务阻塞,请稍等... ...")
time.sleep(2)
tasks=win32print.EnumJobs(handle,0,-1,1)
完整代码请下载附件查看。
def print_pdf(self, pdf_file_name):
"""
静默打印pdf
:param pdf_file_name:
:return:
"&
1. 相关介绍
Python 操作 PDF 会用到两个库,分别是:PyPDF2 和 pdfplumber
其中 PyPDF2 可以更好的读取、写入、分割、合并PDF文件,而 pdfplumber 可以更好的读取 PDF 文件中内容和提取 PDF 中的表格
对应的官网分别是:
由于这两个库都不是 Python 的标准库,所以在使用之前都需要单独安装
win+r 后输入 cmd 打开 command 窗口,依次输入如下命令进行安装:
pip install PyPDF2
pip install pdfplum
import win32print
printers=win32print.EnumPrinters(2)
#关于EnumPrinters中的一些参数获得不同的嵌套元组,获得打印机的具体信息
print(printers)
import tempfile
import win32api
import win32print
filena...
返回了一个:message信息?而这个message还不是后端给的。
最让人生气的是。打开浏览器控制台,居然可以看到401以及后端给的message!
在多方求助以后,发现。打印error是没有用的,这个时候,应该打印error.response
然后你想要的status和code以及dada里面的数据都有了
pdf_file_paths = [
r"C:\Users\username\Documents\file1.pdf",
r"C:\Users\username\Documents\file2.pdf",
r"C:\Users\username\Documents\file3.pdf"
# 设置打印参数
print_params = {
"Flags": win32print.PRINT_WAITFORCOMPLETION,
"DesiredAccess": win32print.PRINTER_ACCESS_USE,
"JobName": "Python Print Job"
# 打印PDF文件
for pdf_file_path in pdf_file_paths:
# 构造打印命令行
print_command = f'"{pdf_file_path}" /p /h /n "{printer_name}"'
# 执行打印命令行
os.system(print_command)
以上程序将默认打印机设置为系统默认打印机,如果需要打印到其他打印机,可以将`printer_name`变量设置为打印机名称。同时,程序会依次打印`pdf_file_paths`列表中的所有PDF文件,可以根据需要修改列表内容。程序使用`os.system`函数执行打印命令行,其中`/p`参数表示打印,`/h`参数表示隐藏打印窗口,`/n`参数表示指定打印机名称。最后,程序使用`win32print.PRINT_WAITFORCOMPLETION`参数等待打印完成,以确保程序不会在打印过程中退出。
调用本地打印机,打印PDF文件,要求:Python3.5+,仅支持win32平台,只支持PDF文件的打印
gswin64c.exe为Ghostscript打印程序安装后bin目录中的一个组件,下载地址:https://www.ghostscript.com/
:param cprinter: 调用的打印机
:param pdf: pdf文件的绝对路径
:return:
if sys.platform == 'win32':
args = [f"{os.path.dirname(__file__)}\\db\\gswin64c.exe",
'-sDEVICE=mswinpr2',
'-dBATCH',
'-dNOPAUSE',
'-dFitPage',
f'-sOutputFile="%printer%{cprinter}"',
f'"{pdf}"']
subprocess.run(args, encoding="utf-8", shell=True)
[/code]