我有一个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'方法。 –