Login
下载
Home
/
CloudPrinter
/
cloudprinter.py
cloudprinter.py
download
import os import win32print import subprocess from flask import Flask, request, redirect, url_for, render_template_string import pythoncom from win32com import client app = Flask(__name__) UPLOAD_FOLDER = 'D:\\uploads\\' ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'doc', 'docx'} if not os.path.exists(UPLOAD_FOLDER): os.makedirs(UPLOAD_FOLDER) def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS def print_file(filepath): try: # 获取默认打印机 printer_name = win32print.GetDefaultPrinter() print(f"正在打印的打印机: {printer_name}") # 打印文件 file_extension = filepath.rsplit('.', 1)[1].lower() if file_extension in {'txt', 'pdf', 'doc', 'docx'}: # 直接使用默认应用程序打印文件 os.startfile(filepath, "print") elif file_extension in {'png', 'jpg', 'jpeg', 'gif'}: # 使用 Windows 照片查看器打印图像文件 subprocess.run(['rundll32', 'C:\\WINDOWS\\System32\\shimgvw.dll,ImageView_PrintTo', filepath, printer_name], check=True) else: raise ValueError("不支持的文件类型。") print("文件打印成功") return "文件打印成功" except Exception as e: print(f"发生错误: {str(e)}") return f"打印文件失败: {str(e)}" @app.route('/', methods=['GET', 'POST']) def upload_file(): html = """ <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>国投公司云打印服务</title> <style> body { font-family: Arial, sans-serif; background-color: #f8f9fa; margin: 0; padding: 0; } .container { max-width: 600px; margin: 50px auto; padding: 20px; background-color: #fff; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); border-radius: 5px; text-align: center; } h2 { margin-bottom: 20px; } label { display: block; margin-bottom: 10px; } input[type="file"] { width: 100%; padding: 10px; margin-bottom: 20px; } button { padding: 10px 20px; background-color: #007bff; color: #fff; border: none; border-radius: 3px; cursor: pointer; width: 100%; } button:hover { background-color: #0056b3; } .message { margin-top: 20px; padding: 10px; border-radius: 5px; } .success { background-color: #d4edda; color: #155724; } .error { background-color: #f8d7da; color: #721c24; } </style> </head> <body> <div class="container"> <h2>国投公司云打印服务</h2> {% if message %} <div class="message {{ message_class }}">{{ message }}</div> {% endif %} <form method="POST" enctype="multipart/form-data"> <label for="file"></label> <input type="file" id="file" name="file"> <button type="submit">直接打印</button> </form><br> <div style="text-align: left;"> <a>注意事项:</a><br> <a>1、无需安装任何驱动上传文件直接打印。</a><br> </div> </body> </html> """ message = None message_class = None if request.method == 'POST': if 'file' not in request.files: message = '没有文件部分' message_class = 'error' else: file = request.files['file'] if file.filename == '': message = '未选择文件' message_class = 'error' elif file and allowed_file(file.filename): filename = file.filename filepath = os.path.join(UPLOAD_FOLDER, filename) file.save(filepath) try: message = print_file(filepath) message_class = 'success' if '成功' in message else 'error' except Exception as e: message = f'打印文件失败: {str(e)}' message_class = 'error' return render_template_string(html, message=message, message_class=message_class) return render_template_string(html) if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000)
Close
2025-07-13 06:38:24 Sunday 18.97.14.85 Runningtime:1.453s Mem:415.28 KB