news 2026/4/22 20:20:35

ezdxf 打印dxf为pdf 字体乱码转换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ezdxf 打印dxf为pdf 字体乱码转换

# 替换所有文本样式中的字体为 gbcbig.shx

for style in doc.styles:

style.dxf.font = 'gbcbig.shx'

import ezdxf from ezdxf.addons.drawing import RenderContext, Frontend from ezdxf.addons.drawing.matplotlib import MatplotlibBackend import matplotlib.pyplot as plt import tkinter as tk from tkinter import filedialog import os import subprocess import sys def dxf_to_pdf(dxf_path, pdf_path): """将DXF文件转换为PDF,并将所有字体替换为gbcbig.shx""" # 读取 DXF 文件 doc = ezdxf.readfile(dxf_path) # 替换所有文本样式中的字体为 gbcbig.shx for style in doc.styles: style.dxf.font = 'gbcbig.shx' # 创建渲染环境 fig = plt.figure() ax = fig.add_axes([0, 0, 1, 1]) # 创建后端渲染器 backend = MatplotlibBackend(ax) context = RenderContext(doc) frontend = Frontend(context, backend) # 渲染图形 frontend.draw_layout(doc.modelspace()) backend.finalize() # 保存为 PDF fig.savefig(pdf_path, format='pdf', bbox_inches='tight') plt.close(fig) def open_file(filepath): """跨平台打开文件""" if sys.platform.startswith('darwin'): # macOS subprocess.call(['open', filepath]) elif sys.platform.startswith('win'): # Windows os.startfile(filepath) elif sys.platform.startswith('linux'): # Linux subprocess.call(['xdg-open', filepath]) def convert_dxf_full_gui(): """完整的GUI交互式DXF转PDF功能""" # 创建隐藏的根窗口 root = tk.Tk() root.withdraw() # 隐藏主窗口 root.attributes('-topmost', True) # 确保对话框置顶显示 # 选择DXF文件 dxf_path = filedialog.askopenfilename( title="选择DXF文件", filetypes=[("DXF files", "*.dxf"), ("All files", "*.*")] ) if not dxf_path: print("未选择DXF文件,程序退出") root.destroy() return # 弹窗选择保存路径和文件名 pdf_path = filedialog.asksaveasfilename( title="保存PDF文件", defaultextension=".pdf", filetypes=[("PDF files", "*.pdf"), ("All files", "*.*")], initialfile=os.path.splitext(os.path.basename(dxf_path))[0] + ".pdf" # 默认文件名为DXF文件名 ) # 销毁根窗口 root.destroy() # 如果用户选择了保存路径,则执行转换 if pdf_path: try: dxf_to_pdf(dxf_path, pdf_path) print(f"转换完成: {pdf_path}") # 转换完成后打开PDF文件 open_file(pdf_path) except Exception as e: print(f"转换失败: {e}") else: print("操作已取消") # 运行完整GUI版本 if __name__ == "__main__": convert_dxf_full_gui()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:37:59

FaceFusion在游戏开发中的实验性应用:NPC面部动态生成

FaceFusion在游戏开发中的实验性应用:NPC面部动态生成 在现代游戏设计中,一个NPC(非玩家角色)是否“有灵魂”,往往取决于他的一颦一笑是否自然、情绪变化是否贴合情境。过去,这些细腻的表现依赖昂贵的动作捕…

作者头像 李华
网站建设 2026/4/22 17:05:32

14、环境诱导退相干:从基础理论到实际应用

环境诱导退相干:从基础理论到实际应用 在量子物理的研究中,环境诱导退相干是一个至关重要的概念,它对于理解量子系统与环境的相互作用以及量子 - 经典过渡具有关键意义。本文将深入探讨环境诱导退相干的几个重要方面,包括大距离下退相干速率的饱和、零温度下的退相干以及系…

作者头像 李华
网站建设 2026/4/19 18:54:47

22、基于光子的量子信息科学探索

基于光子的量子信息科学探索 量子隐形传态协议概述 量子隐形传态协议是量子信息科学中的重要内容。其过程可分解为以下几个关键步骤: 1. 辅助纠缠粒子对的分发 :准备一对辅助的纠缠粒子(如粒子 2 和 3)。 2. 贝尔态测量 :对粒子 1 和 2 进行贝尔态测量,也就是将其…

作者头像 李华
网站建设 2026/4/18 10:32:28

大厂量产的储能源代码(PCS)

大厂量产PCS储能源代码某大厂储能研发中心最近流传着一组被反复打磨的PCS控制代码。这套代码最有趣的地方在于其状态切换机制——用有限状态机把光伏并网、离网模式、故障恢复这些场景安排得明明白白。来看这个核心状态切换逻辑: class PCSStateMachine:def __init_…

作者头像 李华