首页 > 其他分享 >在线CAD中根据图框拆分DWG图纸和转成pdf打印

在线CAD中根据图框拆分DWG图纸和转成pdf打印

时间:2023-08-29 10:00:32浏览次数:43  
标签:图纸 图框 DWG pdf 剪切 pt2 pt1 dwg

前言

有的CAD图纸中有许多的图框,用户需要将图纸按图框进行拆分成,或拆分完成再自动转成PDF进行打印,桌面端的CAD软件可以实现,但WebCAD中如何根据图框拆分DWG图纸并转成pdf打印呢?

 

启动云图开发包Node服务

1.要将图纸框选的部分打印成pdf或者保存为dwg文件,就需要使用到云图开发包中提供的Node服务,首先下载云图开发包: https://www.mxdraw.com/download.html

 

 

2.启动梦想云图Node.JS服务: https://help.mxdraw.com/?pid=115

3.DWG图纸要在网页上显示需要安装转换程序,如果不熟悉原理,请查看快速入门中的《如何在自己系统中浏览dwg文件》章节,如下图所示:

 

 

4.如果还有疑问可以查看:https://help.mxdraw.com/?pid=107中《mxdraw前端库预览图纸》章节,如下图: 

 

前端选框选取

首先我们通过mxdraw库来预览图框,并且可以绘制一个选框来选择需要裁剪的内容,然后通过梦想云图NodeJS服务中对应的API接口进行处理,得到一个裁剪后的图纸或者pdf文件,前端代码如下:

<div style="height: 80vh; overflow: hidden;">

    <canvas id="mxcad"></canvas>

</div>

  

import { MrxDbgUiPrPoint, MxFun, MxDbRect } from "mxdraw"

MxFun.setIniset({

  "EnableGripEidt": true,

})

 

MxFun.createMxObject({

  canvasId: "mxcad", // canvas元素的id

  // 转换后的cad图纸文件 实际访问的是../../demo/buf/$hhhh.dwg.mxb[index].wgh

  cadFile: "./buf/hhhh.dwg"

})

// 绘制临时的选框, 然后通过回调函数 根据框选的CAD坐标 请求云图Node服务对于API完成本地的转PDF功能

drawSelectBox((pt1, pt2) => {

  const params = new URLSearchParams();

  params.append('cmd', 'cutcad');

  // file 参数对应的是要拆分的目标图纸文件, 这里D:/hhhh.dwg是指的后台服务 部署的主机D盘下的hhhh.dwg文件; out参数同理

  params.append('param', `file=D:/hhhh.dwg out=D:/hhhh_1.pdf lbx=${pt1.x} lby=${pt1.y} rtx=${pt2.x} rty=${pt2.y}`);

  fetch('http://localhost:1337/users/tools', {

    method: 'POST',

    headers: {

      'Content-Type': 'application/x-www-form-urlencoded'

    },

    body: params.toString()

  }).then(async (res) => {

    const { code } = await res.json()

    if(code === 0) {

      alert("剪切成功")

    }else {

      alert("剪切失败")

    }

  }).catch((err) => {

    console.error(err)

  })

})

// 临时绘制一个选择框用于选择可以剪切的部分内容

async function drawSelectBox(callback: (pt1, pt2) => void) {

  const getPoint = new MrxDbgUiPrPoint()

  getPoint.go(() => {

    const pt1 = getPoint.value()

    // 需要将THREE.JS坐标转文档坐标.

    const cadPt1 = MxFun.docCoord2Cad(pt1.x, pt1.y, pt1.z)

    getPoint.setBasePt(pt1);

    const rect = new MxDbRect()

    rect.color = "#f00"

    rect.pt1 = pt1

    getPoint.setUserDraw((currentPoint, pWorldDraw) => {

      rect.pt2 = currentPoint

      pWorldDraw.drawCustomEntity(rect)

    })

    getPoint.go(async () => {

      const pt2 = getPoint.value()

      const cadPt2 = MxFun.docCoord2Cad(pt2.x, pt2.y, pt2.z)

      await callback(cadPt1, cadPt2)

    })

  })

}

 

调用MxWebDwg2Jpg.exe 程序剪切图纸

我们把测试的图纸放在D盘下,该文件在demo示例(zip下载地址)的public 目录下,要对CAD图纸剪切,并将剪切结果输出为 pdf和 dwg 格式,需要用到云图开发包中名称为MxWebDwg2Jpg.exe的程序,具体位置如下:

MxDrawCloudServer\Bin\Release\tool\MxWebDwg2Jpg.exe

要正确启动它需要对应的参数,首先需要一个cmd 这里我们的cmd就是 cutcad,其次还需要一些参数, 这些参数统一存放在一个txt文件中, 比如现在在D盘创建一个叫cutcad_param.txt的文件内容如下:

file=D:/hhhh.dwg out=D:/1.pdf lbx=60009.152793 lby=42457.503649 rtx=120145.567345 rty=85507.693766

这里out参数可以是.dwg的图纸文件, 那么就会剪切成图纸,如下图:

 

现在我们直接进入到MxDrawCloudServer\Bin\Release\tool目录, 运行如下命令:

MxWebDwg2Jpg.exe cutcad fileparam=D:/cutcad_param.txt

cutcad_param.txt可以是任意格式的文件, 执行后如果命令行返回的结果中code是0, 则说明执行成功, 否则失败.无论成功或者失败cutcad_param.txt都将被自动删除,如下图:

 

 

NodeJS后端实现拆分剪切pdf打印和dwg图纸

