将 Visio 文档另存为 HTML

Save Visio Document as HTML

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

使用下面的 Python 代码,我可以转换为 PDF,但我真正需要的是 HTML。我注意到我可以使用 win32com.client.Dispatch("SaveAsWeb.VisSaveAsWeb"),但是如何使用它呢?有什么想法吗?

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)
doc.ExportAsFixedFormat(1, '{}.pdf'.format(f), 0, 0)

visio.Quit()
exit(0)

Visio 无法做到这一点。你不能 "convert all pages into a single HTML file"。您将拥有一个 "root" 文件和一个包含 "supporting" 个文件的文件夹。

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

--更新

有了 python,事实证明处理 SaveAsWeb 并不是那么简单。它似乎默认为 自定义接口 (非调度)。我不认为使用 win32com 库可以处理这个问题,但是 comtypes 似乎可以工作(comtypes 库正在基于类型库构建客户端,即它还支持 "custom" 接口):

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)

除此之外,您可以尝试"command line"界面: 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 :)