我正在努力让以下脚本正常工作。我一直遇到的问题是返回的对象是SystemObject []而不是PdfSharp.Pdf.PdfDocument。
我编写了下面的脚本,想要通过设置$ out = New-Object PdfSharp.Pdf.PdfDocument并捕获返回来在更大的脚本中使用它。不幸的是,这不起作用。
谷歌搜索了几个小时,什么也没发现,我愿意接受建议。
Add-Type -Path C:\assemblies\GDI+\PdfSharp.dll
Function mergePdf {
Param($file1, $file2)
$output = New-Object PdfSharp.Pdf.PdfDocument
$PdfReader = [PdfSharp.PDF.IO.PdfReader]
$PdfDocumentOpenMode = [PdfSharp.Pdf.IO.PdfDocumentOpenMode]
$input = New-Object PdfSharp.Pdf.PdfDocument
$input = $PdfReader::Open($file1, $PdfDocumentOpenMode::Import)
$input.Pages | %{$output.AddPage($_)}
$input = $PdfReader::Open($file2, $PdfDocumentOpenMode::Import)
$input.Pages | %{$output.AddPage($_)}
return $output
}
编辑:为了清晰起见,将$ output.pages更改为之前的$ output,脚本仍然无法正确地从函数中传回PdfSharp.Pdf.Pdfdocument对象。
$obj = mergePdf temp1.pdf temp2.pdf
$obj.Save("./merged/temp.pdf")
Method invocation failed because [System.Object[]] doesn't contain a method named 'Save'
. At line:1 char:10
+ $obj.Save <<<< ("./merged/temp.pdf")
+ CategoryInfo : InvalidOperation: (Save:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
然而
$obj | gm
TypeName: PdfSharp.Pdf.PdfDocument
Name MemberType Definition
---- ---------- ----------
AddPage Method PdfSharp.Pdf.PdfPage AddPage(), PdfSharp.Pdf.PdfPage Add...
...
Save Method System.Void Save(string path), System.Void Save(System.I...
}
答案 0 :(得分:1)
我认为您正在通过这些行输出多种不同的类型。
$input.Pages | %{$output.AddPage($_)}
...
$input.Pages | %{$output.AddPage($_)}
...
return $output
请记住,函数中的任何命令/管道都不会分配给变量,输出到文件或$ null或转换为[void]将有助于函数的输出。我的猜测是$ output.AddPage($ _)返回一些对象 - 也许是添加的页面。无论如何,将这些行改为:
$input.Pages | %{$output.AddPage($_)} > $null
...
$input.Pages | %{$output.AddPage($_)} > $null
...
$output
另请注意,在这种情况下,不需要return
关键字。您只需要使用return关键字尽早摆脱函数。