批量转旧编码文本为PDF:如何实现自动打印无需手动保存?
解决「Microsoft Print to PDF」自动批量转换旧编码文本为PDF的问题
你的核心问题是原脚本仅触发打印动作,但未指定PDF输出路径,导致每次弹出保存对话框。以下提供两种可靠的解决方案,均能自动将旧编码文本文件转换为PDF并保存到指定位置:
方法一:借助记事本(Notepad)自动打印(推荐)
记事本能自动识别绝大多数旧编码文本格式,且通过命令行参数可直接指定打印机与输出文件,无需手动操作。
单文件转换代码
import subprocess import os def txt_to_pdf(txt_path, output_pdf): # 确保输出目录存在 os.makedirs(os.path.dirname(output_pdf), exist_ok=True) # 调用记事本打印到指定PDF subprocess.run([ "notepad.exe", "/pt", # 打印到指定打印机的参数 txt_path, "Microsoft Print to PDF", # 目标打印机名称(需与系统中一致) "", # 打印机驱动名称,留空即可 output_pdf ], check=True) # 示例调用 txt_to_pdf("test.txt", "output/test.pdf")
批量转换代码
遍历指定目录下所有TXT文件,批量转换为同名PDF:
import os input_dir = "./txt_files" # 你的文本文件存放目录 output_dir = "./pdf_output" # PDF输出目录 for filename in os.listdir(input_dir): if filename.lower().endswith(".txt"): txt_full_path = os.path.join(input_dir, filename) pdf_filename = os.path.splitext(filename)[0] + ".pdf" pdf_full_path = os.path.join(output_dir, pdf_filename) txt_to_pdf(txt_full_path, pdf_full_path)
方法二:直接调用Win32打印API(适合明确编码的场景)
如果已知文本文件的具体编码(如GBK、GB2312),可直接通过Win32API提交打印作业,指定输出文件:
import win32print import os def txt_to_pdf_win32(txt_path, output_pdf, encoding="gbk"): printer_name = "Microsoft Print to PDF" hprinter = win32print.OpenPrinter(printer_name) try: # 配置打印作业,指定输出文件 job_params = { "pDocName": os.path.basename(txt_path), "pOutputFile": output_pdf, "pDatatype": "RAW" } job_id = win32print.StartDocPrinter(hprinter, 1, job_params) try: win32print.StartPagePrinter(hprinter) # 按指定编码读取文件内容并发送到打印机 with open(txt_path, "r", encoding=encoding) as f: content = f.read() win32print.WritePrinter(hprinter, content.encode(encoding)) win32print.EndPagePrinter(hprinter) finally: win32print.EndDocPrinter(hprinter) finally: win32print.ClosePrinter(hprinter) # 示例调用(假设文件编码为GBK) txt_to_pdf_win32("test.txt", "output/test.pdf", encoding="gbk")
注意事项
- 确保系统中已安装「Microsoft Print to PDF」打印机,且名称与代码中一致(可通过
wmic printer get name命令查看准确名称) - 方法一依赖系统自带的记事本程序,无需额外安装依赖
- 方法二需准确匹配文本文件的旧编码,否则会出现乱码
内容的提问来源于stack exchange,提问作者SomeGuy
相关产品推荐
相关产品推荐

