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