Сравнить / проверить PDF имя файла и содержание

198
Taz

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

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

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

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

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

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

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

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

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

1
Таким образом, вы подтверждаете, что содержимое принадлежит файлу, подтверждая, что по крайней мере одна найденная строка соответствует имени файла минус расширение, т. Е. `123456-Doc001-28042017-1415.pdf` содержит как минимум одно совпадение в одной строке в файле для `123456-Doc001-28042017-1415` ?? Pimp Juice IT 6 лет назад 0
Было бы полезно узнать, на какой системе он запущен или должен работать, например, в Linux, Windows и т. Д. Pimp Juice IT 6 лет назад 0
Привет @ Spittin'IT - На высоком уровне файл будет содержать каждый из параметров, но не вместе, разделенный вокруг содержимого файла. например, Привет ID ... на корешке pdf есть DocCode, а дата и время будут в документе, ссылаясь на него. Бег по окнам. Будет иметь доступ к powershell. Taz 6 лет назад 0
Вы уже используете метод для поиска документов (не массовым образом), где вы можете найти каждый из параметров для построения имени файла, разделенного тире? Подтвердили ли вы, что содержимое документа PDF имеет текстовый формат с возможностью поиска, и если да, то можете ли вы подтвердить, что все значения полей БД или параметры, составляющие имя файла, доступны для поиска? Я предполагаю, что это не содержание изображений PDF, а текст, преобразованный в формат PDF, правильно? Pimp Juice IT 6 лет назад 0
Это больше похоже на проблему с кодированием в вашем приложении, чем на необходимость проверки выходных данных. Sorean 6 лет назад 1
Если вы генерируете информацию на основе имеющихся у вас данных и в результате получаете неправильный результат, вам, вероятно, следует подумать о том, чтобы исправить свое поколение. Если вы действительно не хотите этого делать, обязательно заполните поля метаинформации для этих файлов правильной информацией. Таким образом, у вас может быть проще, чем в действительности обрабатывать PDF ([пример PS] (https://social.technet.microsoft.com/Forums/ie/en-US/e1c1f26b-6f9d-45ae-bb8c-5f4d4e38058a/powershell -script для чтения-метаданных инфо-из-картинки? форум = winserverpowershell)). Seth 6 лет назад 0
Спасибо всем за отзывы, мы очень ограничены в том, что мы можем изменить в приложении. Поставщик, поддерживающий приложение, выходит из AU, поэтому дальнейших разработок не происходит. Поэтому мы застряли с исправлением вывода, а не с проблемой. Taz 6 лет назад 0
@ Spittin'IT, могу ли я снова открыть это, когда нашел решение. Taz 6 лет назад 0
@Taz Открыт, чтобы вы могли дать свой ответ. DavidPostill 6 лет назад 0

1 ответ на вопрос

0
Taz

Используя приведенный ниже скрипт 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" 

Похожие вопросы