Porównaj / sprawdź nazwę pliku i zawartość PDF

1

Obecnie mamy aplikację, która generuje dokument pdf i automatycznie nazywa go na podstawie {UniqueID-DocCode-StartDate-StartTime}, wszystkie te dane pochodzą z bazy danych za pośrednictwem naszej aplikacji. Mamy jeden poważny problem.

  • zawartość pdf i nazwa pliku są pomieszane. na przykład

Nazwa pliku: 123456-Doc001-28042017-1415.pdf

Zawartość: 987654-Doc002-28042017-1312

Moim problemem jest zidentyfikowanie plików PDF, które uległy awarii (zawartość! = Nazwa pliku) i ponowne ich uruchomienie.

Nazwa pliku byłaby zgodna z zawartością pod względem obecności, ale treść ma strukturę litery, więc bezpośrednie porównanie nie zadziałałoby, a także różnią się dramatycznie długością w zależności od stopnia skomplikowania zawartości.

Tak więc moja lista życzeń to:

  1. Idealnie sprawdź każdy parametr z nazwy pliku. Wystarczy jednak sprawdzenie UniqueID.
  2. Sposób albo przeniesienia nieudanych plików, zmiany ich nazwy lub zgłoszenia z powrotem nieudanych plików na liście.
  3. Uruchom jako zaplanowane zadanie lub stale z katalogu.

Daj mi znać, jeśli są jakieś konkretne informacje, których potrzebujesz, a ja powinienem móc Ci je dostarczyć.

Taz
źródło
Więc potwierdzasz, że zawartość należy do pliku, potwierdzając, że znaleziono co najmniej jeden ciąg pasujący do nazwy pliku minus rozszerzenie, tj. 123456-Doc001-28042017-1415.pdfZawiera co najmniej jedno dopasowanie w jednym wierszu pliku dla 123456-Doc001-28042017-1415??
Pimp Juice IT
Przydałoby się wiedzieć, na jakim systemie to działa lub musi działać z Linuksa, Windowsa itp.
Pimp Juice IT,
Cześć @ Spittin'IT - Na wysokim poziomie plik zawierałby każdy z parametrów, ale nie razem, podzielony wokół zawartości pliku. np. Hi ID ... na grzbiecie pliku pdf jest DocCode, a data i godzina będą w dokumencie odnoszącym się do niego. Działa w systemie Windows. Miałby dostęp do PowerShell.
Taz
Czy korzystasz już z metody przeszukiwania dokumentów (w sposób nieskomplikowany), w której można znaleźć każdy z parametrów do utworzenia nazwy pliku oddzielonej myślnikiem? Czy potwierdziłeś, czy treść dokumentu PDF ma format przeszukiwalnego tekstu, a jeśli tak, czy możesz potwierdzić, że wszystkie wartości pól DB lub parametry składające się na nazwę pliku można przeszukiwać? Zakładam, że nie są to treści obrazkowe w formacie PDF, ale tekst przekonwertowany na format PDF, prawda?
Pimp Juice IT
1
To brzmi bardziej jak problem z kodowaniem w Twojej aplikacji niż wyjście, które należy sprawdzić.
Sorean

Odpowiedzi:

0

Za pomocą poniższego skryptu PowerShell przekonwertował pdf na tekst, który jest przechowywany w temp.txtpliku, który jest następnie używany do porównania z nazwą pliku. Nazwa pliku jest dzielona za pomocą separatora, a następnie określana, którego podziału należy użyć do porównania. Działa to dla każdego pliku w katalogu, w którym plik kończy się na .pdf. Zapewni to listę error.logniepasujących plików.

Musieliśmy użyć zewnętrznego pliku .exe do konwersji pdf na tekst.

$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"
Taz
źródło