1. 说明
B/S 架构的系统, 一般后台是 java 语言, 前台是 html+JS, 控件对象是在前台加载运行, 所以与后台 java 语言没有关系, 调用控件函数直接使用 JS 语言, 然后 JS 再与后台 java 语言通信.
如果想要在后台处理 DWG 图纸, 比如转 PDF,jpg, 或提取信息, 这时就需要 java 调用控件了, 因控件提供开发 API 是使用 COM 技术封装, 所以 java 需要使用 jacob 库来调用, java 如何调用 COM 接口, 可以百度 Java COM 调用, 先学习一下 java 如何调用 COM.
2. java 调用控件 API 流程
2.1, 下载控件
在
http://www.mxdraw.com/download.html 下载控件最新安装包, 如下 :
下载的是一个 exe 程序, 它是一个自解压缩包, 双击直接解压, 在解压目录下有如下文件:
管理员方式运行 "RegMxDrawX.bat" 注册控件, 或直接运行 MxDrawx86Setup(20200624).exe 程序安装控件.
2.2, 在 Eclipse 中使用 JAVA 调用
下载
http://www.mxcad.net:2080/JavaCom.rar,java 包, 该包可以让 java 调用 com 组件.
然后双击解压, 得到如下文件:
把 jacob-1.17-M2-x64.dll,jacob-1.17-M2-x86.dll 拷到
java/jdk/bin 目录下, java/jre/bin 目录下, 和 C:/Windows/system32
新建一个 JAVA 工程
2.3, 编写代码, 调用控件
下面代码, 打开 1.dwg 图纸, 然后转成一个 jpg 文件.
- import com.jacob.activeX.ActiveXComponent;
- import com.jacob.com.Dispatch;
- import com.jacob.com.Variant;
- public class MyTest {
- public static void main(String[] args) {
- //com 组件调用
- ActiveXComponent smsg = new ActiveXComponent("MxDrawX.MxDrawService");
- // 获取 Active 对象
- Dispatch msg = smsg.getObject();
- // 调用组件方法, 打开指定 dwg 文件
- Variant v = msg.call(msg, "open", "e:/1.dwg");
- System.out.println(v);
- Object[] colorparams = new Object[] {
- 255, 255, 255
- };
- msg.call(msg, "SetViewColor", colorparams);
- // 参数 jpg 保存路径, 位图宽度方向的像素,-1 取系统默认值: 1000 , 位图宽度方向的像素,-1 取系统默认值: 1000
- Object[] params = new Object[] {
- "e:/1.jpg", 600, 860
- };
- // 将打开的 dwg 图纸, 保存为 jpg 文件.
- msg.call(msg, "WriteJpg", params);
- // 关闭打开的 dwg 文件
- msg.call(msg, "close");
- smsg.safeRelease();
- }
- };
2.3,MxDrawService 说明
MxDrawService 是专门提供的一个, 服务器后台调用组件, 它可以在不需要控件界面时, 调用控件相关接口, 更多该组件的函数的说明, 可以参考控件安装目录下: MxDraw5.2Help(20200624).chm 文件:
3. 技术建议
在服务器后台自动处理 DWG 图纸, 比 DWG 图转 PDF,jpg, 图纸剪切, 等费时操作时, 尽量把这块工作写到一个单独的 exe 程序中 (控制台程序也行), 然后在 java 服务后台程序调用该 exe 进程, 把要处理的图纸通过命令行参数传给进程, 进程处理好后, 把结果写到一个约定位置的 JSON 文件, java 后台程序只需要在一个时种中每过几秒去看一下那个 JSON 文件是否生成, 得到处理结果, 这样有三个好处: 费时操作不会阻塞 java 服务主进程, 处理程序如果崩溃不会影响主进程, 可以轻松做多到多进程同时处理多个图纸.
来源: http://www.bubuko.com/infodetail-3614048.html