找回密码
 立即注册

QQ登录

只需一步,快速开始

James.Lv 讲师达人认证 悬赏达人认证 活字格认证 Wyn认证

超级版主

222

主题

2650

帖子

5892

积分

超级版主

Rank: 8Rank: 8

积分
5892

活字格认证活字格高级认证Wyn高级认证Wyn认证微信认证勋章讲师达人元老葡萄悬赏达人

James.Lv 讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2023-11-30 12:23  /   查看:3203  /  回复:0
本帖最后由 Simon.Sun 于 2024-10-25 16:32 编辑

无预览打印(静默打印)场景
  • 无需人工干预,自动完成打印任务,定时打印、远程打印
  • 静默打印方案在执行打印任务时不会显示任何信息,有效保护了用户的隐私和敏感信息

实现原理

  • 将待打印的页面转成PDF文件
  • 传递给打印接口,由打印接口调用打印机执行打印

打印接口
我这边是采用Python实现了一个接口,借助一个第三方打印组件来实现静默打印,第三方组件采用的 PDFtoPrinter.exe
完整的Python代码如下:
  1. # !/usr/bin/python3
  2. # -*- coding: utf-8 -*-
  3. # @Time : 2022-09-26 11:55
  4. # @Author : 吕小白
  5. # @Email : james.lv@grapecity.com

  6. import requests
  7. import datetime
  8. import subprocess
  9. import sys
  10. import flask

  11. from flask import request
  12. from flask_cors import CORS
  13. from PIL import Image
  14. import os

  15. api = flask.Flask(__name__)
  16. CORS(api, resources={r"/*": {"origins": "*"}})

  17. @api.route('/print', methods=['GET'])
  18. def pdf_printer():
  19.     # 防止字符串乱码
  20.     os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
  21.     filepath = request.args.get("filepath")
  22.     printname = request.args.get("printname")
  23.     if "jpg" in filepath or 'png' in filepath or 'jpeg' in filepath:
  24.         pdf_name = filepath.split('.')[0]
  25.         im1 = Image.open(filepath)
  26.         im1.save(pdf_name + '.pdf', "PDF", resolution=100.0)
  27.         filepath = pdf_name+'.pdf'

  28.     # 调用打印机进行打印
  29.     if sys.platform == 'win32':
  30.         args = [f"PDFtoPrinter.exe",
  31.                 f"{filepath}",
  32.                 f"{printname}"]
  33.         subprocess.run(args, encoding="utf-8", shell=True)

  34.     res = {"res": "print PDF to " + printname}
  35.     print(datetime.datetime.now())
  36.     return res

  37. if __name__ == '__main__':
  38.     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, 下载次数: 404)

评分

参与人数 1满意度 +5 收起 理由
sz_xd + 5

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部