GitHub 项目地址见文末
go-cad 可以直接把 DWG/DXF 导出成 PDF 了! 整图单页,或者自动拆成多页,再用图名生成书签。一份铺着多个楼层的施工图,可以变成一份按页翻阅、按图名跳转的文件。
这是一个纯 Go 的 CAD 开源库:零 cgo,无需安装 AutoCAD,已有图纸解析、PNG/SVG 渲染、拆图、文本提取和 DWG 写出能力。新增 PDF 后,预览、下载归档、AI 整理资料,可以围绕同一份图纸串起来。
对做工程资料系统的朋友,这个变化很实用:网页里看预览,需要发给同事时下载 PDF,需要查设计说明时提取原图文字。下面就从导出的结果和命令开始。
先看结果:一份可以按图名翻阅的 PDF
下面的页面和书签,来自 go-cad 已导出的真实弱电施工图 PDF。我们把其中一页与几条书签排在一起,方便在手机上看清输出内容。

实际导出内容的排版展示,非软件界面截图;图中为第 2 页"十三层弱电平面图",下方为同一 PDF 的书签节选。
多页文件包含整图全览和识别出的分幅页面。"十三层弱电平面图""UPS系统图""弱电设计说明(一)"这些名字会成为书签,查资料时可以直接跳转。
这正是 PDF 导出带来的便利:交给同事的是一个文件,图纸有页序,也有导航。用于工程资料分享、审阅和归档,比一组需要另外整理命名的截图更顺手。
PDF 中的线条和字形以矢量路径输出。 下图是从其中的设计说明页重新渲染的文字局部,展示中文在实际 PDF 里的效果。

正文插图是 PNG;原始 PDF 中的字形是矢量路径。
生成 PDF 时需要可用的中文字体,可以在 Go 接口中用 FontPath 指定。阅读端不需要安装同款字体;但字形转成路径后,PDF 里的文字不能直接选中复制。要检索文字或交给 AI,继续使用原始 CAD 的文本提取结果。
有标准幅面需求,也可以通过 RenderOptions.PageStdA 开启 A0~A4 匹配。它默认关闭,按 CAD 世界单位为毫米换算,并要求图幅尺寸、比例符合条件;打印前仍要核对实际比例。
两条命令,把自己的图纸导出来
PDF 目前在 feat/pdf-export 分支,尚未合入 main。 使用 Go 1.25 或以上,安装下面这个已核验提交,才能体验本文的 PDF 功能:
go install github.com/unitedrhino/go-cad/cmd/dwg2png@d32c4e587bbf
安装后确保 Go 的 bin 目录在 PATH 中。工具虽然叫 dwg2png,现在也支持 PDF:输出文件的扩展名决定格式。
整张图纸,输出为一个单页 PDF:
dwg2png drawing.dwg -o drawing.pdf
按图框拆分,输出为一个带书签的多页 PDF:
dwg2png drawing.dwg -sheets -o sheets.pdf
输入文件换成 drawing.dxf 也可以。这两种模式分别适合"保留整图关系"和"按图幅阅读";识别不到图框时,多页模式会回退为整图单页。
自动识别仍需要检查。复杂排布可能把相邻内容合在一页,部分稀疏内容会被过滤;全览也可能受离群实体影响。正式交付前,对照源图核对图幅范围、图名和页面完整性。
把它接进项目,可以少做哪些重复工作?
PDF 是新增出口,go-cad 的价值还在于:同一个解析结果,可以供预览、资料整理和文件输出复用。
| 项目里的需求 | go-cad 能提供什么 |
|---|---|
| 上传后在线预览 | 读取 DWG/DXF,渲染 PNG、SVG |
| 下载、分享、归档 | 新增单页 / 多页矢量 PDF、图名书签 |
| 按楼层或图幅浏览 | 图框识别、图号图名提取、分幅出图 |
| 搜设计说明、材料名称 | 文本、坐标、图层及所属图幅 |
| 转换与程序集成 | DXF 读写、JSON 导入、DWG 写出、Go 模块接口 |
例如做一个图纸资料库,列表页用 PNG 缩略图,详情页显示分幅内容,下载按钮返回 PDF。检索结果里保留图名与坐标,用户就能回到原图核对。上传、权限和业务页面由你的系统负责,图纸处理交给库来完成。
中文工程图也有现成样本可看。下面这张机械图里,轮廓、尺寸线、箭头与技术要求一起呈现;图后给出文字局部,方便看材料、硬度和公差说明。


实际 CAD 渲染结果及文字局部;可对照"45#钢""55HRC"等技术要求。
中文不仅是能否提取出来,还包括码页、转义、字形、旋转和对齐。go-cad 对这些做了处理,但运行环境仍要准备合适字体;字体替换、特殊符号和自定义实体,建议拿自己的工程图核对。
纯 Go 也让接入更直接:后端无需围绕桌面 CAD 安排自动化任务,可以像使用其他 Go 模块一样调用解析与渲染接口,减少 C 动态库的部署工作。项目采用 Apache-2.0 许可证。
图纸里的说明,还可以交给 AI 整理
PDF 解决"把图交出去",文本提取则方便"把内容用起来"。比如按图幅汇总设计说明、列出材料型号,再把来源图名一并保留。
想先试用,可以让 WorkBuddy / CodeBuddy 调用联犀 CLI。Linux / macOS 安装入口:
curl -fsSL https://doc.unitedrhino.com/cli/install.sh | bash
已有用户执行 ur upgrade。安装 Skills 后,重启 WorkBuddy / CodeBuddy 会话:
ur skills install --dir ~/.codebuddy/skills
ur skills status
把图纸放到 AI 可访问的目录,可以这样提需求:
用联犀 CLI 分析"施工图.dwg"。按图幅整理图号、图名和设计说明;提取材料名称、型号、数量,逐条注明来源图幅。图纸没有写明的信息单独列出,不要推测。
这是请求示例,不是实测对话记录。
也可以先在终端查看解析结构,再导出 Markdown:
ur doc parse 施工图.dwg --format outline
ur doc parse 施工图.dwg --format md --out 施工图.md
这里由 CLI 解析 CAD,AI 再整理解析结果。材料数量、型号和施工要求,应回到原图确认。这套既有解析流程与前面的 PDF 导出工具是不同入口。
已有知识库的团队,可以通过联犀的纯 Go 文档解析库 unitedrhino/docling 接入。它已集成 CAD 解析,能将图幅、图片、文字放入统一文档结构,与 PDF、Word 等资料一起处理。简短接入片段如下,data 为已读入的文件字节:
doc, err := docling.ParseByExt("施工图.dwg", data)
if err != nil {
panic(err)
}
md := doc.ToMarkdown()
保存图名与来源后,再由已有知识库完成分块、索引、检索和问答。go-cad 提供图纸处理能力,docling 提供统一文档入口,并不自带一整套知识库;当前 docling 集成也不等于已接入这次新增的 PDF 导出。
放进 Go 服务:读图、出图,也能写回 DWG
除了 DWG,库也支持 DXF 与 LibreDWG 风格 JSON 输入。DWG 读取覆盖 R9/R10/R11、R13~R2018 容器,写出覆盖 R2000~R2018 六代容器。是否适合你的文件,还要看其中的实体与具体字段。
下面是一个完整的最小示例,包含解析、文本统计、PNG 输出、单页和多页 PDF,以及 DWG 回写。在新目录中执行:
go mod init cad-demo
go get github.com/unitedrhino/go-cad@d32c4e587bbf
将支持写出的 DWG 文件命名为 drawing.dwg,保存下面代码为 main.go,运行 go run .。输出使用新文件名,便于和原图对照。
// 演示 DWG 解析、文本统计、PNG/PDF 输出与 DWG 写出。
package main
import (
"bytes"
"fmt"
"os"
cad "github.com/unitedrhino/go-cad"
)
// check 在操作失败时终止,避免继续使用无效结果。
func check(err error) {
if err != nil {
panic(err)
}
}
// main 读取 drawing.dwg,将结果写入当前目录。
func main() {
// data 是原始文件内容,doc 是解析后的图纸文档。
data, err := os.ReadFile("drawing.dwg")
check(err)
doc, err := cad.Parse(data)
check(err)
fmt.Println("文本条数:", len(doc.Texts()))
// opts 设置 PNG 宽度;PDF 保持矢量输出。
opts := cad.RenderOptions{Width: 2048}
png, err := cad.RenderPNG(doc, opts)
check(err)
check(os.WriteFile("drawing.png", png, 0644))
// pdf 为整图单页;multi 为自动拆分的多页文件。
pdf, err := cad.RenderPDF(doc, opts)
check(err)
check(os.WriteFile("drawing.pdf", pdf, 0644))
multi, err := cad.RenderSheetsPDF(
doc, cad.RenderOptions{})
check(err)
check(os.WriteFile("sheets.pdf", multi, 0644))
// buf 接收 DWG 回写内容,不覆盖原始图纸。
var buf bytes.Buffer
check(cad.WriteDwg(doc, &buf))
check(os.WriteFile("roundtrip.dwg", buf.Bytes(), 0644))
}
DXF 输入改用 ParseDXF。实际服务还可以根据任务选择输出,不必每次同时生成所有格式。
选型时也可以看看仓库里的验证记录:37 张语料的严格字段对照、DXF 59/59 参考验证,以及 147 张语料的解析、渲染、写出和再解析链路。这些是已纳入样本的结果,不代表任意图纸都能无损转换。
README 另记录了 4.3MB、约 10.8 万对象样本的解析与渲染耗时;该处未完整给出硬件环境,建议作为样本记录阅读,不据此承诺线上性能,更不能当作 PDF 导出的耗时。
目前 ACIS 三维几何重建、早期版本写出等仍有边界;图案型 HATCH、专业软件代理实体也需要重点检查。文本提取针对 CAD 文本实体,图片里或画成线条的字需要另行处理。先拿一份有代表性的图纸,把关键尺寸、中文和页面完整性看一遍,最容易判断能否用起来。
开源地址:拿一份自己的图纸试试
如果你正在做图纸预览、工程资料管理,或者想把 CAD 接入 AI 文档流程,欢迎试试 go-cad。从一张 DWG 开始,先导出 PDF,再看看预览和文字提取是否能接进你的项目。
go-cad|纯 Go CAD 解析、渲染与写出
https://github.com/unitedrhino/go-cad
仓库包含源码、使用说明、测试样本与 CLI 工具。本文 PDF 能力使用 feat/pdf-export 分支,或上文固定提交。
docling|纯 Go 统一文档解析,包含 CAD 接入
https://github.com/unitedrhino/docling
也欢迎把这篇转给负责工程资料系统的同事,一起拿样本验证。遇到问题,带上脱敏图纸与预期结果反馈到仓库,让解析和出图效果继续完善。
欢迎关注我们的开源项目
联犀 things · Go 物联网开源模块
提供设备接入、物模型、设备数据与 OTA 等基础能力。本文介绍的完整 AI 平台能力,不等于该仓库的开源范围。
https://gitee.com/unitedrhino/things
欢迎点亮 Star,也欢迎关注联犀,持续分享 AI+物联网的开发进展、开源实践与应用案例!
历史阅读
- 推荐一个 AIoT 物联网平台:免费商用,还能做自己的 SaaS
- 联犀物联网应用开发套件开源啦!Web、移动端+业务后端示例,用 WorkBuddy 和 Skills 开发自己的 SaaS
- 每月电费花在哪?这套智慧能源管理平台,3D数字孪生看能耗,AI查数据、辅助配置告警
- 别再一笔笔画了!WorkBuddy 几分钟搞定配电室组态:CAD 一次图、2D 和 3D
- 纯 Go 的 CAD 解析库 go-cad,开源啦,dwg/dxf格式直接解析
- JEV 火了,物联网怎么用?附开源方案部署与测试
- 纯 Go 实现的文档解析库 docling,开源了
- AI 时代的真万物互联:人和多个 AI Agent 如何通过设备通道与外部渠道协作
- 做物联网项目,不必先买平台授权:联犀私有化部署永久免费