将Visio文档另存为HTML

时间:2018-04-20 14:39:49

标签: python com visio win32com

我正在尝试将大量Visio文件从.vsd转换为.html,但每个文件都有很多页面,因此我需要将所有页面转换为单个{{1}文件。

使用下面的Python代码,我可以转换为PDF,但我真正需要的是HTML。我注意到我可以使用.html,但如何使用它?有什么想法吗?

win32com.client.Dispatch("SaveAsWeb.VisSaveAsWeb")

1 个答案:

答案 0 :(得分:1)

Visio无法做到这一点。您不能“将所有页面转换为单个HTML文件”。你将拥有一个“根”文件和一个“支持”文件的文件夹。

VisSaveAsWeb已有详细记录,无需猜测: https://msdn.microsoft.com/en-us/vba/visio-vba/articles/vissaveasweb-object-visio-save-as-web

- 更新

使用python,处理SaveAsWeb并不是那么简单。它似乎默认为自定义界面(非分派)。我不认为使用win32com库可以解决这个问题,但comtypes似乎有效(comtypes库正在构建基于类型库的客户端,即它也支持“自定义”接口):

import sys
import comtypes

from comtypes import client
from os.path import abspath

f = abspath(sys.argv[1])

visio = comtypes.client.CreateObject("Visio.InvisibleApp")
doc = visio.Documents.Open(f)

comtypes.client.GetModule("{}\\SAVASWEB.DLL".format(visio.Path))

saveAsWeb = visio.SaveAsWebObject.QueryInterface(comtypes.gen.VisSAW.IVisSaveAsWeb)
webPageSettings = saveAsWeb.WebPageSettings.QueryInterface(comtypes.gen.VisSAW.IVisWebPageSettings)

webPageSettings.TargetPath = "{}.html".format(f)
webPageSettings.QuietMode = True

saveAsWeb.AttachToVisioDoc(doc)
saveAsWeb.CreatePages()

visio.Quit()
exit(0)

除此之外,您可以尝试“命令行”界面: http://visualsignals.typepad.co.uk/vislog/2010/03/automating-visios-save-as-web-output.html

import sys
import win32com.client

from os.path import abspath

f = abspath(sys.argv[1])

visio = win32com.client.Dispatch("Visio.InvisibleApp")
doc = visio.Documents.Open(f)
visio.Addons("SaveAsWeb").Run("/quiet=True /target={}.htm".format(f))

visio.Quit()
exit(0)

除此之外,你可以尝试我的visio svg-export:)