我試圖重新編碼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());(括號和分號)。這看起來非常糟糕的編碼規範。 –