C# 在Adobe AxAcroPDFLib中启用批注

C# 在Adobe AxAcroPDFLib中启用批注,c#,winforms,pdf,adobe,axacropdf,C#,Winforms,Pdf,Adobe,Axacropdf,我使用AxAcroPDFLib在C#Winform中嵌入了一个PDF查看器。 但是,工具栏中的注释按钮(注释…)被禁用。 我搜索并发现它们在默认情况下是禁用的,但有些报告使用Javascript启用了它们: Collab.showAnnotToolsWhenNoCollab = True 这里有办法吗 编辑:是否可以在WebBrowser控件中使用浏览器插件?如果是这样,如何做到这一点?更新-第一部分仅与Acrobat Reader相关。有关使用Acrobat完整版本的信息,请参阅第二节。 A

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

Collab.showAnnotToolsWhenNoCollab = True
这里有办法吗


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

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

Acrobat Reader

在所有这些之前,我会说这可能不是你想要的答案,但我觉得这需要更多的解释,而不仅仅是一个评论

在SO()上,有人问了一个类似的、自我回答的问题,OP得出的结论是,这种行为是有目的的,对此无能为力,我几乎同意这一点

虽然我相信您已经看到Reader本身可以添加注释,但使用Reader插件(AcroPDFLib)实现这一点的唯一简单方法是将加载的文档设置为“Reader Enabled”,此时注释就可以像在Reader中一样使用。如果您可以控制希望插件加载的文档,这可能是您的解决方案

对于您关于可能将
Collab.showAnnotToolsWhenNoCollab=True
设置为解决方案的问题,我的搜索结果仅表明,对于使用Acrobat完整版本的用户而言,这是一个可行的解决方案,而不是Reader。更具体地说,在Adobe论坛()上,一位Adobe员工直接评论了此属性的使用:

不,这不是[关于允许在Adobe Reader中进行评论]。它是 关于在浏览器中为Acrobat Standard或 专业的。如果希望在Reader中启用注释,则 需要使用Acrobat professional“启用”PDF本身 或Adobe Livecycle Reader扩展服务器

当然,这个评论是参考杂技演员9,它似乎仍然是有效的杂技席。 最后一点。我不知道您的应用程序的范围,因此这可能完全不相关,但如果这是一个商业应用程序,即使您找到了一个功能解决方案,我也会犹豫使用它,因为它可能违反Adobe Reader许可协议();特别是第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);

请记住,本例中遗漏了许多“正常”功能,如表单大小调整处理等,但应该从中开始。因为本例不处理大小调整,所以您可能希望在调用该方法之前最大化表单,因此查看器足够大,可以使用。有关如何以这种方式使用查看器的更多信息,请下载AcrobatSDK()并查看ActiveViewVB示例项目,这是我用来构建本示例的部分内容。作为参考,我使用了AcROAT席SDK。< /P>有没有办法从插件中使用JavaScript?我希望有人能找到一种方法来做它或解决方法。在浏览器控件中使用浏览器插件是可能的吗?如果是这样的话,该怎么做呢?谢谢,但是我有Acrobat的完整版本,我仍然无法让它工作。也许它只在网络插件版本中可用,但我不知道如何使用它。非常感谢。这是非常有用的。我现在可以使用注释了。但仍然存在一些问题:1。工具栏中的“保存”按钮被禁用,即使在添加注释后也是如此。2.工具栏按钮(以及其他所有按钮)的大小要比AdobeAcrobat大得多(看起来与桌面的分辨率不同)。这两个问题都显示在所附的图像中:。我使用AdobeAcrobatDC。我可以复制保存按钮问题,但不能复制工具栏按钮大小问题。对于保存按钮,SDK中的ActiveViewVB示例存在相同的问题;它永远不会启用。我最初的想法是,这可能是Adobe方面的一个缺陷。作为对这一点的“确认”,如果您手动保存PDF,则实际保存带有注释的PDF确实有效。另外,如果您调用_acroExchAVDoc.GetPDDoc().GetFlags(),文档包含PDDocIsModified位。很高兴能提供一些帮助。只需在调用OpenInWindowEx后执行“_acroExchAVDoc.GetPDDoc().GetJSObject().collab.showAnnotToolsWhenNoCollab=True”,代码看起来应该与此答案中的C#代码非常相似,但是您可以直接调用方法和属性,而无需从反射中使用“InvokeMember”。