我有一個Powershell腳本,它使用iTextSharp從PDF文件中提取文本。腳本下載的文件之一是橫向的,所以需要旋轉以便腳本讀取它。使用Powershell和iTextSharp旋轉PDF
這裏是我的功能讀取 PDF。我已經測試過它,它的工作原理如下:
function Get-PdfText {
[CmdletBinding()]
[OutputType([string])]
param (
[Parameter(Mandatory = $true)]
[string]
$Path
)
try {
$reader = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList $Path
}
catch {
throw
}
$stringBuilder = New-Object System.Text.StringBuilder
for ($page = 1; $page -le $reader.NumberOfPages; $page++) {
$text = [iTextSharp.text.pdf.parser.PdfTextExtractor]::GetTextFromPage($reader, $page)
$null = $stringBuilder.AppendLine($text)
}
$reader.Close()
return $stringBuilder.ToString()
}
關於如何在C#和Java中,而不是在Powershell中旋轉PDF文檔有很多文檔。有一個很好的例子在這裏,但我不知道如何將其轉換爲PowerShell的: http://developers.itextpdf.com/question/how-rotate-page-90-degrees
這是我在將其轉換嘗試:
function RotatePdf90Degrees {
param (
[Parameter(Mandatory = $true)]
[string]
$Path
)
$reader = New-Object iTextSharp.text.pdf.PdfReader -ArgumentList $Path
$n = $reader.NumberOfPages
$page #PdfDictionary
$rotate #PdfNumber
for ($p = 1; $p -le $n; $p++) {
$page = $reader.GetPageN($p);
$rotate = $page.GetAsNumber([iTextSharp.text.pdf.PdfName]::ROTATE);
if ($rotate -eq $null) {
$page.put([iTextSharp.text.pdf.PdfName]::ROTATE, [iTextSharp.text.pdf]::PdfNumber(90));
}
else {
$page.put([iTextSharp.text.pdf.PdfName]::ROTATE, [iTextSharp.text.pdf]::PdfNumber(($rotate.IntValue() + 90) % 360));
}
}
$stamper = New-Object iTextSharp.text.pdf.PdfStamper ($reader, [System.IO.StreamWriter] $Path);
$stamper.Close();
$reader.Close();
}
有些事情不對的$ page.put()線。我不知道如何爲該函數提供適當的PdfNumber對象。
我一直在使用這個文件: http://developers.itextpdf.com/reference/package/com.itextpdf.text.pdf
嘗試在'New-Object [iTextSharp.text中拋出'New-Object'。pdf] :: PdfNumber(90)' –
該腳本將不會編譯。 「表達式或語句中的意外標記'New-Object'」。 – Fungusface
對不起,PowerShell非常類似c#,但不完全。 'PdfNumber'是一個對象,所以你需要以某種方式「新」,但我不知道你是否可以內聯。 'New-Object iTextSharp.text.pdf.PdfNumber(90)'怎麼樣?如果這不起作用,請嘗試將其設置爲一個變量,然後將該變量傳遞給'put'方法。 –