Я пытаюсь перекодировать this в PowerShell v2, но когда я пытаюсь вставить TIFF создавая iTextSharp.text.pdf.PdfReader с помощью MemoryStream в качестве аргумента я получаю ошибку перегрузки: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 поддерживает его (также это используется в исходном коде)
пытался также с помощью Posh v2 и v3, x86 x64 & ...
Спасибо!
Ошибка сообщает вам, что вы предоставляете параметры 18270 при создании экземпляра 'PdfReader'. Это не проблема iText. Это проблема PowerShell. Используйте 'PdfReader' с одним параметром. –
Привет, Бруно, как вы можете видеть на https://msdn.microsoft.com/en-us/library/system.io.memorystream.toarray(v=vs.110).aspx, метод toArray возвращает массив байтов , но конструктор не получает его как массив, как вы сказали. Все образцы PDF-ридера, использующие powershell, используют его, используя файл в качестве источника, любой из которых использует массив байтов. Возможно, это шикарная несовместимость ... – SalvaG
Как я уже сказал: я не знаю PowerShell, но мне трудно поверить, что кто-то создаст язык, где вы иногда будете использовать 'New-Object iTextSharp.text.pdf.PdfReader $ file' (без скобок), а иногда 'New-Object iTextSharp.text.pdf.PdfReader ($ m.ToArray());' (круглые скобки и точка с запятой). Это выглядит очень плохой кодирующей дисциплиной. –