Hintergrundbilder aus einer PDF-Datei extrahieren?

8

Ich habe hier eine PDF-Datei mit Karten des Gebäudes, in dem ich arbeite:

http://www.libsys.und.edu/dev/FloorPlans_All.pdf

Die ursprünglichen Quelldateien sind verloren gegangen, und ich wurde gebeten, die Kartenbilder zu extrahieren, vorzugsweise ohne den Text und die Symbole, die darüber gelegt wurden. Dies hat sich als ärgerlich schwierig erwiesen.

Bisher habe ich folgende GUI-Programme ausprobiert:

  • Adobe Reader: Mit dieser Option kann ich Text auswählen, jedoch nicht die Hintergrundbilder
  • FoxIt PDF Viewer: Mit dieser Option kann ich Text auswählen, jedoch nicht die Hintergrundbilder
  • XPDF unter Ubuntu 10.10: Ermöglicht die Auswahl von Text, jedoch nicht der Hintergrundbilder

Und auch die folgenden Kommandozeilenprogramme:

  • pdfimages: Extrahiert die Symbole für Badezimmer, aber nicht die Hintergrundbilder
  • pdftohtml: Entspricht pdfimages und erstellt ein schlecht markiertes HTML-Dokument
  • pdfextract: wie pdfimages
  • konvertieren: erfolgreich gespeicherte Bilder, aber mit dem darin eingebrannten Text

Ich habe sogar versucht, die PDF-Datei manuell in einem Texteditor zu öffnen und die Stream-Objekte zu extrahieren, indem ich sie in eine neue Datei einfügte und sie mit der Erweiterung .jpg, .png oder .bmp speicherte (jeweils nacheinander). Wenn man bedenkt, wie wenig ich über die interne Struktur von PDF-Dateien weiß, ist es keine Überraschung, dass dies nicht funktioniert hat.

Also ... gibt es eine Möglichkeit, die Kartenbilder von diesem Ding abzurufen, ohne auch den Text und die Symbole zu erhalten?

Will Martin
quelle
So löse ich normalerweise diese Art von Aufgabe: (1) Verwenden Sie diese Option qpdf, um die Binärteile so weit wie möglich in ASCII zu konvertieren. (2) Verwenden Sie einen Texteditor, um den gesamten Text unsichtbar zu machen, den ich nicht auf dem Bildschirm oder in Ausdrucken sehen möchte (dies kann einfach und ohne Beschädigung der XRef-Tabelle durch Umschalten der unsichtbaren Flagge erreicht werden). (3) Destillieren Sie das Ergebnis erneut mit Ghostscript, um die Größe so gering wie möglich zu halten. - Leider kann Ihre Datei nicht mehr heruntergeladen werden, um die Vorgehensweise zu demonstrieren ...
Kurt Pfeifle

Antworten:

7

Sie können die XPDF-Bibliothek von http://www.foolabs.com/xpdf/download.html für Linux und Windows herunterladen . Dann laufen pdfimages -j input.pdf outputund Sie sollten erhalten output-000.jpg, output-001.jpgusw. Auch Besuche http://linuxcommand.org/man_pages/pdfimages1.html für weitere Nutzungsmöglichkeiten.

mybluevan
quelle
1
Korrektur, sieht aus wie das Bild ist eine Vektorgrafik direkt in die PDF eingebettet. Öffnen Sie es in Inkscape oder Adobe Illustrator, das Vektorgrafiken verarbeitet.
Mybluevan
Ah HA! Die Karten sind Vektorgrafiken - kein Wunder, dass ich solche Probleme hatte! Inkscape scheint es ganz gut geöffnet zu haben, und ich kann es nach Herzenslust bearbeiten. Vielen Dank!
Will Martin
2

Ok, nachdem ich 5 Minuten damit herumgespielt habe, ist meine Analyse, dass PDF noch seltsamer ist, als ich ursprünglich gedacht habe, und das sagt etwas aus.

Sie sind sich nicht sicher, wie hoch Ihr Budget ist, aber mit Acrobat Pro Extended 9 können Sie Folgendes verwenden:

A. Werkzeuge, Erweiterte Bearbeitung, Nachbesserungs-Textwerkzeug

-Select All
-Right click, Properties
-Text tab
-Select a standard font (e.g. Arial), close
-Hit Delete

B. Werkzeuge, Erweiterte Bearbeitung, Ausbesserungsobjektwerkzeug

