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

Collab.showAnnotToolsWhenNoCollab = True

这里有办法吗?

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

最佳答案

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

Acrobat Reader

我将通过指出这可能不是您要寻找的答案来开始所有这些工作,但是我认为这值得更多的解释,而不仅仅是评论。

在SO(here)上也提出了一个类似的自我回答的问题,OP得出的结论是,这种行为是设计使然,不能对此做任何事情,我几乎同意。

尽管我确定您已经看到Reader本身可以添加注释,但是使用Reader Plugin(AcroPDFLib)完成此操作的唯一直接方法是将要加载的文档设置为“Reader Enabled”,此时注释才可用就像他们在阅读器中一样如果您对文档有控制权,则希望插件加载,这可能是您的解决方案。

对于您关于将Collab.showAnnotToolsWhenNoCollab = True设置为替代方法的问题,我的搜索仅显示这对于使用完整版本的Acrobat而不是Reader的用户而言是可行的替代方法。更具体地说,在Adobe论坛(here)上,Adobe工作人员直接评论了此属性的使用:



当然,此注释是针对Acrobat 9的,它似乎仍然对Acrobat XI有效。

最后一点。我不知道您的应用程序的范围,所以这可能是完全不相关的,但是如果这是一个商业应用程序,即使您找到了功能性的解决方法,我也会犹豫使用它,因为它可能会违反Adobe读者许可协议(protocol)(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。

关于c# - 在Adobe AxAcroPDFLib中启用注释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30019736/

10-10 05:06