2016-05-06 17 views
0

私はPowerShellのV2にthisを再コーディングしようとしているが、私は、引数としてのMemoryStreamを使用してiTextSharp.text.pdf.PdfReaderを作成するTIFFを挿入しようとすると、私が過負荷エラーが出る:itextsharp PdfReader過負荷エラー

"New-Object : Cannot find an overload for "PdfReader" and the argument count: "18270"." 

は、私がここで5.5.9

をitextsharp使用している私のコードです:

[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がそれをサポートしているので、私はこのエラーを取得していますなぜ私にはわからない(また、それはです元のコードで使用される)

はまた...、x86の& x64のをPOSH V2およびV3を使用して

感謝を試してみました!

+0

このエラーは、 'PdfReader'インスタンスを構築中に18270パラメータを提供していることを示しています。これはiTextの問題ではありません。これはPowerShellの問題です。単一のパラメータで 'PdfReader'を使用してください。 –

+0

こんにちはブルーノは、https://msdn.microsoft.com/en-us/library/system.io.memorystream.toarray(v=vs.110).aspxにあるように、 'toArray'メソッドはバイト配列を返しますあなたが言ったように、コンストラクタは配列として取得していません。 powershellを使用しているpdfリーダーのすべてのサンプルは、ファイルをソースとして使用し、いずれもバイト配列を使用しています。おそらくそれは偽の非互換性です... – SalvaG

+0

私が言ったように、私はPowerShellを知らないのですが、誰かが時には 'New-Object iTextSharp.text.pdf.PdfReader $ (括弧なし、セミコロンなし)、時には 'New-Object iTextSharp.text.pdf.PdfReader($ m.ToArray());'(カッコとセミコロン)を使用しています。それは非常に悪いコーディング規律のように見えます。 –

答えて

0

このエラーは、PdfReaderインスタンスを構築中に18270パラメータを提供していることを示しています。これはiTextの問題ではありません。これはPowerShellの問題です。 PdfReaderは単一のパラメータで使用します。

私はPowerShellを知りませんが、私は、これは間違っていると思う:

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

これは、あなたがPdfReaderから18270のパラメータ(18270別々のバイト)を渡すかもしれないあなたのコードスニペットで唯一の場所です。

最初に$mからbyte[]オブジェクトを作成し、PdfReaderインスタンスを構築するときにそのオブジェクトを1つのパラメータとして渡します。

これがどのように行われているか調べるには、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