Как получить вывод текстового файла и передать конвейер? - PullRequest
0 голосов
/ 29 июня 2018

У меня есть приложение, которое открывает winform и просит пользователя ввести файл PDF. Поскольку я не могу легко читать строки в файлах PDF, мне нужно преобразовать их в формат .txt. Когда пользователь нажимает кнопку ОК, приложение делает это.

Проблема, с которой я столкнулся, теперь заключается в использовании объекта файла .txt и передаче его другой команде, не зная его имени. Когда я пытаюсь передать его другой команде, это не сработает, потому что у меня нет пути. Я думаю, это потому, что результатом преобразования является строка «ОК», а не фактический файл .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

За Ансгар:

Я изменил строки последних нескольких строк, чтобы на данный момент сохранить функциональность по умолчанию для pdftotext, где он создает файл в том же каталоге с тем же именем, что и с его предложением, я мог бы легко заменить .pdf на .txt на конец пути к файлу, что позволяет гибко передавать правильный путь к файлу последующим функциям. Это позволило мне найти текстовый файл.

& "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

1 Ответ

0 голосов
/ 30 июня 2018

Когда вы запускаете pdftotext только с входным PDF в качестве аргумента, он создает выходной текстовый файл в том же каталоге с тем же базовым именем и расширением 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...