- Wählen Sie das Objekt aus (Sie können die meisten, aber nicht alle erhalten (z. B. können die Symbole der Schülercomputer nicht ausgewählt werden), und löschen Sie sie

So sah Seite 1 nach einer schnellen Bereinigung aus: http://dl.dropbox.com/u/7434256/p1test.pdf

Craig H.
quelle
Seltsam ist Understatement. Ich kenne den Verlauf dieser Datei nicht, aber Acrobat Pro 8 hat uns Probleme bereitet. Inkscape hat es jedoch geschafft, Gott sei Dank. Nun, um alles in einige richtige SVGs umzuwandeln, aus denen wir Rastergrafiken generieren können ...
Will Martin
1
Die Arbeit, die Sie mit dem Original-PDF gemacht haben (das mir leider nicht mehr zur Verfügung steht), ist nicht die beste. Ihre Datei ist noch ~ 3 MByte. Es enthält viele + viele nicht verwendete Objekte. Es enthält sogar eine Instanz des /AAOperators (für die automatische Aktion ), die es zu einer potenziell gefährlichen PDF-Datei macht. Ghostscript konnte es auf 60 kByte reduzieren, ohne den sichtbaren Inhalt zu verlieren. (Die in der Datei enthaltenen Metadaten verteilen sich auf 17 verschiedene Objekte. Die Metadaten legen außerdem nahe, dass es seit ihrer Erstellung am 18.01.2011 17 verschiedene Revisionen / Änderungen dieser Datei gibt.)
Kurt Pfeifle
@pipitas Ich bin froh, dass ich das noch einmal überprüft habe. Es stellt sich heraus, dass Apache auf diesem Server nicht verfügbar war. Das Original-PDF ist wieder verfügbar. Es ist trotzdem nervig. Ich habe seitdem festgestellt, dass die Karten aus AutoCAD DXF-Dateien generiert wurden, was zu ernsthaft hässlichen Vektorgrafiken führt. Jede Karte enthält Hunderte einzelner Pfade, von denen jeder eine einzelne Linie mit zwei Endpunkten darstellt. Dies hat es einem Architekten wahrscheinlich leichter gemacht, einzelne Wandabschnitte oder was auch immer zu verändern, aber es ist ein Schmerz im Hintern für alles andere.
Will Martin
@ Will Martin: Autsch!, Dies ist eine ziemlich große PDF-Datei, die viele interne, versteckte Datei-Updates enthält (und daher: Müll aus Anwendersicht). - 16 Seiten auf 16 MByte sind eher "schwer" für einfach aussehende Vektorgrafiken. Mindestens 16 verschiedene Ebenen ("Optionaler Inhalt" im PDF-Sprachgebrauch), eine für jede Seite. Ich möchte dieses Durcheinander lieber nicht nur mit einem Texteditor durchwaten ...
Kurt Pfeifle
2
@pipitas: Danke - faire Punkte. Obwohl ich nicht beschreiben würde, was ich als "Job" gemacht habe, habe ich nur demonstriert (nach ein paar Minuten Herumspielen), dass es mit Acrobat möglich ist. Geld-zurück-Garantie und so weiter. ;)
Craig H
1

Nehmen Sie das von Craig H erstellte PDF und optimieren Sie es ein wenig, indem Sie es über Ghostscript ausführen. Unter Windows lautet die Befehlszeile:

gswin32c.exe ^
   -o p1test-gs-optimized.pdf ^
   -sDEVICE=pdfwrite ^
   -dPDFSETTIINGS=/prepress ^
    p1test.pdf

Unter Linux / Unix / Mac OS X gehen Sie wie folgt vor:

gs \
   -o p1test-gs-optimized.pdf \
   -sDEVICE=pdfwrite \
   -dPDFSETTIINGS=/prepress \
    p1test.pdf

Dadurch wird die Größe der Datei von 3.000 kByte auf etwa 60 kByte verringert, ohne dass Inhalte verloren gehen. Dann sollte der Import in Inkscape (oder InDesign, Illustrator, ...) viel schneller sein ....

Kurt Pfeifle
quelle
1

... Sie könnten Photoshop ausprobieren. Es liest PDFs und es ist 'möglich', dass es aus PS stammt und möglicherweise noch die Ebenen hat ... aber es ist eine sehr lange Sicht.

aart12
quelle
0

In einer Linux-Umgebung habe ich pdfmod verwendet , um alle Bilder auf einmal zu extrahieren. Siehe https://wiki.gnome.org/Apps/PdfMod oder für Ubuntu-Benutzer https://apps.ubuntu.com/cat/applications/pdfmod/

Zum Herunterladen und Installieren in Ubuntu reicht die Eingabe aus sudo apt-get install pdfmod.

  • Starten Sie die pdfmod-GUI (geben Sie pdfmoddas Dashboard oder das Befehlszeilenterminal ein)
  • Öffnen Sie das PDF-Dokument
  • Wählen Sie alle Seiten aus (oder alle, aus denen Sie die Bilder extrahieren möchten).
  • Der Menüpunkt Bearbeiten bietet die Möglichkeit, so viele Bilder zu extrahieren, wie innerhalb des ausgewählten Bereichs extrahiert werden können ( export n imagesmit n der entsprechenden Nummer). Sie können auf diesen Befehl auch zugreifen, indem Sie mit der Maus über die Auswahl fahren und das lokale Menü aktivieren (Rechtsklick für Rechtshänder).
  • Sobald Sie damit fortfahren, wird ein neues Fenster geöffnet, in dem Sie den Speicherort für die Bilder auswählen.

Hoffe das hilft.

XavierStuvw
quelle
Bitte lesen Sie Wie empfehle ich Software, um einige Tipps zu erhalten, wie Sie Software empfehlen sollten. Geben Sie mehr als nur einen Link an, zum Beispiel einige zusätzliche Informationen über die Software selbst und wie sie zur Lösung des Problems in der Frage verwendet werden kann. Sie können sogar einige Beispielbefehlszeilen einfügen.
DavidPostill
@ DavidPostill. Vielen Dank für den Hinweis. Fertig, glaube ich.
XavierStuvw
Viel besser ...;)
DavidPostill
Jetzt weiß ich, was ich von den Antworten auf meine Beiträge verlangen kann :-)
XavierStuvw
-1

Öffnen Sie das Dokument auf Ihrem Bildschirm, vergrößern Sie das Bild, um es so groß wie möglich zu machen, aber alles ist noch sichtbar. Drücken Sie alt + prnt scrn (oder das Äquivalent auf Ihrem Betriebssystem) und es sollte ein Screenshot des Programms gemacht werden. Öffnen Sie nun Farbe oder Ihren bevorzugten Bildeditor (Photoshop, Gimp usw.), fügen Sie das Bild ein und schneiden Sie alles aus, was Sie nicht möchten.

Will Gunn
quelle
Dies schließt auch die Symbole ein, die sich in den Screenshots über dem Hintergrundbild befinden, und verwendet die Bildschirmauflösung. Es muss einen besseren Weg geben.
Zachiel