GhostScript noob help - Zerlegen einer mehrseitigen PDF-Datei in viele PS- oder EPS-Dateien

7871
godzilla_g

Ich versuche folgendes mit Ghostscript:

Verwandeln Sie eine mehrseitige PDF-Datei (ca. 3.000 Seiten, 200 MB-Datei) in:

Eine Datei pro Seite der PDF-Datei und jede (Seite / Datei) in EPS oder PS (PostScript (vorzugsweise)) konvertieren.

Beispiel:

hello.pdf (10 pages) 

würde produzieren:

hello1.ps (page 1 out of 10) hello2.ps hello3.ps ... hello10.ps 

Wie kann ich das machen? Ich habe es seit 4 Tagen versucht und kann es nicht herausfinden.

Ich habe ein Skript, das ich ausprobiert habe (funktioniert nicht):

Note: Windows(7) user here.  gs -sDEVICE=epswrite -o documentname-%.eps documentname.pdf 

Ich weiß auch nicht, wie ich zu dem Verzeichnis navigieren soll, in dem sich meine Datei befindet (kann das auch nicht herausfinden). Wenn Sie können, zeigen Sie mir bitte wie.

Ein großes Dankeschön.

3

2 Antworten auf die Frage

5
frabjous

Erstens benutze ich Linux, nicht Windows, also kann ich das nicht testen, aber ich denke, so etwas ist richtig. (Ich bin fast versucht, Ihnen zu sagen, Linux in einer virtuellen Maschine zu installieren, da solche Dinge mit einem erwachsenen Betriebssystem sooo viel einfacher sind, aber trotzdem ist es meine beste Wahl, wenn Sie Windows verwenden.)

Öffnen Sie zunächst eine Command / Dos-Eingabeaufforderung.

Um zu dem Ordner zu navigieren, in dem sich Ihre Dateien befinden, verwenden Sie den Befehl CD und den vollständigen Pfad zu Ihren Dateien in Anführungszeichen. Wenn sie sich beispielsweise unter "C: \ Benutzer \ Jemand \ Dokumente und Einstellungen \ Eigene Dateien \ PDFs \" befinden, geben Sie Folgendes ein:

cd "C:\Users\Somebody\Documents and Settings\My Documents\PDFs\"

Ich denke, eine Alternative wäre, einfach eine Stapeldatei in demselben Verzeichnis wie die PDF-Datei zu erstellen und die Stapeldatei von dort aus auszuführen.

OK, jetzt müssen Sie den vollständigen Pfad zur Ghostscript-Programmdatei verwenden, die Sie selbst finden müssen. Ich gehe davon aus, dass es "C: \ Programme (x86) \ gs \ gs9.00 \ bin \ gswin32c.exe" ist, aber Sie müssen dies auf Ihrem eigenen Computer überprüfen. Wenn Sie eine andere Version von Ghostscript oder eine 32-Bit-Version von Windows 7 verwenden, ist dies eine andere. Stellen Sie außerdem sicher, dass Sie gswin32c.exe und nicht gswin32.exe verwenden.

Finden Sie jetzt heraus, wie viele Seiten in diesem PDF-Dokument enthalten sind. Ich würde wissen, wie man das mit einem Befehl in Linux macht, aber ich habe keine Ahnung in Windows. Ich nehme an, es ist 3002.

Geben Sie nun diesen Befehl an der Eingabeaufforderung ein (alles in einer Zeile):

FOR \L %G IN (1,1,3002) DO "C:\Program Files (x86)\gs\gs9.00\bin\gswin32c.exe" -dBATCH -dSAFER -dNOPAUSE -dFirstPage=%G -dLastPage=%G -sDEVICE=pswrite -o hello%G.ps hello.pdf

Das ist meine beste Vermutung. Aber hoffentlich kann jemand, der tatsächlich Windows verwendet, bestätigen, dass dies funktioniert.

Für eps-Dateien wechseln Sie stattdessen -sDEVICE#pswritezu -sDEVICE=epswriteund ändern hello%G.pszu hello%G.eps.

Wenn Sie stattdessen eine Stapeldatei verwenden, verwenden Sie %% G anstelle von% G, und ändern Sie die Zeichen in #.

Wenn "hello.pdf" in etwas mit Leerzeichen geändert wird, verwenden Sie die Anführungszeichen "hello world.pdf". Gleiches für "Hallo% G.ps".


Unter GNU / Linux (oder Mac OS X) lautet der entsprechende Befehl:

for G in ; do gs -dSAFER -dBATCH -dNOPAUSE -dFirstPage=$G -dLastPage=$G -sDEVICE=pswrite -o "hello$G.ps" "hello.pdf" ; done

Um die Anzahl der Seiten automatisch berechnen zu lassen, wenn Sie seq und die Poppler-Dienstprogramme installiert haben (die standardmäßig auf Ubuntu installiert sind, glaube ich), könnten Sie Folgendes verwenden:

for G in $(seq 1 $(pdfinfo academicregs.pdf | sed -n 's/Pages:[^0-9]*\([0-9]*\).*/\1/p')) ; do gs -dSAFER -dBATCH -dNOPAUSE -dFirstPage=$G -dLastPage=$G -sDEVICE=pswrite -o "hello$G.ps" "hello.pdf" ; done

Die habe ich getestet und sie arbeiten.

Wow, danke. Ich bin dabei, Ubuntu 10.04 (oder 10.04 oder 9.10) zu installieren (Dual-Boot), um mit solchen Dingen arbeiten zu können. Ich starte jetzt nur Win7, weil die Arbeit es erfordert. Ihre Erklärung ist ziemlich gut, also werde ich es versuchen. Wenn Sie können, könnten Sie es auch für Ubuntu so schön erklären? Danke vielmals. Dieses Kommandozeilen-Zeug ist für mich ein Schwachsinn. godzilla_g vor 13 Jahren 0
Ich bearbeite meine Antwort mit Anweisungen für Linux. frabjous vor 13 Jahren 0
5
Kurt Pfeifle

frabjous 'Befehl funktioniert, macht aber die Dinge komplizierter, als es für eine einfache Aufgabe wie diese sein muss.

Er führt für jede einzelne Seite der PDF-Datei einmal einen separaten Ghostscript-Befehl aus und wählt nur die gewünschte PDF-Seite über die -dFirstPage=... -dLastPage=...Parameter aus. (Seine Windows-Version hat auch einen kleinen Tippfehler: Es sollte for /L %G in...- statt for \L %G in...)

Dies ist auch unnötig langsam, da 3002-Befehle für eine 3002-Seiten-PDF ausgeführt werden.

Sie können dasselbe auch ohne einen 3002-Pass-Loop in einem einzigen Ghostscript-Befehlspass erreichen. Unter Windows:

 gswin32c.exe ^ -o hello%04d.eps ^ -sDEVICE=epswrite ^ hello.pdf 

Unter Linux oder Mac OS X:

 gs \ -o hello%04d.eps \ -sDEVICE=epswrite \ hello.pdf 

Der %04dTeil im Ausgabenamen erstellt eine 4-stellige (Seitennummerierung) für die Ausgabe-EPS-Dateien und füllt nicht verwendete Ziffern mit führenden Nullen (was nicht dem von Ihnen gewünschten Ausgabebeispiel entspricht).

Dies sollte die akzeptierte Antwort sein Andy vor 8 Jahren 0