PDF-Dateiname und -Inhalt vergleichen / prüfen

343
Taz

Wir haben derzeit eine Anwendung, die ein PDF-Dokument generiert und anhand dieses automatisch benennt . Alle diese Daten stammen aus einer Datenbank über unsere Anwendung. Wir bekommen ein großes Problem.

  • pdf-Inhalt und Dateiname werden durcheinander gebracht. z.B

Dateiname: 123456-Doc001-28042017-1415.pdf

Inhalt: 987654-Doc002-28042017-1312

Mein Problem ist es, die fehlgeschlagenen pdfs zu identifizieren (Inhalt! = Dateiname) und sie erneut auszulösen.

Der Dateiname würde in Bezug auf die Präsenz mit dem Inhalt übereinstimmen, der Inhalt ist jedoch als Buchstabe strukturiert, sodass ein direkter Vergleich nicht funktioniert. Außerdem variieren sie in der Länge dramatisch, je nachdem, wie kompliziert der Inhalt ist.

Meine Wunschliste wäre also:

  1. Überprüfen Sie im Idealfall jeden Parameter anhand des Dateinamens. Es UniqueIDwäre jedoch ausreichend, nur prüfen zu können.
  2. Eine Möglichkeit, fehlgeschlagene Dateien zu verschieben, umzubenennen oder fehlgeschlagene Dateien in einer Liste anzuzeigen.
  3. Als geplanter Job oder ständig aus einem Verzeichnis ausführen.

Lassen Sie mich wissen, wenn Sie bestimmte Informationen benötigen, und ich sollte es Ihnen zukommen lassen können.

1
Sie bestätigen also, dass der Inhalt zu der Datei gehört, indem Sie bestätigen, dass mindestens eine Zeichenfolge gefunden wird, die mit dem Dateinamen minus der Erweiterung übereinstimmt. Dh, 123456-Doc001-28042017-1415.pdf enthält mindestens eine Übereinstimmung in einer Zeile der Datei `123456-Doc001-28042017-1415` ?? Pimp Juice IT vor 7 Jahren 0
Es ist hilfreich zu wissen, auf welchem ​​System dies ausgeführt wird oder von Linux, Windows usw. ausgeführt werden muss. Pimp Juice IT vor 7 Jahren 0
Hi @ Spittin'IT - Auf hoher Ebene würde die Datei alle Parameter enthalten, jedoch nicht zusammen, sondern um den Inhalt der Datei herum aufgeteilt. zB Hi ID ... auf dem Rücken des PDF ist DocCode, und Datum und Uhrzeit wären in dem Dokument, das darauf verweist. Laufen unter Windows. Hätte Zugriff auf Powershell. Taz vor 7 Jahren 0
Verwenden Sie bereits eine Methode zum Durchsuchen der Dokumente (nicht auf Massenbasis), in der Sie die einzelnen Parameter finden können, um den Dateinamen durch den Bindestrich zu trennen? Haben Sie bestätigt, dass der Inhalt des PDF-Dokuments in einem durchsuchbaren Textformat vorliegt, und wenn ja, können Sie bestätigen, dass alle Werte oder Parameter der DB-Felder, aus denen der Dateiname besteht, durchsuchbar sind? Ich gehe davon aus, dass es sich nicht um inhaltliche PDF-Bilder handelt, sondern um Text, der in das PDF-Format konvertiert wurde, richtig? Pimp Juice IT vor 7 Jahren 0
Das klingt eher nach einem Codierungsproblem in Ihrer Anwendung als nach der zu prüfenden Ausgabe. Sorean vor 7 Jahren 1
Wenn Sie die Informationen basierend auf Ihren Daten generieren und ein falsches Ergebnis erhalten, sollten Sie wahrscheinlich über die Behebung Ihrer Generierung nachdenken. Wenn Sie dies wirklich nicht möchten, füllen Sie die Metainformationsfelder für diese Dateien mit den korrekten Informationen aus. Auf diese Weise haben Sie möglicherweise eine einfachere Zeit als der eigentliche Umgang mit dem PDF ([PS-Beispiel] (https://social.technet.microsoft.com/Forums/ie/en-US/e1c1f26b-6f9d-45ae-bb8c-5f4d4e38058a/powershell -script-zum-lesen-metadaten-info-von-bilder? forum = winserverpowershell)). Seth vor 7 Jahren 0
Vielen Dank an alle für die Rückmeldungen. Wir sind sehr begrenzt, was wir in der Anwendung ändern können. Der Anbieter, der die Anwendung unterstützt, zieht sich aus der AU zurück, so dass keine weiteren Entwicklungen stattfinden. Daher halten wir uns an die Korrektur der Ausgabe und nicht an das Problem. Taz vor 7 Jahren 0
@ Spittin'IT kann ich das wieder öffnen lassen, da ich eine Lösung gefunden habe. Taz vor 6 Jahren 0
@Taz Wiedereröffnet, damit Sie Ihre Antwort geben können. DavidPostill vor 6 Jahren 0

1 Antwort auf die Frage

0
Taz

Unter Verwendung des folgenden Powershell-Skripts wurde das PDF-Dokument in Text umgewandelt, der in einer temp.txtDatei gespeichert wird, die dann zum Vergleich mit dem Dateinamen verwendet wird. Der Dateiname wird mithilfe eines Trennzeichens aufgeteilt und dann mitzuteilen, welche der Splits zum Vergleich verwendet werden sollen. Dies wird für jede Datei in dem Verzeichnis ausgeführt, in dem die Datei mit .pdf endet. Es würde eine Liste error.logvon Dateien bereitstellen, die nicht übereinstimmen.

Wir mussten eine .exe-Datei eines Drittanbieters verwenden, um PDF in Text umzuwandeln.

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