You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量转旧编码文本为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")

注意事项

  1. 确保系统中已安装「Microsoft Print to PDF」打印机,且名称与代码中一致(可通过wmic printer get name命令查看准确名称)
  2. 方法一依赖系统自带的记事本程序,无需额外安装依赖
  3. 方法二需准确匹配文本文件的旧编码,否则会出现乱码

内容的提问来源于stack exchange,提问作者SomeGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:10:30