itextsharp PdfReader 过载错误
itextsharp PdfReader overload error
我正在尝试将 this 重新编码为 PowerShell v2,但是当我尝试插入一个 TIFF 创建一个 iTextSharp.text.pdf.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 支持它(原始代码中也使用了它)
还尝试使用 PoSh v2 和 v3、x86 和 x64...
谢谢!
错误提示您在构造 PdfReader 实例时提供了 18270 个参数。这不是 iText 问题。这是一个 PowerShell 问题。使用带有单个参数的 PdfReader。
我不懂 PowerShell,但我认为这是错误的:
$r = New-Object iTextSharp.text.pdf.PdfReader($m.ToArray());
这是您的代码片段中唯一可以将 18270 个参数传递给 PdfReader
的地方(18270 个单独的字节)。
首先从 $m
创建一个 byte[]
对象,然后在构造 PdfReader
实例时将该对象作为单个参数传递。
阅读 How do I call New-Object for a constructor which takes a single array parameter? 的答案以了解这是如何完成的。
我再说一遍:我不懂PowerShell,但是你说的错误信息很清楚,答案也很明显。另见:Using New-Object -ArgumentList when the constructor takes one parameter that is an array
我正在尝试将 this 重新编码为 PowerShell v2,但是当我尝试插入一个 TIFF 创建一个 iTextSharp.text.pdf.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 支持它(原始代码中也使用了它)
还尝试使用 PoSh v2 和 v3、x86 和 x64...
谢谢!
错误提示您在构造 PdfReader 实例时提供了 18270 个参数。这不是 iText 问题。这是一个 PowerShell 问题。使用带有单个参数的 PdfReader。
我不懂 PowerShell,但我认为这是错误的:
$r = New-Object iTextSharp.text.pdf.PdfReader($m.ToArray());
这是您的代码片段中唯一可以将 18270 个参数传递给 PdfReader
的地方(18270 个单独的字节)。
首先从 $m
创建一个 byte[]
对象,然后在构造 PdfReader
实例时将该对象作为单个参数传递。
阅读 How do I call New-Object for a constructor which takes a single array parameter? 的答案以了解这是如何完成的。
我再说一遍:我不懂PowerShell,但是你说的错误信息很清楚,答案也很明显。另见:Using New-Object -ArgumentList when the constructor takes one parameter that is an array