无法从PowerShell使用Acrobat XI JSObject



我的机器上安装了Acrobatneneneba XI Pro。

我正在尝试编写PowerShell代码,使用以下技术从PDF文档中提取页面https://groups.google.com/forum/#!topic/comp.text.pdf/DNtcbUgjas4和将pdf转换为Word文档

当我在GetPDDoc()的输出上调用GetJSObject()时,我得到一个System._ComObject,它不公开我找到的各种示例代码中使用的任何方法:

PS> $JavaScriptObject
System.__ComObject
PS> $JavaScriptObject.GetType()
Value does not fall within the expected range.
At line:1 char:1
+ $JavaScriptObject.GetType()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException

PS> $JavaScriptObject.numPages -eq $null
True

有线索吗?

注意:完全相同的逻辑在VBS中使用https://groups.google.com/forum/#!topic/comp.text.pdf/DNTcbUjas4

所以,这是一个老问题,你可能早就从这个问题开始了,或者已经弄清楚了。我试图在PowerShell中执行一些涉及Acrobat自动化的任务,遇到了同样的问题,并认为可靠的谷歌搜索可以为我解决问题。不幸的是,你的搜索是我能找到的唯一相关结果,而你似乎从未得到答案。

如果有其他人最终来到这里,在这种情况下,以下是对我有效的方法。我是在一台Windows 10机器上用PowerShell v5做这件事的。我强烈怀疑问题在于com对象与PowerShell v5的接口方式。如果我打开命令行提示符并启动"powershell-version 2",$jsObject就可以了,我可以随心所欲地从对象中调用extractPages、numPages等,而不会出现GetType((返回的"不在预期范围内"错误。我知道你不应该根据意见回答,但这是我的怀疑,并将向我解释为什么加载旧版本的powershell有效耸耸肩。我可能错了,问题出在其他地方,但希望这能帮助到某个人,某个地方。

哦,顺便说一句,我认为您需要更改从$jsObject调用方法的方式,并使用反射。一个简短的片段示例:

    $jType = $jsObject.GetType()
    $extractPagesBFs = [System.Reflection.BindingFlags]"InvokeMethod","Public","Instance"
    $jType.InvokeMember("extractPages", $extractPagesBFs, $null, $jsObject, $extractPagesParam)

我从来没能得到$jsObject。<function>开始工作(也许我错过了什么…(。我不清楚为什么vbs可以直接访问这样的函数,比如你链接的例子。

我找到了修复程序。$t=$j.GetType((;替换为$t=[Type]::GetType($j(;https://github.com/ohtake/WindowsPowerShell/blob/master/Acrobat.txt#L18

参考https://dy100ms.hatenadiary.jp/entry/2022/01/22/000000

最新更新