【利用cloudconvert网站api简单6步骤实现cad文件格式dwg转dxf】

目录

前言

一、简单介绍cloudconvert?

二、dwg2dxf实现步骤

1.引入库

2.创建api客户端

3.创建转换job

4.上传dwg格式源文件

5.下载dxf格式文件

6.删除云端job

总结


前言

众所周知Autodesk公司拥有dwg图形格式的完全版权,而dxf则为一个开源的图形格式,因此在python开源库中鲜有免费的dwg转dxf应用。但是搜索网络,我们仍然会发现有些网站能够提供在线dwg转dxf服务(cloudconvert,anyconv,mygeodata),甚至还有相应的api供开发者使用。利用python编程对接这些api,可以实现常用的dwg转dxf应用。下面以cloudconvert为例,展示其实现过程。


一、简单介绍cloudconvert?

CloudConvert网站提供包括文档、音频、视频、压缩包、cad等类型的丰富的文件转换服务,其中就包括CAD Converter | CloudConvert。转换效果可以通过在线转换(如下图所示)来查看,亲测是挺不错的。

【利用cloudconvert网站api简单6步骤实现cad文件格式dwg转dxf】_第1张图片

 在线转换可以随时免费进行。其api则提供了几档服务,如下图:

【利用cloudconvert网站api简单6步骤实现cad文件格式dwg转dxf】_第2张图片

 可以选择8美元/500分钟的方案,也可以选择8美元/月提供1000分钟转换时长的方案。而且,作为个人使用的话,也可以不花钱,注册即可享受25min/天的转换时长

二、dwg2dxf实现步骤

1.引入库

代码如下(示例):

import cloudconvert

2.创建api客户端

代码如下(示例):

    api_key = 'api_key_example'    # api_key为申请账号的token
    cloudconvert.configure(api_key=api_key, sandbox=False)

其中api_key_example为注册账号并首次进入dashboard面板后展示的api token,注意一定要将这个很长的token复制粘贴下来,dashboard中仅仅展示这一次,以后都查询不到。

3.创建转换job

代码如下(示例):

    job = cloudconvert.Job.create(payload={
        "tasks": {
            "import-1": {
                "operation": "import/upload"
            },
            "task-1": {
                "operation": "convert",
                "input_format": "dwg",
                "output_format": "dxf",
                "engine": "cadconverter",
                "input": [
                    "import-1"
                ]
            },
            "export-1": {
                "operation": "export/url",
                "input": [
                    "task-1"
                ],
                "inline": False,
                "archive_multiple_files": False
            }
        },
    })

这个转换job包括三个task(import-1,task-1,export-1),分别为导入文件任务、转换文件任务和输出转后文件任务。当然,这三个任务名可以自己任意定义。每个任务的字典中包含了相应的设置参数。其实,cloudconvert提供了一个非常简单的任务定义方法,就是在Job Builder | CloudConvert API中用操作页面的方式来自动生成对应的job代码,如下图:

【利用cloudconvert网站api简单6步骤实现cad文件格式dwg转dxf】_第3张图片

4.上传dwg格式源文件

代码如下(示例):

    upload_task_id = job['tasks'][0]['id']    # job['tasks'][0]对应的是上传任务,job['tasks'][1]是转换任务
    upload_task = cloudconvert.Task.find(id=upload_task_id)
    cloudconvert.Task.upload(file_name=file_name, task=upload_task)

利用cloudconvert库中的Task类可以轻松实现任务的定位和文件的上传。因为在第3步中定义了转换任务,因此上传动作完成后,服务器会自动开始转换任务。注意:由于api原因,file_name不能包含中文。这里转换任务的执行对象为输入任务import-1,也就是说task-1的参数应为import-1。

5.下载dxf格式文件

代码如下(示例):

    exported_url_task_id = job['tasks'][2]['id']    # job['tasks'][2]对应的是下载任务
    res = cloudconvert.Task.wait(id=exported_url_task_id)  # 使用cloudconvert.Task的内置函数等待转换文件完成
    file = res.get("result").get("files")[0]  # 使用cloudconvert.Task的内置函数提取转换文件
    cloudconvert.download(filename=resource.replace('dwg', 'dxf'), url=file['url'])    # 下载文件

利用cloudconvert库中的Task类可以轻松实现任务的定位和文件的下载。注意:这里输出任务的执行对象为task-1,也就是说export-1的参数应为task-1。

6.删除云端job

云端job若达到数量限至,无法进行格式转换任务,因此比较好的办法是每执行转换并完成文件下载后即删除这个job,代码如下(示例):

    exported_url_task_id = job['tasks'][2]['id']    # job['tasks'][2]对应的是下载任务
    res = cloudconvert.Task.wait(id=exported_url_task_id)  # 使用cloudconvert.Task的内置函数等待转换文件完成
    file = res.get("result").get("files")[0]  # 使用cloudconvert.Task的内置函数提取转换文件
    cloudconvert.download(filename=resource.replace('dwg', 'dxf'), url=file['url'])    # 下载文件

当然,job在云端过了一定时间后会自动删除,这个步骤也可以忽略。只有在短时间频繁创建job会触发转换限至。

7.完整代码

好了,为了保证在读者复刻的时候能够正确执行程序,这里将代码完整进行展示:

import cloudconvert

def dwg2dxf(file_name):
    # 1.定义cloudconvert的api_key(token)
    api_key = 'api_key_example'

    # 2.创建api客户端
    cloudconvert.configure(api_key=api_key, sandbox=False)

    # 3.创建一个job
    job = cloudconvert.Job.create(payload={
        "tasks": {
            "import-1": {
                "operation": "import/upload"
            },
            "task-1": {
                "operation": "convert",
                "input_format": "dwg",
                "output_format": "dxf",
                "engine": "cadconverter",
                "input": [
                    "import-1"
                ]
            },
            "export-1": {
                "operation": "export/url",
                "input": [
                    "task-1"
                ],
                "inline": False,
                "archive_multiple_files": False
            }
        },
    })

    # 4.启动job对应的上传任务(上传原文件)
    upload_task_id = job['tasks'][0]['id']    # job['tasks'][0]对应的是上传任务,job['tasks'][1]是转换任务
    upload_task = cloudconvert.Task.find(id=upload_task_id)
    cloudconvert.Task.upload(file_name=file_name, task=upload_task)

    # 5.启动job对应的下载任务(下载转换后的文件)
    exported_url_task_id = job['tasks'][2]['id']    # job['tasks'][2]对应的是下载任务
    res = cloudconvert.Task.wait(id=exported_url_task_id)  # 使用cloudconvert.Task的内置函数等待转换文件完成
    file = res.get("result").get("files")[0]  # 使用cloudconvert.Task的内置函数提取转换文件
    cloudconvert.download(filename=resource.replace('dwg', 'dxf'), url=file['url'])    # 下载文件

    # 6.为了防止云端job数目过多而产生的api请求错误,在job完成后即将其删除
    cloudconvert.Job.delete(job['id'])

if __name__ == '__main__':
    resource = 'C:\\Users\\khs001\\Desktop\\Drawing2.dwg'
    dwg2dxf(resource)

总结

dwg2dxf的api实现结构如下:

【利用cloudconvert网站api简单6步骤实现cad文件格式dwg转dxf】_第4张图片

以上,通过简单的6个步骤实现dwg2dxf格式转换。

你可能感兴趣的:(网站api应用,python)