一看就会,超有用活字格技能:一百九十、活字格无预览打印实现方法
本帖最后由 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('.')
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个压缩包上传了,大家可以下载解压使用;
大家在使用的时候,把 PrintAgentTest.exe和PDFtoPrinter.exe 这两个exe放在活字格服务器上找个文件夹放进去,然后运行PrintAgentTest.exe,这样这个接口就启动成功了
然后打开附件的活字格工程文件,自己上传个附件,图片或者PDF,然后调用服务端命令打印就行,服务端命令的printname是打印机名称,共享打印机,名称这样写: \\xa-printer\XA-205-Lobby
如果你的附件一行是多个附件的话,那服务端命令里面可以加循环调用打印接口进行打印
页:
[1]