65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
import ezdxf
|
||
from ezdxf.addons.drawing import RenderContext, Frontend
|
||
from ezdxf.addons.drawing.matplotlib import MatplotlibBackend
|
||
import matplotlib.pyplot as plt
|
||
import os
|
||
import sys
|
||
|
||
# --- 配置 ---
|
||
# 将脚本的父目录(项目根目录)添加到Python路径中
|
||
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||
PROJECT_ROOT = os.path.dirname(SCRIPT_DIR)
|
||
sys.path.append(PROJECT_ROOT)
|
||
|
||
INPUT_DXF_NAME = "图签测试.dxf"
|
||
OUTPUT_PDF_NAME = "图签测试_from_dxf.pdf"
|
||
INPUT_DXF_PATH = os.path.join(SCRIPT_DIR, INPUT_DXF_NAME)
|
||
|
||
# 确保输出目录存在
|
||
output_dir = os.path.join(PROJECT_ROOT, "04_Test_Files", "结果")
|
||
os.makedirs(output_dir, exist_ok=True)
|
||
OUTPUT_PDF_PATH = os.path.join(output_dir, OUTPUT_PDF_NAME)
|
||
|
||
|
||
def dxf_to_pdf(input_path, output_path):
|
||
"""
|
||
将指定的 DXF 文件渲染并保存为 PDF。
|
||
"""
|
||
if not os.path.exists(input_path):
|
||
print(f"错误: 输入的 DXF 文件未找到: '{input_path}'")
|
||
return
|
||
|
||
try:
|
||
print(f"--- 正在加载 DXF 文件: {os.path.basename(input_path)} ---")
|
||
doc = ezdxf.readfile(input_path)
|
||
msp = doc.modelspace()
|
||
|
||
# 创建 Matplotlib Figure 和 Axes
|
||
fig = plt.figure()
|
||
ax = fig.add_axes([0, 0, 1, 1])
|
||
|
||
# 设置渲染上下文和后端
|
||
ctx = RenderContext(doc)
|
||
out = MatplotlibBackend(ax)
|
||
|
||
print("--- 开始渲染 DXF 内容 ---")
|
||
# 使用 ezdxf 的绘图插件渲染模型空间
|
||
Frontend(ctx, out).draw_layout(msp, finalize=True)
|
||
|
||
print(f"--- 正在将渲染结果保存为 PDF: {os.path.basename(output_path)} ---")
|
||
# 保存为 PDF,dpi可以调整清晰度,bbox_inches='tight'会自动裁剪空白边缘
|
||
fig.savefig(output_path, dpi=300, bbox_inches='tight', pad_inches=0.1)
|
||
plt.close(fig)
|
||
|
||
print("\n操作成功!")
|
||
print(f"PDF 文件已保存到: '{output_path}'")
|
||
|
||
except IOError:
|
||
print(f"错误: 无法读取文件: '{input_path}'")
|
||
except Exception as e:
|
||
print(f"处理并转换 DXF 文件时发生未知错误: {e}")
|
||
|
||
if __name__ == "__main__":
|
||
dxf_to_pdf(INPUT_DXF_PATH, OUTPUT_PDF_PATH)
|
||
|