我的机器上安装了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