11

我收到一个带有 Word docx 文档的表单上传。我成功完成了所有解析。然后我必须在网络上显示该 Word 文档。

我现在遇到的问题是我嵌入了 EMF 文件(PIL 库识别为 WMF 格式),我不知道如何将它们转换为可以在网络上显示的东西(任意选择 PNG)。

代码有点简单:

im = PIL.Image.open(StringIO.StringIO(数据))
fmt = im.format
如果(fmt == 'WMF'):
  fmt = 'PNG'
  输出 = StringIO.StringIO()
  im.save(输出,格式=fmt)
  数据 = 输出.getvalue()
  输出.close()
return '''<img src="data:image/{0};base64,{1}" />'''.format(fmt, base64.encodestring(data))

我得到的错误是:

IOError: cannot find loader for this WMF file

这些 Word 文档来自普通用户,他们可能只是从网络上剪切和粘贴图像或从文件中插入。

在 linux 系统上是否有适合我的解决方案?

谢谢。

编辑:

为了我的辩护,我试图将该文档上传到谷歌驱动器并且图像也没有显示。也许没有简单的解决方案?

4

4 回答 4

5

点安装枕头

从 PIL 导入图像

Image.open("xxx.wmf").save("xxx.png")

于 2016-05-05T07:15:22.880 回答
4

我发现使用 Wand 包进行这种转换更容易。我尝试了以前的建议但没有成功。所以这就是我所做的:(顺便说一句,我想将所有'.wmf'文件转换为pdf)

import os

from wand.image import Image as wima

folder='C:/Users/PythonLover/Pictures/pics'

for oldfilename in os.listdir(folder):

    if oldfilename.endswith(".wmf"):

        with wima(filename=folder+'/'+oldfilename) as img:

            newfilename = oldfilename.split('.')[0]+'.pdf'

            newfilename = folder+'/'+newfilename

            img.format = 'pdf'

            img.save(filename=newfilename)
于 2017-09-05T15:48:05.243 回答
2

您需要了解您正在处理的内容,以便了解为什么您尝试做的事情是有问题的。WMF 文件(或更新的 EMF 和 EMF+ 格式)需要 Windows GDI 来呈现它所描述的图像。因此,当您在 Windows 之外转换此格式时,没有简单的解决方案,因为您需要复制 GDI API。

一种解决方案是使用依赖于 OpenOffice/LibreOffice 的 UNO 绑定的unoconv工具。第二种解决方案将使用pyemf模块对输入进行解码,然后使用第二个工具(由您完成)将其渲染。

于 2013-01-03T01:58:27.343 回答
1

您可以使用libwmf将图像转换为 SVG,然后再pyrsvg转换为 PNG (在另一个问题中描述)

我还没有找到libwmf项目网站,但 Debian(和 Ubuntu)有libwmf-bin包含wmf2svg实用程序的包。

于 2012-12-31T20:45:48.213 回答