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

Python转exe后生成带条形码Word文档打印报OSError错误

解决auto-py-to-exe打包后生成条形码Word并打印时的OSError问题

问题根源

开发环境(Jupyter/Anaconda)依赖系统已安装的条形码字体或本地资源,但auto-py-to-exe打包后的exe是独立运行环境,默认不会包含这些外部资源,导致程序运行时找不到字体文件触发OSError: cannot open resource。

解决方案

1. 定位并准备条形码字体文件

  • 确认你程序生成条形码时使用的字体(比如Free 3 of 9、Code 128等),找到对应的.ttf字体文件。
  • 将字体文件放到你的Python脚本同目录下。

2. 修改代码动态获取资源路径

打包后exe会将资源临时解压到sys._MEIPASS目录,添加路径处理函数来兼容开发和打包环境:

import sys
import os

def get_resource_path(relative_path):
    try:
        # 打包后的临时资源目录
        base_path = sys._MEIPASS
    except Exception:
        # 开发环境下的当前目录
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

3. 代码中指定字体路径

根据你使用的条形码生成库,修改代码明确指向字体文件:

示例(python-barcode库)

import barcode
from barcode.writer import ImageWriter

# 获取字体路径
font_path = get_resource_path("free3of9.ttf")

# 设置写入器选项
writer_options = {
    "font_path": font_path,
    "font_size": 12,
    "text_distance": 1.5
}

# 生成条形码
code = barcode.get("code128", "YOUR_BARCODE_DATA", writer=ImageWriter())
code.save("barcode_img", options=writer_options)

示例(python-docx直接生成条形码文本)

如果是通过Word字体直接生成条形码文本,需嵌入字体并指定路径:

from docx import Document
from docx.shared import Pt

doc = Document()
para = doc.add_paragraph()
run = para.add_run("*YOUR_BARCODE_DATA*")  # 部分条形码字体需要前后加*

# 设置字体
font = run.font
font.name = "Free 3 of 9"
font.size = Pt(24)
font.embed = True  # 嵌入字体到Word文档

# 保存文档
doc.save("barcode_doc.docx")

4. 配置auto-py-to-exe打包资源

打开auto-py-to-exe:

  • 在Additional Files区域,点击Add Files,选择你准备的字体文件。
  • 确保打包模式选择One Directory或One File(如果选One File,资源会被打包进exe,运行时自动解压)。
  • 重新打包生成exe。

5. 验证打印流程

打包后运行exe,生成Word文档后,确认条形码正常显示,再测试打印功能。如果仍有问题,检查打印时是否调用了系统未安装的字体,可将字体提前安装到目标系统,或确保Word文档已嵌入字体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:34:55