前言
在用python进行绘图时,无法保存为emf矢量图格式。但在论文word中,通常使用emf较为清晰方便。在python中可以将图保存为svg矢量图格式,然后通过CloudConvert网站手动转为emf格式。但手动转换可能比较麻烦,对于写代码的小伙伴来说更喜欢自动化的方式,而在该网站中就有API接口,可以注册账号以后用代码进行自动转换和保存。具体步骤如下,代码付在最后。
1 注册CloudConvert账号
CloudConvert网站中可以通过邮箱注册账号(注册后会发送验证邮件,请及时验证!!!!)
2 创建API获取token
进入Dashboard,点击API下authorization-API keys,创建新的api,并在scope是中勾选所有选项。每个账号每天只能通过API自动免费转换24次,可以购买次数等。注意:得到API token后复制保存,只会显示一次,后面无法查看!!!!!
3 通过job builder自动生成job tasks代码
在job builder 中import上传自己需要转换的文件,task添加设置需要转换为什么格式,export设置转换后的文件输出
完整代码
运行代码之前需要安装cloudconvert库
import cloudconvert
def svg2emf(file_name):
# 1.定义cloudconvert的api_key(token)
api_key = '**************************'
# api_key为申请账号的token
# 2.创建api客户端
cloudconvert.configure(api_key=api_key, sandbox=False)
# 3.创建一个job
job = cloudconvert.Job.create(payload={
"tasks": {
# 导入文件
"import-1": {
"operation": "import/upload"
},
# 转换文件 svg转emf
"convert-1": {
"operation": "convert",
"input_format": "svg",
"output_format": "emf",
"engine": "inkscape",
"input": [
"import-1"
]
},
# 输出文件(将转换的emf文件输出为url)
"export-1": {
"operation": "export/url",
"input": [
"convert-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('svg', 'emf'), url=file['url']) # 下载文件
# 6.为了防止云端job数目过多而产生的api请求错误,在job完成后即将其删除
cloudconvert.Job.delete(job['id'])
if __name__ == '__main__':
resource = r'*********.svg'
svg2emf(resource)