1

В настоящее время у нас есть приложение, которое генерирует PDF-документ и автоматически присваивает ему имя на основе {UniqueID-DocCode-StartDate-StartTime} , все эти данные поступают из БД через наше приложение. Мы получаем одну большую проблему.

  • Содержание PDF и имя файла перепутаны. например

Имя файла: 123456-Doc001-28042017-1415.pdf

Содержание: 987654-Doc002-28042017-1312

Моя проблема заключается в выявлении PDF-файлов, которые не удалось (содержание!= имя файла) и их повторный запуск.

Имя файла будет соответствовать содержимому с точки зрения присутствия, но содержимое структурировано как буква, поэтому прямое сравнение не будет работать, а также они существенно различаются по длине в зависимости от сложности содержимого.

Итак, мой список пожеланий будет:

  1. Идеально проверять каждый параметр из имени файла. Однако достаточно просто проверить UniqueID .
  2. Способ перемещения ошибочных файлов, их переименования или создания отчета о неудачных файлах в списке.
  3. Запускать как запланированное задание или постоянно из каталога.

Дайте мне знать, если вам нужна какая-то конкретная информация, и я смогу донести ее до вас.

1 ответ1

0

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

Нам пришлось использовать сторонний .exe для преобразования PDF в текст.

$path = "C:\brokenPDFs\"

$output = $path + "\output.log"
$errorpath = $path + "\error.log"

"Start:" | Out-File $output
"Start:" | Out-File $errorpath

Clear-Content $output
Clear-Content $errorpath

$exe = $path + "pdftotext.exe" 

$errorcount = 0

$files = Get-ChildItem $path *.pdf

 Foreach ($currentfile In $files)
        {
        $filename=$currentfile.Name
        $splitname = $filename.split("^")
        $currentUR = $splitname[0]

        #write-host $currentfile.Name

        &$exe $currentfile.FullName $path\temp.txt

        $result = select-string -Path $path\temp.txt -Pattern $currentUR -Quiet      

            If ($result -eq $true)
                {
                $match = $currentfile.FullName
                "Match on string :  $currentUR  in file :  $match" | Out-File $output -Append
                }
            If ($result -eq $false)
                {
                $match = $currentfile.FullName
                "String not found:  $currentUR  missing from file :  $match" | Out-File $errorpath -Append
                write-host "ERROR: $currentfile missing $currentUR"
                $errorcount++
                }
            $result = $null
        }

        write-host "Total Errors: $errorcount"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .