kkFileView CAD图纸在线预览实践
【免费下载链接】kkFileViewUniversal File Online Preview Project based on Spring-Boot项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView
当工程团队要在浏览器里评审一张 DWG 图纸时,逐份打开 CAD 客户端核对既慢,又给服务器装商业软件不现实。kkFileView 是基于 Spring Boot 的文件在线预览项目,把 CAD 文件接收后异步转换成 SVG、PDF 或 TIFF,再直接在浏览器里渲染出来。
📐 从 URL 参数到预览页:一条 CAD 请求的完整链路
预览入口是一个带url参数的在线预览请求,服务端先用 FileAttribute.java 把文件名、后缀、源地址、officePreviewType(image / allImages / pdf)等参数打包成一个请求上下文对象。后缀落在FileType.CAD的清单里(dwg、dxf、dwf、iges、igs、dwt、dng、ifc、dwfx、stl、cf2、plt)时,FilePreviewFactory通过 Spring 容器把请求路由到CadFilePreviewImpl。
这一步跑通了,后面就顺了:请求不用关心文件在本地还是远端,CadFilePreviewImpl统一先用DownloadUtils把源文件拉到本地临时目录,拿到真实路径后才进入转换逻辑。
⚙️ CadToPdfService 内部:从 DWG 二进制到 SVG / PDF / TIFF
CadFilePreviewImpl.java 本身不做重活,它只负责三件事:查缓存(转换过的文件直接渲染)、没命中就发起异步转换并返回一个"文件正在转换中"的等待页、转换完成后由回调把结果登记进缓存表。
真正的转换在CadToPdfService里完成,核心流程是:信号量限流(并发数由cad.thread控制)→Image.load加载 CAD 文件(编码固定为简体中文)→ 按cad.preview.type配置生成SvgOptions、PdfOptions或TiffOptions→ 写入输出文件。整个过程通过CompletableFuture异步执行,超时由cad.timeout控制,超时任务会被取消并清理残留产物。转换进度会实时更新到状态管理器,等待页轮询的就是这份进度。
🚀 跑通它:从 clone 到第一张图纸预览
本地启动只需 Java 17 环境(详见项目文档的版本要求),拉下代码直接运行主类:
git clone https://gitcode.com/GitHub_Trending/kk/kkFileView cd kkFileView/server mvn spring-boot:run启动后访问http://localhost:8012/,把一份 dwg 文件拖进去,或直接拼在线预览链接,例如:
http://localhost:8012/onlinePreview?url=http://localhost:8012/files/你的图纸.dwg&type=dwg首次请求会先看到转换等待页,几秒到几十秒后(取决于图纸复杂度)跳转到预览页:默认svg模式下是一整张矢量图纸,可无限缩放;换成pdf模式则是可翻页的 PDF。这一步跑通后,把预览页 URL 直接嵌进 OA 或 PLM 页面就能用了。
🔧 往深里调:两个关键配置和一个扩展入口
application.properties 里与 CAD 最相关的是两项。cad.preview.type决定输出形态(svg / pdf / tif),影响浏览器端的渲染方式;cad.conversionmodule决定转换引擎——1是内置的 aspose-cad,支持格式最多但比较吃服务器资源;2是外部 cadviewer 进程,需要按操作系统下载转换包并放置中文字体到cad.cadconverterpath指定的目录。并发和超时分别由cad.thread、cad.timeout调整。
扩展入口是FilePreview接口:每种文件类型对应一个实现类,走FileType→getInstanceName()→ Spring Bean 的路由。想自定义 CAD 后处理(比如输出后改图、加水印逻辑),照CadFilePreviewImpl的骨架复制一份、改 Bean 名即可,不需要动主流程。
🏭 谁在什么情况下用
设计协同场景里,甲方或业主不一定装 CAD,把图纸预览链接贴进评审系统,双方看同一张图,避免"我这边字体不对"这类扯皮。档案与文档系统里,kkFileView 常被嵌在 OA、PLM 后面当渲染服务,历史 DWG/DXF 图纸入库后无需原样打开即可在线调阅,stl、dxf 这类交换格式也能一并覆盖。
⚠️ 用之前要知道的事
第一,它输出的是可渲染的图纸画面,不是结构化的尺寸、公差或材料参数——别拿它当 CAD 数据解析器用,要读图层实体得自己解析 DXF。第二,aspose-cad 引擎转换大图纸时 CPU 占用高,默认并发 5、超时 90 秒,超大的装配图建议调大cad.timeout或切到 cadviewer 模块。第三,外部 cadviewer 模块依赖字体包,缺字体会导致中文标注乱码,部署时别漏掉字体目录。
一句话收束:需要"浏览器里快速看图"选 kkFileView 合适;需要"从图纸里抠结构化参数",它目前只负责到渲染这一步。
【免费下载链接】kkFileViewUniversal File Online Preview Project based on Spring-Boot项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考