在Adobe AxAcroPDFLib中启用注释

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

 Collab.showAnnotToolsWhenNoCollab = True 

有没有办法在这里做到这一点?

编辑:是否可以在WebBrowser控件中使用浏览器插件? 如果是这样,怎么办呢?

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

爱看阅读器

我将通过声明这可能不是你正在寻找的答案来为所有这些做准备,但我觉得这更多的是解释,而不仅仅是评论。

在SO( 这里 )上提出了一个类似的,自我回答的问题,在那里,OP得出的结论是,这种行为是设计的,没有什么不能做到的,我几乎同意这一点。

虽然我确定您已经看到Reader本身可以添加注释,但使用Reader Plugin(AcroPDFLib)实现此目的的唯一直接方法是将文档加载为“Reader Enabled”,此时注释才可用因为他们在读者。 如果您可以控制要加载插件的文档,这可能是您的解决方案。

关于可能设置Collab.showAnnotToolsWhenNoCollab = True作为解决方法的问题,我的搜索仅显示对于那些使用完整版Acrobat而非Reader的人来说这是一个可行的解决方法。 更具体地说,在Adobe论坛( 这里 ),Adobe工作人员直接评论了这个属性的使用:

不,[关于允许在Adobe Reader中发表评论]。 它是关于在浏览器中为Acrobat Standard或Professional启用评论。 如果您希望在Reader中启用评论,则需要使用Acrobat professional或Adobe Livecycle Reader Extension Server“读取”启用PDF本身。

当然,这条评论是针对Acrobat 9的,它似乎仍然适用于Acrobat XI。

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

完整版的Acrobat

下面的代码将创建一个PDF查看器(使用Form的窗口进行绘图),打开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); 

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