python之打印机

本文介绍Anti-Grain Geometry (AGG),一个免费开源的图形库,用于高质量图形输出,并展示了如何使用PyQt5进行文档打印及PDF生成。包括设置打印页面大小、输出格式及文件路径等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AGG(Anti-Grain Geometry)Anti-Grain Geometry (AGG) is an Open Source, free of charge graphic library, written in industrially standard C++. The terms and conditions of use AGG are described on The License page. AGG doesn't depend on any graphic API or technology. Basically, you can think of AGG as of a rendering engine that produces pixel images in memory from some vectorial data. But of course, AGG can do much more than that. The ideas and the philosophy of AGG are:

Anti-Grain Geometry - About the Project  http://www.antigrain.com/about/index.html

QPrinter Class | Qt Print Support 5.10  http://doc.qt.io/qt-5/qprinter.html

from PyQt5 import QtWidgets, QtPrintSupport 
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QMainWindow, QTableWidgetItem, QTabWidget, QFileDialog, QMessageBox
from PyQt5.QtGui import QTextDocument
from QtPrintSupport import  QPrinter
    @pyqtSlot()
    def on_pushButton_print_clicked(self):
        print("dsddsdsdsddssd")
        QPrinter(printer) 
        printer.setPageSize(0)
        printer.setOutputFormat(1)
        filepath = QFileDialog.getSaveFileName(this, tr("保存为..."), tr("D://成绩.pdf"), tr("PDF格式(*.pdf)"))
        printer.setOutputFileName(filepath)
        QTextDocument(textDocument)
        textDocument.setHtml(MakeDataToHtml())
        textDocument.print(printer)
        QMessageBox.about(this, tr("提示"), tr("保存成功"))

        print("dsddsdsdsddssd")
        printer=QPrinter() 
        printer.setPageSize(0)
        printer.setOutputFormat(1)
        filepath = QFileDialog.getSaveFileName(self, "保存为...", "D://成绩.pdf", "PDF格式(*.pdf)")
        print("ddddddddddddd", filepath)
        printer.setOutputFileName(str(filepath))
        textDocument=QTextDocument()
        textDocument.setHtml("dsdftrrrrrrergerr")
        textDocument.print(printer)
        QMessageBox.about(self, "提示", "保存成功")

from PyQt5 import QtWidgets, QtPrintSupport 


Python调用打印机参考例子 - 宁静的天空 - 博客园  https://www.cnblogs.com/ribavnu/p/4790262.html

Qt实现保存、浏览、预览、打印功能 - 优快云博客  https://blog.youkuaiyun.com/zbw1185/article/details/52184961

使用QPrinter生成pdf或用打印机打印数据 - 恒月美剑 - 博客园  https://www.cnblogs.com/jck34/p/4107885.html

QT表格打印_百度文库  https://wenku.baidu.com/view/82e1e7b669dc5022aaea0024.html点击打开链接

QT 打印的简单实现(转)_北极孤星_新浪博客  http://blog.sina.com.cn/s/blog_63578f1401013ars.html


python3+PyQt5 实现文档打印功能 - 优快云博客  https://blog.youkuaiyun.com/xiaoyangyang20/article/details/68941555



(转)用AGG实现高质量图形输出(一) - 3D入魔 - 博客园  http://www.cnblogs.com/mazhenyu/p/3911690.html

### 使用 Python 调用打印机的方法 在 Windows 平台上,Python 可以通过多种方法和库实现调用打印机的功能。以下是几种常见的方法及其对应的示例代码。 #### 方法一:使用 `win32api` 库 `win32api` 是一个用于访问 Windows API 的第三方库,能够轻松实现文件打印功能。下面是一个简单的例子: ```python import win32api def print_file(file_name): """ 打印指定文件 """ try: win32api.ShellExecute( 0, "print", file_name, None, ".", 0 ) except Exception as e: print(f"打印失败: {e}") # 测试打印 file_to_print = r"C:\path\to\your\document.txt" print_file(file_to_print) ``` 这种方法利用了 Windows 系统自带的打印机制,默认会使用系统的默认打印机[^3]。 --- #### 方法二:使用 `os` 和命令行工具 如果目标文件支持直接通过命令行打印(例如 PDF 文件),可以借助操作系统提供的命令行工具完成打印任务。以下是以 Adobe Reader 或其他 PDF 阅读器为例的代码: ```python import os def print_pdf(pdf_path): """ 使用 Acrobat Reader 命令行打印 PDF 文件 """ acrobat_reader_path = r'"C:\Program Files\Adobe\Acrobat DC\Acrobat\AcroRd32.exe"' command = f'{acrobat_reader_path} /t "{pdf_path}"' try: os.system(command) except Exception as e: print(f"打印失败: {e}") # 测试打印 pdf_to_print = r"C:\path\to\your\document.pdf" print_pdf(pdf_to_print) ``` 该方法依赖于安装的应用程序(如 Adobe Reader)以及其命令行接口的支持[^4]。 --- #### 方法三:使用 `pycups` 连接到 CUPS 打印服务 对于 Linux 用户或者需要更灵活控制的情况,可以考虑使用 `pycups` 来连接 CUPS(Common Unix Printing System)。虽然主要适用于 Unix-like 系统,但在某些场景下也可以跨平台应用。下面是基于 `pycups` 的简单示例: ```python import cups def send_print_job(printer_name, file_path): """ 发送打印作业到指定打印机 """ try: conn = cups.Connection() printers = conn.getPrinters() if printer_name not in printers: raise ValueError(f"未找到名为 '{printer_name}' 的打印机") with open(file_path, 'rb') as file: data = file.read() job_id = conn.printFile(printer_name, file_path, "Job Title", {}) print(f"打印任务已提交,任务 ID: {job_id}") except Exception as e: print(f"打印失败: {e}") # 测试打印 send_print_job("MyPrinter", "/path/to/your/document.pdf") ``` 此方法允许开发者自定义更多参数,比如页边距、纸张大小等[^2]。 --- #### 方法四:集成 BarTender 实现复杂打印需求 当涉及到条形码或标签打印时,通常推荐使用专业的软件解决方案,例如 Seagull Scientific 的 BarTender。它提供了强大的模板设计能力,并可通过 Python 脚本调用来生成动态数据并打印。以下是一段典型代码片段: ```python import os def run_bartender_template(template_path): """ 调用 BarTender 模板进行打印 """ bartender_exe = r'C:\Program Files (x86)\Seagull\BarTender UltraLite\bntend.exe' command = f'"{bartender_exe}" /F="{template_path}" /P' try: os.system(command) except Exception as e: print(f"运行 BarTender 失败: {e}") # 测试打印 run_bartender_template(r"C:\path\to\barcode_label.btw") ``` 这种方式特别适合工业环境中的大批量生产标记打印任务[^4]。 --- ### 总结 以上介绍了四种不同的 Python 调用打印机的方式,分别针对不同场景进行了优化: - **Windows 默认打印**:适用范围广,易于配置; - **命令行工具扩展**:灵活性高,需额外依赖外部程序; - **CUPS 接口编程**:面向高级用户,提供更多选项; - **专用软件集成**:满足特定领域内的特殊需求。 每种方案都有各自的优缺点,在实际开发过程中可以根据具体业务需求选择合适的策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值