diff --git a/PrintAgent.py b/PrintAgent.py index 4a960e5..ccbfb95 100644 --- a/PrintAgent.py +++ b/PrintAgent.py @@ -13,16 +13,14 @@ from flask import Flask, request, jsonify from PyPDF2 import PdfWriter, PdfReader from flask_cors import CORS import ctypes - -import os import pystray -import threading from PIL import Image from pystray import MenuItem # import requests import socket import logging from logging.handlers import RotatingFileHandler +import sys CUR_DIR = os.path.dirname(os.path.abspath(__file__)) @@ -53,14 +51,12 @@ CORS(app, supports_credentials=True) app.json.ensure_ascii = False -class SnPost: +class MyPrint: - def __init__(self, server, port) -> None: + def __init__(self) -> None: self.is_one_instance = False self.is_working = False self.icon = None # 下标 - self.server = server - self.port = port self.check_one_instance() @@ -69,7 +65,7 @@ class SnPost: global s s = socket.socket() host = socket.gethostname() - s.bind((host, 8080)) + s.bind((host, 20309)) self.is_one_instance = True except Exception: self.is_one_instance = False @@ -77,6 +73,8 @@ class SnPost: def close(self): self.is_working = False self.icon.stop() + logger.info("程序退出") + sys.exit(0) def log(self): os.system(log_command) @@ -84,13 +82,14 @@ class SnPost: def run(self): if not self.is_one_instance: return - - menu = (MenuItem('退出', self.close), MenuItem('查看日志', self.log)) + menu = (MenuItem('查看日志', self.log)) image = Image.open("001.ico") title = "打印机" self.icon = pystray.Icon(title, image, "打印机", menu) threading.Thread(target=self.icon.run, daemon=True).start() + app.run(port=8080, debug=False, host='0.0.0.0') + @app.route('/print/', methods=['POST', 'OPTIONS']) def pdf_printer(): @@ -109,7 +108,7 @@ def pdf_printer(): win32print.OpenPrinter(printer_name) win32print.SetDefaultPrinter(printer_name) else: - return jsonify({"error_message": "打印机名称不正确","error_code": "printer_name_error"}), 400 + return jsonify({"err_msg": "打印机名称不正确","err_code": "printer_name_error"}), 400 win32api.ShellExecute( 0, @@ -119,11 +118,10 @@ def pdf_printer(): ".", 0 ) + logger.info("打印成功") except Exception as e: - import traceback - logger.error(traceback.format_exc()) - print(traceback.format_exc()) - return jsonify({"error_message": str(e), "error_code": "print_failed"}), 500 + logger.error(f"打印失败: {e}") + return jsonify({"err_msg": "打印失败", "err_code": "print_failed"}), 500 finally: t = threading.Thread(target=del_file, args=(temp_pdf_path,)) t.start() @@ -149,12 +147,11 @@ def str_printer(): print_commands = request.json.get('printer_commands', None) print_name = request.json.get('printer_name', None) tsclibrary = ctypes.WinDLL(".//TSCLIB.dll") - if print_name: - logger.info("打印机名称: %s", print_name) + try: tsclibrary.openportW(print_name) - else: - logger.error("打印机名称无效") - return jsonify({"error_message": "打印机名称无线","error_code": "printer_name_error"}), 400 + except Exception as e: + logger.error(f"打印机名称无效: {e}") + return jsonify({"err_msg": "打印机名称无效","err_code": "printer_name_error"}), 400 tsclibrary.clearbuffer() try: for item in print_commands: @@ -172,14 +169,13 @@ def str_printer(): else: tsclibrary.sendcommandW(item) tsclibrary.closeport() + logger.info("打印成功") except Exception as e: - print(e) - logger.error("打印错误: %s", str(e)) + logger.error(f"打印失败: {e}") + return jsonify({"err_msg": "打印失败", "err_code": "print_failed"}), 500 return jsonify({}), 200 if __name__ == '__main__': - obj = SnPost(server='localhost', port=8080) - obj.run() - app.run(port=8080, debug=True, host='0.0.0.0') + MyPrint().run()