Skip to content
On this page

导出pdf

下面我们将介绍如何利用 mxcad 插件实现在CAD图纸中的导出pdf功能。该功能中用户可以自主选择图纸范围并导出pdf格式的文档。图纸转pdf功能提高了文件的可读性和可分享性,还便于存储和处理,是一个非常实用的数据转换功能。

功能实现

  1. 设置导出范围

我们可以调用 MxCADUiPrPoint 方法获取导出范围。

ts
// 选择导出范围.
let getPoint = new MxCADUiPrPoint();
getPoint.setMessage("\n指定输出范围第一点:");
// 获取范围的第一个角点
let pt1 = await getPoint.go();
if (!pt1) return;

getPoint.setMessage("\n指定输出范围第二点:");
// 设置选择范围动态填充样式
getPoint.setUserDraw((currentPoint: McGePoint3d, worldDraw) => {
    // 设置范围框颜色即位置
    worldDraw.setColor(0xFF0000);
    let pl = new McDbPolyline();
    pl.addVertexAt(pt1);
    pl.addVertexAt(new McGePoint3d(pt1.x, currentPoint.y))
    pl.addVertexAt(currentPoint);
    pl.addVertexAt(new McGePoint3d(currentPoint.x, pt1.y))
    pl.constantWidth = MxFun.screenCoordLong2Doc(2);
    pl.isClosed = true;
    worldDraw.drawMcDbEntity(pl);
    // 设置范围框内的填充样式
    let points = [];
    points.push(pt1.toVector3());
    points.push(new McGePoint3d(pt1.x, currentPoint.y).toVector3());
    points.push(currentPoint.toVector3());
    points.push(new McGePoint3d(currentPoint.x, pt1.y).toVector3())
    worldDraw.setColor(0x003244);
    worldDraw.drawSolid(points, 0.5)

});
// 设置禁用捕捉与正射追踪
getPoint.setDisableOsnap(true);
getPoint.setDisableOrthoTrace(true);
// 获取范围的第二个角点
let pt2 = await getPoint.go();
if (!pt2) return;
  1. 导出pdf

在上述步骤中我们已经获取到了pdf在图纸上的范围,因此接下来我们可以直接调用 McObject.saveFileToUrl() 方法来导出目标pdf。其中,如果不设置导出图纸范围则将默认导出所有的图纸内容。

ts
// 设置参数
let param = {
width: "2100",// 图纸长
height: "2970",// 图纸宽
bd_pt1_x: "" + pt1.x, // 角点1x
bd_pt1_y: "" + pt1.y, // 角点1y
bd_pt2_x: "" + pt2.x, // 角点2x
bd_pt2_y: "" + pt2.y // 角点2y
};
// 把mxweb文件 ,保存到服务器上,再转成pdf。
// printPdfUrl:后端请求接口
MxCpp.getCurrentMxCAD().saveFileToUrl(printPdfUrl, (iResult: number, sserverResult: string) => {
try {
    let ret = JSON.parse(sserverResult);
    if (ret.ret == "ok") {
     // filePath:下载文件的 URL 地址
    MxTools.downloadFileFromUrl(filePath, ret.file);
    }
    else {
    console.log(sserverResult);
    }
} catch {
    console.log("Mx: sserverResult error");
}
}, undefined, JSON.stringify(param));~

TIP

注意: 将图纸转为PDF需调用node.js后台服务,因此,在调用上述方法之前请先启动云图开发包中的后台服务。 如果您还不清楚如何使用云图开发包启动服务,请参考云图开发包入门教程

功能实践

实践效果如下:

  • 点击导出jpg按钮,执行导出jpg方法
  • 根据命令行提示点击鼠标左键开始拉框选择导出范围
  • 再次点击鼠标左键结束框选
  • 成功将目标范围的图纸内容导出为jpg格式的图片