我有以下情况:
- Windows 7 SP1 32 位上的 Internet Explorer 9
- Adobe Acrobat Professional 版本 10
- 一个包含如下代码的网页:
<object data="foo.pdf" src="foo.pdf">
鉴于:
- 系统上的默认PDF阅读器是Adobe Acrobat。
- Adobe Reader的浏览器插件被禁止使用Acrobat的插件
- 插件加载时 Acrobat.exe 正在运行
- 我正在使用Internet Explorer的COM自动化(来自Ruby,但这并不重要)来获取对
object
AxAcroPDFLib.AxAcroPDF
对象的引用
。
使用此AxAcroPDFLib.AxAcroPDF
对象,我需要操作表单字段、读取文本以及执行与 AcroExch.PDDoc
API 完全合理的其他操作,然后单击网页上的按钮(使用 IE 自动化)将表单字段序列化为 XML 并保存到 Web 服务器。
由于业务需求,我需要从用户的角度测试这种"端到端",所以我不能只在XML中填充值并查看服务器是否采用它们。
有没有办法从AxAcroPDFLib.AxAcroPDF
参考访问打开的PDF文档的AcroExch.PDDoc
API,而无需将PDF保存到磁盘上的文件并使用AcroExch.App
打开它?
问题是,据我所知,如果我将其保存到磁盘并在 Acrobat 中重新打开它,该文件将无法用于保存表单字段数据并将其提交到 Web 服务器。(或者可以吗?
有没有办法访问打开的PDF的AcroExch.PDDoc API。 来自 AxAcroPDFLib.AxAcroPDF 参考的文档,而不保存 PDF到磁盘上的文件并使用 AcroExch.App 打开它?
我认为你不能用AxAcroPDFLib.AxAcroPDF
做到这一点.查看"开发 Adobe® Reader®",第 25 页("OLE 自动化"):
在Windows上,Adobe Reader支持的唯一OLE自动化是 PDF 浏览器控件界面,使您能够处理 PDF 文档作为外部应用程序中的 ActiveX 文档。这 可以加载文件,移动到 文件,突出显示文本选择,并指定各种打印和 显示选项,如下所示。
此外,还有受支持的 API 的详细列表,您还可以使用 OleView 进行确认。
也许可以开发Adobe Acrobat插件,但是:
任何为 Adobe Reader 编写的插件都必须启用 Reader,这 表示您需要获得 Adobe 的许可和许可 系统。
我已经进行了搜索,我找到了这个VBScript示例:
Set acrobatApplication = CreateObject("AcroExch.App")
Set AVDoc = CreateObject("AcroExch.AVDoc")
Set gPDDoc = CreateObject("AcroExch.PDDoc")
If gPDDoc.Open("c:adobe.pdf") Then
Set jso = gPDDoc.GetJSObject
Set oAdd = jso.addField("FirmaField1", "signature", 0, Array(20, 100,
100, 20))
Set oSign = jso.getField("FirmaField1")
Set ppklite = jso.security.getHandler("Adobe.PPKLite", True)
ppklite.login "1111", "c:certificate_file.pfx"
oSign.signatureSign ppklite
ppklite.logout
end if
很明显,他在那里使用AcroExch.PDDoc。也许你可以从浏览器或Javascript等效物上运行它。