You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iText7使用iText.Layout.Element.Link能否打开自定义URI方案

问题根因

绝大多数PDF阅读器出于安全策略限制,对CreateURI生成的URI链接做了白名单校验,仅允许http、https、mailto、ftp等公认通用协议跳转,自定义URI Scheme会被直接拦截,因此浏览器可以正常触发的自定义协议在PDF中点击无响应。

可行解决方案

方案1:使用JavaScript动作触发(兼容性最高)

iText7支持创建带JS脚本的动作,通过PDF阅读器内置的JS引擎调用app.launchURL方法触发自定义协议,可绕过大部分阅读器的白名单限制,示例代码如下:

Dim targetUri As String = "myCustomScheme:C:\Temp\Exemple.sgs"
' 第二个参数为true表示在系统默认应用中打开链接,而非阅读器内置浏览器
Dim jsContent As String = $"app.launchURL(""{targetUri}"", true);"
Dim linkKo As New Link("test", PdfAction.CreateJavaScript(jsContent))
paragraph.Add(linkKo)

该方案适配绝大多数支持JS的主流PDF阅读器,包括Adobe Acrobat/Reader、福昕阅读器等。

方案2:使用Launch动作调用本地脚本(仅适合Windows可控分发场景)

如果使用场景为权限可控的Windows环境,也可以通过启动本地批处理脚本的方式拉起目标应用:提前在对应路径存放批处理文件,内容为start myCustomScheme:C:\Temp\Exemple.sgs,iText7代码示例如下:

Dim launchAction As PdfAction = PdfAction.CreateLaunch("C:\Temp\launch_sgs.bat")
Dim linkKo As New Link("test", launchAction)
paragraph.Add(linkKo)

注意事项

  • 轻量PDF阅读器、浏览器内置的PDF预览工具大多默认禁用JS和本地文件启动权限,测试时请使用支持完整PDF规范的桌面端阅读器验证效果
  • 对外分发的PDF优先使用方案1,同时提示用户使用支持JS的PDF阅读器打开即可

内容的提问来源于stack exchange,提问作者Valentin Marie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:54:03