当前位置: 首页 > news >正文

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()
http://www.cnnetsun.cn/news/152147.html

相关文章:

  • 淘宝京东拼多多API:不同平台,相同的电商赋能之道?
  • 2025网络信息安全工程师入行路线图:从零基础到体系精通,一篇保姆级指南
  • 算法学习记录18——并查集 vs Set + BFS/DFS
  • 揭秘Open-AutoGLM离线运行核心技术:5大关键步骤让你摆脱云端依赖
  • 29、量子点中的自旋电子学与量子计算
  • 千元到两千元家用路由器市场,如何挑选及Wi-Fi 7技术优势
  • 【Open-AutoGLM触控优化核心技术】:揭秘轨迹自然度提升的5大算法原理
  • FaceFusion助力元宇宙建设:高质量面部动画生成解决方案
  • FaceFusion命令行工具详解:自动化脚本编写实战
  • 【Open-AutoGLM性能突围】:3个真实案例教你将推理延迟压到极限
  • 从零基础转行渗透测试到如今20k,我经历了什么?_渗透测试工作辛苦吗
  • 错过Transformer时代别再错过它:Open-AutoGLM将引爆下一代AI浪潮?
  • Open-AutoGLM无代码系统背后的秘密(9大核心技术组件详解)
  • 基于Java的毕业论文复现与写作,这10款AI工具值得推荐
  • 利用FaceFusion镜像加速GPU算力变现的新商业模式
  • pytest-yaml 测试平台 - 平台实现用例分层API和用例层
  • Open-AutoGLM实战指南:5步构建你的动态强化学习智能体
  • 计算机毕业设计springboot家庭财务管理系统APP 基于Spring Boot的家庭财务智能管理移动应用开发 Spring Boot驱动的家庭财务管理系统移动端设计与实现
  • Open-AutoGLM坐标漂移难题,一文掌握精准修正的7种高级手法
  • (独家)Open-AutoGLM弹窗自愈系统设计内幕:3步实现无人值守自动处理
  • 从规则引擎到AI决策,弹窗处理如何迈入智能化时代?,Open-AutoGLM实战路径全披露
  • 无路可退的渗透测试工程师,35岁前趁早多接触下这些方向
  • 非科班学网络安全,是“黄金大道”还是“天坑之旅”?
  • C语言变量命名规则C语言变量与常量基本数据类型
  • 1、数学物理中的量化与群论研究
  • 18、物理中的几何方法与模型研究
  • 2、量子物理早期实验与理论探索
  • 基于ssm的面向企事业单位的项目申报小程序源代码(源码+文档+数据库)
  • FaceFusion镜像提供多维度性能指标看板
  • 30、6G 网络:连接未来的无限可能