# PDF2DWG **Repository Path**: dlml2/PDF2DWG ## Basic Information - **Project Name**: PDF2DWG - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-21 - **Last Updated**: 2026-10-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PDF2CAD-GB · 国标机械制图提取器 把 **矢量型 PDF 图纸**(CAD 导出的 PDF)一键提取为 **符合国标(GB)的 DWG / DXF 图纸**, 并可 **从生成后的 DWG 中抽离出图框模板**(图框 + 周边带 + 完整标题栏含填写值 + LOGO, 其余零件图形全部清空)。 ## 功能 ### 1. PDF → DWG / DXF 提取 - 提取 PDF 中的 **直线 / 折线 / 贝塞尔曲线(精确拍平)/ 整圆 / 矩形 / 文字** - 自动按国标分层并着色(GB/T 17450、GB/T 4457.4、GB/T 14665): | 图层 | 颜色 | 线型 | 线宽 | 用途 | |------|------|------|------|------| | 粗实线 | 白 7 | 实线 | 0.70 mm | 可见轮廓线 | | 细实线 | 绿 3 | 实线 | 0.25 mm | 尺寸线、指引线、剖面线 | | 虚线 | 黄 2 | 虚线 | 0.25 mm | 不可见轮廓线 | | 中心线 | 红 1 | 点画线 | 0.25 mm | 轴线、对称中心线 | | 双点画线 | 粉 6 | 双点画线 | 0.25 mm | 极限位置、假想轮廓 | | 尺寸标注 | 绿 3 | 实线 | 0.25 mm | 还原的 DIMENSION 实体 | | 文字 | 绿 3 | 实线 | 0.25 mm | 长仿宋 MTEXT | | 剖面线 | 绿 3 | 实线 | 0.25 mm | 剖面填充 | | 图框 | 白 7 | 实线 | 0.70 mm | 内图框 + 对中符号 | | 纸边 | 青 4 | 实线 | 0.25 mm | 纸边 + 周边带分区线 | | 标题栏 | 白 7 | 实线 | 0.25 mm | 标题栏表格线 | | Logo | 蓝 5 | 实线 | 0.25 mm | 模板左下角标识 | - 自动识别规则: - **线宽** ≥ 最大线宽 × 比例(默认 0.5)→ 粗实线;否则细实线 - **虚线模式**:长短交替(点画)→ 中心线;等距 → 虚线 - **大矩形**(占页面 >50%)→ 图框图层 - **整圆**:4 段贝塞尔拟合的圆自动还原为 CAD 圆(非多段线近似) - 链式合并:共端点的碎线段自动合并为 **多段线(LWPOLYLINE)**,图纸干净; 闭合环(矩形/轮廓)输出为**真正的闭合多段线** - 文字 → **长仿宋 MTEXT**(GB/T 14691),文字样式名 `GB-仿宋`, **宽度因子 0.71**(长仿宋字宽 = 字高/√2,同时贴近源 CAD 窄体字体宽度) - **表格列位置保真**:标题栏表格行(如公差表 `±0.1 ±0.1 ±0.2 …`)在源 PDF 中 逐列独立定位,提取时按字符间隙拆分为独立片段、各段用源坐标定位, 避免用空格模拟列距造成的整列漂移 - **文字零入侵**:按字体实测宽度计算渲染包围盒,自动限制字高并迭代消除重叠, 保证行与行、表格行与格之间互不重叠 - **输出 DWG**(R2018/R2013/R2010/R2007/R2004/R2000)或 DXF,单位毫米, 兼容 AutoCAD / 中望CAD / 浩辰CAD ### 2. 从 DWG 抽离图框模板 以**转换后生成的 DWG** 为源,只保留模板要素、删除全部图形内容,另存为模板: - 保留 **图框**(GB/T 14689,粗实线 0.7mm)与 **纸边**(青色细实线) - 保留 **源图自带的图幅分区代号**(GB/T 14689.1,数字 1-8 / 字母 A-F), 缺失时自动补画 - 保留 **对中符号**(图框四边中点短线) - 保留 **标题栏整体**(表格线/公差表/符号/**填写值**原样保留; 勾选"清空标题栏填写值"可只清名称/图号/比例/重量/版本等栏目的填写值) - 保留图框右上角**通用粗糙度注记**("其余 √ / 孔及切边"等) - 在**模板左下角绘制蓝色 LOGO**(`core/assets/logo_qi.png` 矢量轮廓, 归【Logo】图层,可整体移动/删除) - 删除零件图形 / 明细栏 / 技术要求 / 尺寸标注 - 保留全套 **GB 图层 / 线型 / 文字样式** 定义 ## 依赖:DWG 读写需要 ODA File Converter DWG 是闭源二进制格式,Python 无法直接读写,本工具通过 **ODA File Converter** (Open Design Alliance 官方免费转换器)完成 DXF ↔ DWG 转换。 **本项目已内置**:`tools/ODAFileConverter/`(从官方 MSI 免提权解包,可直接使用)。 查找顺序(任意一种满足即可): 1. 程序同目录 `tools/ODAFileConverter/ODAFileConverter.exe`(macOS 为同名无后缀二进制) 2. 项目目录 `tools/ODAFileConverter/` 3. 默认安装路径(Windows `C:\Program Files\ODA\...`,macOS `/Applications/ODAFileConverter.app`) 4. 环境变量 `ODAFC_PATH` 指向可执行文件 5. PATH 中的 `ODAFileConverter` > 只输出 DXF 时不需要 ODA。 ## 使用 ### 图形界面(React + Apple 风格) ```bash python app.py # 或双击发布目录中的 PDF2CAD-GB.exe ``` 界面基于 **React 18 + pywebview**,遵循 Apple 设计语言: 浅色 #f5f5f7 底、白色圆角卡片、系统设置式侧边栏导航、iOS 开关与分段控件。 1. 「PDF 转国标 CAD」页:选 PDF(或拖入窗口)→ 选输出格式(**DWG 默认** / DXF / 两者)与 DWG 版本 → 「开始提取」,转换进度实时回显,右侧 canvas 实时预览图纸 2. 「图框模板抽离」页:选源 DWG(或拖入窗口)→ 勾选保留项 → 「抽离模板」 **文件拖拽**:把 PDF/DWG 直接拖到窗口任意位置即可载入(HTML5 拖放 + base64 传输的 pywebview 跨平台方案)。 ### 命令行 ```bash # PDF → DWG(默认) python app.py --cli 输入.pdf 输出.dwg [--dwg-version 2018] # PDF → DWG 并顺带抽离模板 python app.py --cli 输入.pdf 输出.dwg --template # PDF → DXF(不需要 ODA) python app.py --cli 输入.pdf 输出.dxf --format dxf # 其他参数 --page 1 --thick-ratio 0.5 --scale 0.3528 --no-text --no-chain ``` ## 参数说明 - `--thick-ratio`:粗线判定比例(0.1~0.9,默认 0.5) - `--scale`:mm / PDF pt。默认 0.3528(输出真实物理毫米尺寸); 若 PDF 本身按 1:1 毫米坐标导出,则设为 1 - `--no-chain`:不做链式合并(每段输出为 LINE) - `--no-text`:不提取文字 ## 从源码构建 ```bash # 1) 前端(React + Vite) cd frontend && npm install && npm run build && cd .. # 2) Python 依赖 python -m venv .venv .venv/Scripts/pip install -r requirements.txt # macOS/Linux: .venv/bin/pip # 3) 运行 .venv/Scripts/python app.py ``` ## 打包发布 | 产物 | 平台 | 方式 | 输出 | |------|------|------|------| | 绿色版 | Windows | ①②③ 后 `python make_green_zip.py` | `release/PDF2CAD-GB-v1.2.8-绿色版.zip` | | 安装包 | Windows | `ISCC installer/PDF2CAD-GB.iss`(Inno Setup 6/7) | `release/PDF2CAD-GB-v1.2.8-安装包.exe` | | DMG | macOS | `bash packaging/macos/build_mac.sh`(mac 内执行) | `release/PDF2CAD-GB-v1.2.8-mac.dmg` | Windows 打包步骤: ```bash ① cd frontend && npm run build && cd .. ② .venv/Scripts/pyinstaller PDF2CAD-GB.spec --noconfirm ③ 复制 dist/PDF2CAD-GB.exe 与 tools/、使用说明.txt 到 release/PDF2CAD-GB-v1.2.8/ ``` macOS 打包(需在 mac 虚拟机内执行,PyInstaller 不支持跨平台): 见 [packaging/macos/MAC_BUILD.md](packaging/macos/MAC_BUILD.md)。 ### 上传 GitHub - 仓库只提交源码(`.gitignore` 已排除构建产物与发布物); - `release/` 下的 exe / zip / dmg 单文件 100MB+,**走 GitHub Releases 附件**发布 (Releases 不受仓库单文件 100MB 限制); - 建议同时附上版本说明与 `使用说明.txt`。 ## 版本历史 - **v1.2.8**(2026-10-04):React + pywebview 界面重写;HTML5 拖拽;模板含完整 标题栏填写值与 LOGO;表格列位置保真;文字零入侵迭代 - v1.2.2~1.2.4(2026-09-30):模板补画机制(栏目文字/分区代号)、标题栏 "只清填写值"语义、文字高度自适应限制 - v1.1.x(2026-09-28~30):扫描件光栅矢量化、尺寸标注还原、几何图框检测、 编码与坐标修复 - v1.0(2026-09-27):首个版本(tkinter 界面)