在 Adob​​e AxAcroPDFLib 中启用注释

Posted

技术标签:

【中文标题】在 Adob​​e AxAcroPDFLib 中启用注释【英文标题】:Enabling annotation in Adobe AxAcroPDFLib 【发布时间】:2015-07-13 05:24:21 【问题描述】:

我使用AxAcroPDFLib 在 C# Winform 中嵌入了一个 PDF 查看器。 但是,工具栏中的注释按钮 (cmets...) 被禁用。 我搜索并发现默认情况下它们是禁用的,但有些报告使用 javascript 启用它们:

Collab.showAnnotToolsWhenNoCollab = True

这里有办法吗?

编辑: 是否可以在 WebBrowser 控件中使用浏览器插件?如果是这样,如何做到这一点?

【问题讨论】:

有没有办法从插件中使用javascript? 我希望有人能找到一种方法或解决方法。 是否可以在 WebBrowser 控件中使用浏览器插件?如果是这样,如何做到这一点? 【参考方案1】:

更新 - 第一部分仅与 Acrobat Reader 相关。有关何时使用完整版 Acrobat 的信息,请参阅第二部分。

Acrobat 阅读器

我会先声明这可能不是您要寻找的答案,但我觉得这需要更多的解释,而不仅仅是评论。

在 SO (here) 上提出了一个类似的自我回答问题,OP 得出的​​结论是,这种行为是设计使然,对此无能为力,我几乎同意这一点。

虽然我确信您已经看到 Reader 本身可以添加注释,但使用 Reader 插件 (AcroPDFLib) 完成此操作的唯一直接方法是让正在加载的文档“启用 Reader”,此时注释就像在 Reader 中一样可用。如果您可以控制希望插件加载的文档,这可能是您的解决方案。

对于您关于可能将Collab.showAnnotToolsWhenNoCollab = True 设置为解决方法的问题,我的搜索仅表明这对于使用完整版 Acrobat 而不是 Reader 的用户来说是一种可行的解决方法。更具体地说,在 Adob​​e 论坛 (here) 上,Adobe 工作人员直接评论了该属性的使用:

不,这不是[关于允许在 Adob​​e Reader 中发表评论]。它是 关于在 Acrobat Standard 的浏览器中启用评论或 专业的。如果您希望在 Reader 中启用评论,那么您 需要使用 Acrobat Professional 自己“启用阅读器”PDF 或 Adob​​e Livecycle Reader 扩展服务器。

当然,这条评论是针对 Acrobat 9 的,它似乎对 Acrobat XI 仍然有效。

最后一点。我不知道你的应用程序的范围,所以这可能完全不相关,但如果这是一个商业应用程序,即使你找到一个功能性的解决方法,我也会犹豫使用它,因为它可能违反 Adob​​e读者许可协议(here);特别是第 4.3.3 节,禁用的功能。简而言之,与大多数公司一样,他们不希望您绕过他们的保护。

Acrobat 完整版

以下代码将创建一个 PDF 查看器(使用表单的窗口进行绘图),打开一个 PDF,然后设置 collab.showAnnotToolsWhenNoCollab = true 以允许在打开的 PDF 上添加注释。这需要引用 Acrobat 类型库。

void CreatePdfViewerAndOpenFile(string pdfFile)

    short AV_DOC_VIEW = 2;
    short PDUseBookmarks = 3;
    short AVZoomFitWidth = 2;

    Type AcroExch_AVDoc = Type.GetTypeFromProgID("AcroExch.AVDoc");
    _acroExchAVDoc = (Acrobat.CAcroAVDoc)Activator.CreateInstance(AcroExch_AVDoc);
    bool ok = _acroExchAVDoc.OpenInWindowEx(pdfFile, this.Handle.ToInt32(), AV_DOC_VIEW, -1, 0, PDUseBookmarks, AVZoomFitWidth, 0, 0, 0);

    if (ok)
    
        CAcroPDDoc pdDoc = (CAcroPDDoc)_acroExchAVDoc.GetPDDoc();
        object jsObj = pdDoc.GetJSObject();
        Type jsObjType = jsObj.GetType();
        object collab = jsObjType.InvokeMember("collab",
            BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance,
            null, jsObj, null);

        jsObjType.InvokeMember("showAnnotToolsWhenNoCollab",
            BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.Instance,
            null, collab, new object[]  true );
    

从要显示 PDF 的任何位置调用此方法。完成后,请务必调用Close 方法,否则 PDF 文件将在后台的 Acrobat 进程中保持打开状态。

_acroExchAVDoc.Close(-1);

请记住,此示例省略了许多“正常”功能,例如表单调整大小处理等,但它应该可以帮助您入门。由于此示例不处理调整大小,因此您可能希望在调用该方法之前最大化表单,因此查看器足够大,可以使用。有关如何以这种方式使用查看器的更多信息,请下载 Acrobat SDK (here) 并查看 ActiveViewVB 示例项目,这是我用来构建此示例的一些内容。作为参考,我使用了 Acrobat XI SDK。

【讨论】:

谢谢,但我有完整版的 Acrobat,但仍然无法使用。可能只有网页插件版才有,不知道怎么用。 非常感谢。这非常有用。我现在可以使用注释了。但是还是有几个问题: 1. 工具栏中的保存按钮被禁用,即使添加了注释。 2. 工具栏按钮(以及其他所有内容)的大小比 Adob​​e Acrobat 中的大很多(看起来与桌面的分辨率不同)。这两个问题都显示在附图中:oi57.tinypic.com/2vxfzvb.jpg。我使用 Adob​​e Acrobat DC。 我可以复制保存按钮问题,但不能复制工具栏按钮大小问题。对于 Save 按钮,SDK 中的 ActiveViewVB 示例也有同样的问题;它永远不会启用。我最初的想法是这可能是 Adob​​e 的一个错误。作为对此的“确认”,如果您手动保存PDF,实际保存带有注释的PDF确实有效。此外,如果您调用 _acroExchAVDoc.GetPDDoc().GetFlags(),文档包含 PDDocIsModified 位。 很高兴能为您提供帮助。 调用 OpenInWindowEx 后只需执行“_acroExchAVDoc.GetPDDoc().GetJSObject().collab.showAnnotToolsWhenNoCollab = True”,代码看起来应该与此答案中的 C# 代码非常相似,但您可以调用方法和属性直接使用反射中的“InvokeMember”。

以上是关于在 Adob​​e AxAcroPDFLib 中启用注释的主要内容,如果未能解决你的问题,请参考以下文章

在 Adob​​e 和浏览器都将结束 Adob​​e Flash 之后,有啥方法可以运行 Web 应用程序

如何在 Adob​​e Animate 中悬停时反向播放动画?

在哪里可以找到当前的 Adob​​e 图像格式规范? “剪切路径”

C++/Qt vs Adob​​e AIR [关闭]

Chatroulette 克隆 - 没有 Adob​​e 的方法?

2021 年的 Adob​​e flex