云图开发包中的NodeJs服务中对应的接口我们可以在MxDrawCloudServer\Bin\MxDrawServer\Windows\routes目录中查看对应源码,其他user.js文件中定义了tools接口,在上面前端代码中就是用这个接口进行的测试,而在tools接口中是调用了convert.js文件中的callCADTools函数,如下图:

 

根据上图callCADTools函数的代码, 我们可以看到,其实就是生成存放参数的文件,然后调用一下我们提供的MxWebDwg2Jpg.exe就可以了。

 

剪切后的实际效果图

剪切红色选框中的内容:

剪切部分转换成pdf和dwg文件打开显示内容:

 

需要注意的事项

* 部分图纸裁剪可能无效, 有问题的图纸可以反馈给我们

* 前端mxdraw库实现裁剪需要将坐标转成CAD文档坐标, 然后后端通过转换前的原图纸进行裁剪

* 云图开发包Node服务中的API接口只是简单的测试一下功能是可以正常使用的, 具体使用的时候需要根据实际需求进行修改

* 剪切的内容可以通过out参数 来存放在一个pdf格式或者dwg格式的文件中

Demo源码:

https://gitee.com/mxcadx/mxdraw-article/tree/master/%E6%A0%B9%E6%8D%AE%E5%9B%BE%E6%A1%86%E6%8B%86%E5%88%86%E5%9B%BE%E7%BA%B8%E8%BD%AC%E6%88%90pdf%E6%89%93%E5%8D%B0

标签:图纸,图框,DWG,pdf,剪切,pt2,pt1,dwg
From: https://www.cnblogs.com/yzy0224/p/17663998.html

相关文章

  • centos7下安装libreoffice供word和ppt转pdf预览使用
    一、卸载系统当前的libreoffice并安装新的,执行如下命令:yumremovelibreoffice-*在命令行执行libreoffice--version,检查是否已经安装LibreOffice。1、在centos7下安装LibreOffice,可直接使用yum安装即可,在命令行输入以下命令:yuminstalllibreofficeyuminstalllibreoffice-he......
  • 使用PS去除PDF水印的简单实用方法
    使用PS去除PDF水印的简单实用方法首先首先用PS打开文件,随后选择【图像】-【调整】-【色阶】,调出色阶面板;接着拖动滑块向左移动,直到水印完全消失,最后点击【确定】这样水印就删除啦! ......
  • 【专题】2022品牌营销决策解决方案报告PDF合集分享(附原数据表)
    全文链接:https://tecdat.cn/?p=33511根据报告合集显示,在消费者的亲友分享、社交平台、订单评价等环节,00后表现出活跃的参与度,而90后和95后在部分环节也较为活跃。相比之下,70后和80后在分享中的参与度最低,主要以亲友分享为主。阅读原文,获取专题报告合集全文,解锁文末335份品牌营销......
  • 【专题】2023品牌内容营销洞察报告PDF合集分享(附原数据表)
    全文链接:https://tecdat.cn/?p=33511根据报告合集显示,在消费者的亲友分享、社交平台、订单评价等环节,00后表现出活跃的参与度,而90后和95后在部分环节也较为活跃。相比之下,70后和80后在分享中的参与度最低,主要以亲友分享为主。阅读原文,获取专题报告合集全文,解锁文末335份品牌营销......
  • 【专题】洞察营销的战略优势与实操报告PDF合集分享(附原数据表)
    全文链接:https://tecdat.cn/?p=33511根据报告合集显示,在消费者的亲友分享、社交平台、订单评价等环节,00后表现出活跃的参与度,而90后和95后在部分环节也较为活跃。相比之下,70后和80后在分享中的参与度最低,主要以亲友分享为主。阅读原文,获取专题报告合集全文,解锁文末335份品牌营销......
  • react-pdf在部分iOS手机上加载pdf失败问题解决
    最近项目快结束了,测试提了一个bug,iOS手机上加载pdf一直在转圈,加载不出来内容。看到这个bug,在电脑上和安卓手机上没有问题,iOS手机中打开确实又问题,初步确定为app问题。我们的项目是集成在客户的app里的,可能是app内的WebView和Safari有一些差异导致的问题。首先直接在iOS手机上用a......
  • 用Python制作一个PDF转Word工具
    工具:Python3.9.13,VSCode1.73.1,pdf2docx0.5.6,tkinter,Win10HomePDF文件不易编辑,想要编辑需要转成Word,但网上的工具很多要充VIP,所以今天我们就来做个PDF转Word工具。首先先安装第三方库:pipinstalltkinter导入库:#coding=utf-8importosimporttkinterfrompdf2docximport......
  • 分享一个批量转换某个目录下的所有ppt->pdf的Python代码
    大家好,我是皮皮。一、前言前几天在Python最强王者群【Python小小小白】分享了一份Python自动化办公的代码,可以批量转换某个目录下的所有ppt->pdf,非常强大。二、实现过程在正式跑代码之后,你可能需要按照对应的库,不然会报错。代码运行之后,本地会出现下面的UI界面,选择PPT文件......
  • python将word文档转为pdf
    用python处理word文档,将word文档转换为pdf文档,可以使用docx2pdf模块。使用pip安装即可。关键代码如下:fromdocx2pdfimportconvertconvert("需要转换的word文档","生成的pdf文档")如果需要批量进行转换的话,最好是每一个后面加点延时,并做好异常处理。......
  • pdfjs-dist v2.11.338写个react demo
    app.jsximport'./App.css'import*aspdfjsfrom"pdfjs-dist";import"pdfjs-dist/web/pdf_viewer.css";import{useEffect,useRef,useState}from'react'import{PDFViewer,PDFLinkService,EventBus}from'p......