news 2026/2/25 18:29:31

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/2/23 0:24:01

淘宝京东拼多多API:不同平台,相同的电商赋能之道?

在当今高度互联的电商生态中,平台开放API已成为赋能外部开发者、构建繁荣生态的关键策略。淘宝、京东、拼多多作为国内电商巨头,尽管其商业模式、用户群体和平台特色各异,但在开放API的战略方向上却展现出惊人的一致性。本文将探讨这三大平台…

作者头像 李华
网站建设 2026/2/23 10:20:11

算法学习记录18——并查集 vs Set + BFS/DFS

写在前面:最近刷 LeetCode 遇到一道题(2092. Find All People With Secret),题目要求模拟“秘密”在专家之间的传播过程。我一开始想到用 set BFS,后来又看到有人用并查集(Union-Find)解法。于…

作者头像 李华
网站建设 2026/2/24 21:55:11

揭秘Open-AutoGLM离线运行核心技术:5大关键步骤让你摆脱云端依赖

第一章:Open-AutoGLM离线运行技术支撑Open-AutoGLM作为一款支持本地化部署的自动化代码生成模型,其离线运行能力依赖于完整的环境配置与资源管理机制。为确保模型在无网络连接环境下稳定运行,需预先构建推理引擎、加载量化模型权重&#xff0…

作者头像 李华
网站建设 2026/2/25 6:06:10

29、量子点中的自旋电子学与量子计算

量子点中的自旋电子学与量子计算 1. 量子寄存器的初始化 在量子计算里,量子算法和纠错方案通常需要输入处于明确定义状态(如自旋向上 $|\uparrow\rangle$)的量子比特寄存器。单自旋可通过暴露在强磁场 $g\mu_BB \gg kT$ 中,使其弛豫到基态来实现极化。施加磁场的方式有多…

作者头像 李华
网站建设 2026/2/24 14:18:01

千元到两千元家用路由器市场,如何挑选及Wi-Fi 7技术优势

在千元到两千元级别的家用路由器市场里,消费者常常追求性能、功能以及价格的最优平衡。因Wi-Fi 7技术渐渐普及,且家庭内网对于高速、低延迟、高稳定性的需求不断增长,此价位段的产品已从单纯的“够用”迈向“专业”和“前瞻性”转变。挑选一款…

作者头像 李华