James.Lv 发表于 2023-11-30 12:23:05

一看就会,超有用活字格技能:一百九十、活字格无预览打印实现方法

本帖最后由 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]
查看完整版本: 一看就会,超有用活字格技能:一百九十、活字格无预览打印实现方法