【发布时间】:2014-08-25 10:39:36
【问题描述】:
我们在使用 iTextSharp 设置 BaseUrl 时遇到问题。我们过去曾为此使用过 Adobes Implementation,但我们遇到了一些严重的性能问题。所以我们切换到 iTextSharp,它的速度大约快了 10 倍。 Adobe 使我们能够为每个文档设置一个基本 URL。为了在不同的服务器上部署我们的文档,我们确实需要这个。但我们似乎无法找到正确的代码来执行此操作。
这段代码是我们在 Adobe 中使用的:
public bool SetBaseUrl(object jso, string baseUrl)
{
try
{
object result = jso.GetType().InvokeMember("baseURL", BindingFlags.SetProperty, null, jso, new Object[] {baseUrl });
return result != null;
}
catch
{
return false;
}
}
许多解决方案都描述了如何在新文档或空文档中插入链接。但是我们的文档已经存在,并且包含的不仅仅是文本。我们希望使用指向一个或多个其他文档的链接覆盖特定的单词。因此,对我们来说非常重要的是,我们可以在不访问文本本身的情况下插入链接。也许在这些单词上放置一个框并设置它的位置(因为我们知道单词在文档中的位置)
我们尝试了不同的实现,使用setAction 方法,但它似乎不能正常工作。结果在大多数情况下,我们看到了盒子,但里面没有链接或与之相关联。 (当我在框内单击时,光标没有改变,也没有发生任何事情)
感谢任何帮助。
【问题讨论】:
-
您能与我们分享一个带有 BaseUrl 和一个没有 BaseUrl 的 PDF 吗?或者请解释您如何使用 Adobe 的实现定义 BaseUrl。甚至更好:您能指出 ISO-32000-1 中描述该概念的部分吗?我知道 HTML 中基本 Url 的概念,但我认为我在 PDF 的上下文中没有遇到过它。一旦我们在规范中看到它,我们就可以轻松地将它添加到 iText。
-
很遗憾,我无法与您分享任何有问题的文件,因为它们包含机密信息。我添加了 Adobe 实现的代码示例,但它所做的只是设置 JavaScript 对象的 baseURL 属性,如本文档中所述:adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/…
-
好的,这看起来很简单。根据我的时间,我会给你做一些例子。我从头开始创建 PDF 并引入 BaseURL 的地方。另一个我改编现有 PDF 的地方。
-
我已经做了一些实验,但是我马上要开会,所以我还不能发布任何东西。但是,我已经发现设置 baseURL 仅在 Acrobat 中查看 PDF 时有效。在 Reader 中,您会遇到以下异常:NotAllowedError:安全设置阻止访问此属性或方法。 Doc.baseURL:1:Document-Level:0000000000000000
标签: c# pdf hyperlink itext base-url