我试图重新编码this到的PowerShell v2的,但是当我尝试插入TIFF使用一个MemoryStream作为参数创建iTextSharp.text.pdf.PdfReader我得到过载错误:iTextSharp的PdfReader超载错误
"New-Object : Cannot find an overload for "PdfReader" and the argument count: "18270"."
我使用iTextSharp的5.5.9
这里是我的代码:
[System.Reflection.Assembly]::LoadFrom(c:\temp\itextsharp.dll) | Out-Null
$List = gc C:\temp\filelist.txt
$Dest = "C:\destPDF.pdf"
$document = New-Object iTextSharp.text.Document([iTextSharp.text.PageSize]::A4, 0, 0, 0, 0)
$copy = New-Object iTextSharp.text.pdf.PdfCopy($document, (New-Object System.IO.FileStream $RutaDestino, 'Create'))
$document.Open();
foreach ($file in $List)
{
$extension = (Get-Item $file).extension.toupper()
switch ($extension)
{
".PDF" {
[iTextSharp.text.pdf.PdfReader] $reader = New-Object iTextSharp.text.pdf.PdfReader $file
$reader.ConsolidateNamedDestinations()
for ($i = 1; $i -le $reader.NumberOfPages; $i++)
{
[iTextSharp.text.pdf.PdfImportedPage] $page = $copy.GetImportedPage($reader, $i)
$copy.addpage($page)
}
$reader.Close()
}
".TIF" {
[iTextSharp.text.Rectangle] $pageSize = $null;
[System.Drawing.Bitmap] $bm = New-Object System.Drawing.Bitmap($file)
$pageSize = New-Object iTextSharp.text.Rectangle(0, 0, $bm.Width, $bm.Height);
$m = New-Object System.IO.MemoryStream
$d = New-Object iTextSharp.text.Document($pageSize, 0, 0, 0, 0)
$w = [iTextSharp.text.pdf.PdfWriter]::GetInstance($d, $m)
$d.Open();
$d.Add([iTextSharp.text.Image]::GetInstance($file));
$d.Close();
$r = New-Object iTextSharp.text.pdf.PdfReader($m.ToArray());
$copy.AddDocument($r);
}
}
}
$document.Close();
我不知道是因为PdfReader constructor支持的话,为什么我得到这个错误(也很在原来的代码中使用)
使用豪华v2和v3也试过,86 & 64 ...
谢谢!
错误提示您在构建“PdfReader”实例时提供了18270个参数。这不是iText问题。这是一个PowerShell问题。使用带有单个参数的'PdfReader'。 –
嗨布鲁诺,你可以在https://msdn.microsoft.com/en-us/library/system.io.memorystream.toarray(v=vs.110).aspx看到,'toArray'方法返回一个字节数组,但是正如你所说,构造函数并不像数组那样获得它。使用PowerShell的PDF阅读器的所有示例都使用文件作为源,它们中的任何一个都使用字节数组。也许这是一种豪华的不兼容...... – SalvaG
正如我所说:我不知道PowerShell,但我觉得很难相信有人会创建一种语言,你有时会使用'New-Object iTextSharp.text.pdf.PdfReader $ (无括号;无分号),有时还有New-Object iTextSharp.text.pdf.PdfReader($ m.ToArray());(括号和分号)。这看起来非常糟糕的编码规范。 –