将SVG / PDF转换为EMF

时间:2016-02-12 16:28:19

标签: python python-2.7 svg matplotlib

我正在寻找一种将matplotlib图保存为EMF文件的方法。 Matplotlib允许我保存为PDF或SVG矢量文件,但不能保存为EMF。

经过长时间的搜索后,我仍然无法通过python找到一种方法。希望任何人都有一个想法。

我的解决方法是使用子进程调用inkscape,但这远非理想,因为我希望避免使用外部程序。

我正在使用wx后端运行python 2.7.5和matplotlib 1.3.0。

3 个答案:

答案 0 :(得分:1)

对于仍然需要此功能的任何人,我编写了一个基本功能,只要您安装了inkscape,就可以通过matplotlib将文件保存为emf。

我知道操作人员不希望出现墨迹混乱,但是后来找到此帖子的人只是想使其发挥作用。

import matplotlib.pyplot as plt
import subprocess
import os
inkscapePath = r"path\to\inkscape.exe"
savePath= r"path\to\images\folder"

def exportEmf(savePath, plotName, fig=None, keepSVG=False):
    """Save a figure as an emf file

    Parameters
    ----------
    savePath : str, the path to the directory you want the image saved in
    plotName : str, the name of the image 
    fig : matplotlib figure, (optional, default uses gca)
    keepSVG : bool, whether to keep the interim svg file
    """

    figFolder = savePath + r"\{}.{}"
    svgFile = figFolder.format(plotName,"svg")
    emfFile = figFolder.format(plotName,"emf")
    if fig:
        use=fig
    else:
        use=plt
    use.savefig(svgFile)
    subprocess.run([inkscapePath, svgFile, '-M', emfFile])

    if not keepSVG:
        os.system('del "{}"'.format(svgFile))

用法示例

import numpy as np
tt = np.linspace(0, 2*3.14159)
plt.plot(tt, np.sin(tt))
exportEmf(r"C:\Users\userName", 'FileName')

答案 1 :(得分:0)

如果您的Matplotlib文件以PDF格式保存,则可以使用文件转换工具(例如https://www.freefileconvert.com/pdf-emf)将其转换为emf(增强型Windows图元文件)。

答案 2 :(得分:0)

我认为该功能很酷,但在我的情况下,inkscape语法似乎不起作用。我在其他帖子中搜索,发现为: inkscape filename.svg-导出文件名filename.emf
因此,如果我在子进程参数中用--export-filename替换“ -M”,则一切正常。