我在一个C#的Winform中使用AxAcroPDFLib
嵌入了一个PDF查看器。
然而,工具栏中的注释按钮(评论...)是禁用的。
我搜索并发现它们默认情况下是禁用的,但有些人报告使用JavaScript启用了它们:
Collab.showAnnotToolsWhenNoCollab = True
这里有没有做这件事的方法?
编辑:在WebBrowser控件中是否可以使用浏览器插件?如果可以,如何实现?
我在一个C#的Winform中使用AxAcroPDFLib
嵌入了一个PDF查看器。
然而,工具栏中的注释按钮(评论...)是禁用的。
我搜索并发现它们默认情况下是禁用的,但有些人报告使用JavaScript启用了它们:
Collab.showAnnotToolsWhenNoCollab = True
这里有没有做这件事的方法?
编辑:在WebBrowser控件中是否可以使用浏览器插件?如果可以,如何实现?
更新 - 第一部分仅适用于Acrobat Reader。有关使用完整版本的Acrobat的信息,请参见第二部分。
Acrobat Reader
我首先要说明的是,这可能不是您要寻找的答案,但我认为这需要更详细的解释而不仅仅是一个评论。
在SO上有一个类似的自问自答问题(此处),其中OP得出结论,这种行为是设计上的,无法做任何事情,我基本同意。
虽然我相信您已经看到了Reader本身可以添加注释,但使用Reader插件(AcroPDFLib)实现这一点的唯一简单方法是加载的文档被“启用阅读器”,此时注释就像在Reader中一样可用。如果您控制所需插件加载的文档,则这可能是您的解决方案。
关于您提到的可能将Collab.showAnnotToolsWhenNoCollab = True
设置为解决方法,我的搜索结果只显示这适用于使用完整版Acrobat而不是Reader的用户。更具体地,在Adobe论坛(here)上,一位Adobe员工对直接使用此属性发表了评论:
不,这与允许在Adobe Reader中进行评论无关。它是关于在Acrobat标准版或专业版中启用浏览器中的评论。如果您希望在Reader中启用评论,则需要使用Acrobat Professional或Adobe Livecycle Reader Extension Server“启用Reader”PDF本身。
尽管此评论是针对Acrobat 9的,但似乎对Acrobat XI仍然有效。
最后一点。我不知道您的应用程序范围,因此这可能完全无关紧要,但如果这是商业应用程序,即使您找到了一个功能性解决方法,我也会犹豫使用它,因为它可能会违反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);