本帖最后由 Simon.Sun 于 2024-10-25 16:32 编辑
无预览打印(静默打印)场景
- 无需人工干预,自动完成打印任务,定时打印、远程打印
- 静默打印方案在执行打印任务时不会显示任何信息,有效保护了用户的隐私和敏感信息
实现原理
- 将待打印的页面转成PDF文件
- 传递给打印接口,由打印接口调用打印机执行打印
打印接口
我这边是采用Python实现了一个接口,借助一个第三方打印组件来实现静默打印,第三方组件采用的 PDFtoPrinter.exe
完整的Python代码如下:
- # !/usr/bin/python3
- # -*- coding: utf-8 -*-
- # @Time : 2022-09-26 11:55
- # @Author : 吕小白
- # @Email : james.lv@grapecity.com
- import requests
- import datetime
- import subprocess
- import sys
- import flask
- from flask import request
- from flask_cors import CORS
- from PIL import Image
- import os
- api = flask.Flask(__name__)
- CORS(api, resources={r"/*": {"origins": "*"}})
- @api.route('/print', methods=['GET'])
- def pdf_printer():
- # 防止字符串乱码
- os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
- filepath = request.args.get("filepath")
- printname = request.args.get("printname")
- if "jpg" in filepath or 'png' in filepath or 'jpeg' in filepath:
- pdf_name = filepath.split('.')[0]
- im1 = Image.open(filepath)
- im1.save(pdf_name + '.pdf', "PDF", resolution=100.0)
- filepath = pdf_name+'.pdf'
- # 调用打印机进行打印
- if sys.platform == 'win32':
- args = [f"PDFtoPrinter.exe",
- f"{filepath}",
- f"{printname}"]
- subprocess.run(args, encoding="utf-8", shell=True)
- res = {"res": "print PDF to " + printname}
- print(datetime.datetime.now())
- return res
- if __name__ == '__main__':
- api.run(port=8088, debug=True, host='0.0.0.0')
复制代码 代码里面定义了一个GET接口,使用的是8088端口,接收两个参数一个是文件路径,另外一个是打印机名称;针对活字格附件的特性,该接口支持图片和PDF两种类型的附件打印;
这个接口可以作为一个通用打印接口,如果咱们在别的地方需要使用的话,也可以自己下载源码进行修改,按照自己的需求调整接口的传参,也可以要求直接把PDF文件流传进来;
下面是将这个接口代码编译成了一个exe方便大家使用,由于另外一个exe超过20M,论坛不支持单个文件大于20M上传,因此拆分成2个压缩包上传了,大家可以下载解压使用;
PDFtoPrinter.exe
(11.15 MB, 下载次数: 445)
|