itextsharp PdfReader重载错误

时间:2016-05-06 12:38:57

标签: powershell pdf itextsharp powershell-v2.0

我正在尝试将this重新编码为PowerShell v2但是当我尝试使用memorystream作为参数插入创建iTextSharp.text.pdf.PdfReader的TIFF时,我遇到了重载错误:

"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& 64 ...

谢谢!

1 个答案:

答案 0 :(得分:0)

错误告诉您在构造PdfReader实例时提供了18270个参数。这不是iText问题。这是一个PowerShell问题。使用带有单个参数的PdfReader。

我不知道PowerShell,但我认为这是错误的:

$r = New-Object iTextSharp.text.pdf.PdfReader($m.ToArray());

这是您的代码段中唯一可以将18270参数传递给PdfReader(18270个单独字节)的地方。

首先从byte[]创建一个$m对象,并在构造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