如何控制Visio导出SVG文件中的Tooltip(提示框)
如何控制Visio导出SVG文件中的Tooltip(提示框)
我完全懂你这种头疼的感觉——导出的SVG里每个元素都弹出“Stop callout.10”这种莫名其妙的形状名提示,想自定义或删掉都找不到正确入口,手动改SVG又太折腾。结合你的尝试和实际使用经验,给你几个可行的解决方案:
一、批量消除不必要的形状名Tooltip
方法1:用VBA脚本批量处理(规避空名称限制)
Visio不让直接把形状名设为空,但我们可以用VBA把不需要Tooltip的形状名改成全角空格(Visio允许,导出后<title>内容为空,浏览器就不会显示提示了):
- 打开Visio的「开发者」选项卡(没显示的话,去「文件→选项→自定义功能区」勾选“开发者”)
- 点击「Visual Basic」打开VBA编辑器
- 插入新模块,粘贴以下代码:
Sub RemoveShapeTooltips() Dim shp As Shape ' 遍历当前页面所有形状 For Each shp In ActivePage.Shapes ' 可添加判断:比如只处理不带超链接的形状,取消下面注释即可 ' If shp.Hyperlinks.Count = 0 Then ' 设置为全角空格,导出后无Tooltip shp.Name = " " ' End If Next shp End Sub
- 运行宏,就能批量把当前页的目标形状名改成空白字符,导出SVG后这些元素就不会有提示了。如果只想处理特定形状,把
ActivePage.Shapes改成Selection.Shapes,先选中目标形状再运行即可。
方法2:导出后用正则批量清理SVG代码
不想用VBA的话,导出SVG后用VS Code这类编辑器批量删除形状的<title>标签:
- 打开导出的SVG文件,按
Ctrl+F打开查找替换,切换到「正则表达式」模式 - 查找内容:
<title>.*?</title> - 替换内容留空,点击「全部替换」
注意:如果有带超链接的元素,想保留超链接的提示,可以调整正则只删除<g>标签下的<title>,比如查找:<g([^>]*)>\s*<title>.*?</title>\s*,替换为<g$1>,这样删除子元素的<title>后,浏览器会自动读取父<a>标签的xlink:title作为提示。
二、为需要的元素设置自定义Tooltip
针对带超链接的元素
要让超链接的提示文本显示出来,得让浏览器优先读取超链接的xlink:title,而不是形状的<title>:
- 右键目标形状→「超链接」,设置好「屏幕提示」内容
- 用上面的方法去掉该形状的
<title>(要么用VBA改形状名为全角空格,要么导出后删SVG里的对应标签)
导出后,鼠标hover在超链接元素上时,就会显示你设置的自定义提示,而不是默认的形状名。
针对普通元素(不带超链接)
如果普通元素需要自定义Tooltip,直接去「开发者」选项卡→「形状名称」,把形状名改成你想要的提示文本就行——虽然不能设空,但可以直接用需要的内容,导出后SVG的<title>就是这个文本,浏览器会自动显示它作为提示。
三、关于Visio导出选项的补充
你试过的「包含Visio数据」选项,其实是把Alt Text等信息放到非标准的<v:userDefs>标签里,浏览器根本不识别,所以对Tooltip没用。而超链接的描述会被放到xlink:title里,但被形状的<title>覆盖了,必须去掉形状的<title>才能让它生效。
最省心的流程总结:
- 给需要自定义Tooltip的元素(含超链接)设置好形状名或超链接屏幕提示
- 用VBA批量把不需要Tooltip的形状名改成全角空格
- 导出SVG,此时不需要提示的元素无弹窗,需要的元素显示自定义文本
备注:内容来源于stack exchange,提问作者JRI




