Extrahieren Sie einzelne Fragen aus einer PDF-Datei und konvertieren Sie sie in Bilder

Ich möchte ein Bild für jede Frage in einer PDF-Datei (einer Prüfungsarbeit wie dieser ) extrahieren, damit sie wie folgt aufgeteilt werden:

Beispiel Fragebild

Also zum Beispiel q1.png für Frage 1, wie oben, und wieder für Frage 2, 3 usw.

Ich habe Tonnen von diesen Papieren, die ich in solche Bilder aufteilen muss, und sie müssen alle eine festgelegte Breite haben. Sie manuell mit einer Screengrab-Software zu zerschneiden, würde ewig dauern.

Gibt es eine Software, die mir dabei helfen kann? Oder eine clevere Methode oder es einfacher zu machen?

Mit Adobe Acrobat DC kann ich alle Seiten auf die richtige Breite und den richtigen Abstand vom oberen Rand jeder Seite zuschneiden, und ich kann sie alle als separate .jpeg-Dateien speichern - das ist fast das, was ich brauche, abgesehen von der Tatsache, dass die Höhe der Fragen variiert .

Antworten (2)

Sie können verschiedene gängige Unix-Tools verwenden, um die Daten zu manipulieren, obwohl sich der Aufwand möglicherweise nicht lohnt, wenn die Original-PDFs alle sehr unterschiedlich sind. Folgendes habe ich versucht:

Konvertieren Sie das PDF in PostScript, das mit pdf2ps (Teil von Ghostscript) einfacher zu bearbeiten ist:

pdf2ps Question-paper.pdf out.ps

Wenn Sie diese Datei durchsehen, können Sie sehen, wie die horizontalen Linien (auf denen die Antwort geschrieben werden soll) mit einer Reihe von Unterstreichungen gezeichnet sind: (___________________________________________________________________________)

Verwenden Sie sed, um die Unterstreichungen in Leerzeichen umzuwandeln:

sed <out.ps '/^(___________________________________________/s/_/ /g' >out2.ps

(Ich habe versucht, die Zeile zu entfernen, aber der PostScript-Code ist etwas unklar und funktioniert nicht mehr, also ist dies am einfachsten). Wir haben jetzt Seiten, die wir mit ImageMagick in PNG-Bilder konvertieren können:

convert -background white -alpha remove out2.ps -crop 450x500+40+40 -trim pic%02d.png

Dadurch werden die Dateien pic01.png usw. erstellt, eine pro Seite, die auf das Rechteck der Größe 450 x 500 und den Versatz xy +40+40 zugeschnitten und dann die Leerzeichen getrimmt werden. Dadurch bleibt nur die Frage sichtbar, oder auf der Fortsetzungsseite bleibt nur der Text: "Frage N geht weiter". Sie können diese unerwünschten Bilder an ihrer geringen Größe erkennen, die Sie entfernen können

identify pic*.png

Wenn Ihre anderen PDF-Dateien jedoch nicht dieselbe einfache Unterstreichungstechnik verwenden, um die Seite auszufüllen, oder wenn sie die linke Seite und die rechte Seite unterschiedlich verschieben usw., müssen Sie die Befehle jedes Mal manuell anpassen.

WENN alle Papiere nur die Fragenummer in einem bestimmten Bereich haben, sagen wir die ersten 50 Pixel, wenn sie in ein Bild konvertiert werden, dann könnten Sie ImageMagick und vielleicht ein bisschen Skripting verwenden (ich würde python verwenden ) , um:

  1. Konvertieren Sie das PDF in eine Folge von Bildern (eines pro Seite) und dann
  2. Erzeugen Sie für jedes Bild einen Streifen, der nur die Fragenummern enthalten soll
  3. Erstellen Sie ein Histogramm dieses Streifens und identifizieren Sie, wie weit unten etwas in diesem Streifen ist (möglicherweise mit einer zu zählenden Mindesthöhe). Dadurch erhalten Sie die Zeile, in der die Frage beginnt.
  4. Sie können diese Zahlen und Ihre bevorzugte Breite dann verwenden, um die Bilder in Fragen zu unterteilen.
  5. Möglicherweise müssen Sie auch die Bilder zusammenfügen, bei denen die Frage auf einer Seite beginnt und auf der nächsten fortgesetzt wird. Sie können diese daran erkennen, dass sich etwas auf der Seite befindet (wieder Histogramm, diesmal jedoch über die gesamte Breite der Seite image), also über der ersten Fragenummer auf dieser Seite, wie oben angegeben .

Wenn das Layout der Papiere Kopf- und Fußzeilen enthält, müssen Sie möglicherweise die zu berücksichtigenden Bereiche festlegen. Wenn es eine Titelseite usw. gibt, müssen Sie möglicherweise Seiten überspringen. Viel hängt davon ab, wie konsistent das Layout der Papiere ist. Wenn sie alle gleich sind, könnte sich das Schreiben eines solchen Skripts lohnen.

Beachten Sie, dass in dem Beispiel, das Sie gegeben haben, jede Frage auf einer neuen Seite beginnt und Sie den Beginn des Antwortabschnitts anhand eines Histogramms erkennen können, da es eine feste Höhe von Leerzeichen (weiß) ist, gefolgt von einer festen schmalen Höhe von Schwarz - die Zeile - wenn dies repräsentativ ist, können Sie direkt unter dem oberen Rand der Seite beginnen, den Rand überspringen, das Muster für die erste Antwortzeile erkennen und Sie haben Ihre Größe.

Dieser Artikel behandelt auch eine Reihe von Python-Tools, die Sie ebenfalls verwenden könnten, oder Sie können Ihre Papiere einfach als Bilder in Seiten aufteilen und numpy/scipy verwenden , um den Anfang/das Ende zu finden.

Wenn Sie, wie aus Ihrer Frage hervorgeht, in der Wissenschaft arbeiten, können Sie einen Kollegen, der Python oder Bildverarbeitung unterrichtet, bitten, dies als Workshop oder kleines Projekt festzulegen.