我有一个打开Winform并要求用户输入PDF文件的应用程序。由于我无法轻松读取PDF文件中的字符串,因此需要将其转换为.txt。当用户单击“确定”时,应用程序将执行此操作。
我现在遇到的问题是使用.txt文件对象,并将其传递给另一个命令而又不知道其名称。当我尝试将其通过管道传递到另一个命令时,它将无法工作,因为我没有路径。我认为这是因为转换的输出是字符串“ OK”,而不是实际的.txt文件。
如何将PDF转换为文本(我正在使用Xpdf)并将转换后的文件向下传递到管道中以进行进一步处理?
如果我使用的方式有问题,我该如何以另一种方式完成此任务?
Add-Type -AssemblyName System.Windows.Forms
$form = New-Object System.Windows.Forms.Form
$form.StartPosition = 'CenterScreen'
$button = New-Object System.Windows.Forms.Button
$form.Controls.Add($button)
$button.Text = 'Get file'
$button.Location = '10,10'
$button.Add_Click({
$ofd = New-Object system.windows.forms.Openfiledialog
$ofd.Filter = 'PDFs (*.pdf)|*.pdf'
$script:filename = 'Not found'
if ($ofd.ShowDialog() -eq 'Ok') {
$script:filename = $textbox.Text = $ofd.FileName
}
})
$buttonOK = New-Object System.Windows.Forms.Button
$form.Controls.Add($buttonOK)
$buttonOK.Text = 'Ok'
$buttonOK.Location = '10,40'
$buttonOK.DialogResult = 'OK'
$textbox = New-Object System.Windows.Forms.TextBox
$form.Controls.Add($textbox)
$textbox.Location = '100,10'
$textbox.Width += 50
$form.ShowDialog()
$output = & "C:\Users\eakinsa\Desktop\Style Guide Report\Includes\bin32\pdftotext" $filename
$output |
Get-Location -OutVariable textFile |
Select-String -Path $textFile -Pattern ed
每Ansgar:
我将最后几行修改为现在,保留了pdftotext的默认功能,该功能可以在同名目录下创建文件,就像他的建议一样,我可以轻松地用.txt替换.pdf。文件路径的末尾,从而可以灵活地将正确的文件路径传递给后续功能。做到了这一点,因此我能够搜索文本文件。
& "C:\users\eakinsa\Desktop\Style Guide Report\Includes\bin32\pdftotext" $filename
$pdf = Get-Item $filename
$textfile = $filename -replace '\.pdf$', '.txt'
Select-String -Path $textfile -Pattern ed
答案 0 :(得分:1)
仅将输入PDF作为参数运行pdftotext
时,它将在相同目录中使用相同的基本名称和扩展名txt创建输出文本文件。
& pdftotext C:\temp\foo.pdf # creates C:\temp\foo.txt
因此,您可以像这样构建文本文件路径:
$pdf = Get-Item $filename
$textfile = Join-Path $pdf.DirectoryName ($pdf.BaseName + '.txt')
或类似这样:
$textfile = $filename -replace '\.pdf$', '.txt'
或者,您可以告诉pdftotext
在哪里创建输出文件:
$textfile = 'C:\some\where\bar.txt'
& pdftotext $filename $textfile # creates C:\some\where\bar.txt