我使用AxAcroPDFLib
在C#Winform中嵌入了PDF查看器。
但是,工具栏中的注释按钮(注释...)被禁用。
我搜索并发现它们在默认情况下被禁用,但有些人报告使用Javascript启用它们:
Collab.showAnnotToolsWhenNoCollab = True
有没有办法在这里做到这一点?
编辑:是否可以在WebBrowser控件中使用浏览器插件?如果是这样,怎么办呢?
答案 0 :(得分:6)
更新 - 第一部分仅与Acrobat Reader相关。有关何时使用完整版Acrobat的信息,请参阅第二部分。
Acrobat Reader
我将通过声明可能而不是您正在寻找的答案来解释所有这一切,但我觉得这不仅仅是一个解释而是更多的解释。
在SO(here)上提出了一个类似的,自我回答的问题,其中OP得出的结论是这种行为是设计的,没有什么不能做到的,我几乎同意这一点。
虽然我确定您已经看到Reader本身可以添加注释,但使用Reader Plugin(AcroPDFLib)实现此目的的唯一直接方法是将文档加载为“Reader Enabled”,此时注释就像在Reader中一样可用。如果您可以控制要加载插件的文档,这可能是您的解决方案。
关于可能将Collab.showAnnotToolsWhenNoCollab = True
设置为变通方法的问题,我的搜索仅显示这对于使用完整版Acrobat而非Reader的人来说是一种可行的解决方法。更具体地说,在Adobe论坛(here)上,Adobe工作人员直接评论了此属性的使用:
不,[关于允许在Adobe Reader中发表评论]。它是 关于在浏览器中启用Acrobat Standard或 专业的。如果您希望在Reader中启用评论,那么您 需要使用Acrobat professional“读取”启用PDF本身 或Adobe Livecycle Reader Extension Server。
当然,这条评论是针对Acrobat 9的,它似乎仍然适用于Acrobat XI。
最后一点。我不知道你的应用程序的范围,所以这可能完全不相关,但如果这是一个商业应用程序,即使你找到一个功能性的解决方法,我会犹豫是否使用它,因为它可能违反Adobe读者许可协议(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。