Ich erstelle eine Webanwendung, in der ich Bilder / PDF im Miniaturformat anzeigen kann. Klicken Sie auf das jeweilige Bild / PDF, um es in einem neuen Fenster zu öffnen.
Für PDF habe ich (das ist Code des neuen Fensters)
%Vor%Damit kann ich alle PDFs im Webbrowser sehen. Als Miniaturansicht möchte ich jedoch nur die erste PDF-Seite als Bild anzeigen.
Ich habe es versucht
%Vor%aber es funktioniert nicht. Irgendeine Idee, wie man das erledigt?
Ich stelle Pfad der pdf-Datei zum Beispiel zur Verfügung. Ich habe jedoch Bilder in der Datenbank. In Wirklichkeit habe ich Code wie folgt.
%Vor%Aus Gründen der Miniaturansicht verwende ich
%Vor%aber ich muss dasselbe auch für PDF erreichen.
Hoffe ich bin klar, was ich erwarte ...
Ich bin mir nicht sicher, ob alle Browser Ihr eingebettetes PDF (erledigt über <h:graphicImage value="some.pdf" ... />
) gleich gut anzeigen.
Wenn Sie darauf bestehen, PDF zu verwenden, würde ich eines dieser beiden Befehlszeilenwerkzeuge empfehlen, um die erste Seite eines PDFs zu extrahieren:
pdftk
Beide sind für Linux, Mac OS X und Windows verfügbar.
(Unter Windows verwenden Sie gswin32c.exe
oder gswin64c.exe
anstelle von gs
.)
Ab der letzten veröffentlichten Version, v9.05 , der vorherige Satz ist nicht mehr wahr. Ich fand, dass Ghostscript (einschließlich aller Startup-Overhead) ~ 1 Sekunde benötigt, um die erste Seite aus der 756 Seite PDF-Spezifikation zu extrahieren, während PDFTK ~ 11 Sekunden benötigt. pdftk
ist etwas schneller als Ghostscript, wenn es um die Seitenextraktion geht, aber für eine einzelne Seite ist dieser Unterschied wahrscheinlich vernachlässigbar.
Wenn Sie sichergehen möchten, dass auch ältere Browser Ihre erste Seite gut anzeigen können, konvertieren Sie sie in JPEG. Ghostscript ist hier dein Freund (ImageMagick kann das nicht alleine, es benötigt sowieso die Hilfe von Ghostscript):
%Vor%Wenn Sie Seite 33 brauchen, können Sie es so machen:
%Vor%Wenn Sie eine Reihe von PDFs benötigen, z. B. Seiten 17-23, versuchen Sie Folgendes:
%Vor% Beachten Sie, dass die %03d
-Notation mit jeder verarbeiteten Seite beginnt, beginnend mit 1. Ihr erster JPEG-Name wäre also page-16+001-of-input-PDF.jpeg
.
Beachten Sie, dass JPEG kein geeignetes Format für Bilder mit hohem Schwarz-Weiß-Kontrast und scharfen Kanten wie Textseiten ist. PNG ist dafür viel besser.
Um ein PNG aus den ersten PDF-Seiten mit Ghostscript zu erstellen, ist es einfach:
%Vor%Die analogen Optionen wie bei JPEGs sind richtig, wenn es darum geht, Seitenbereiche zu extrahieren.
Warnung: Verwenden Sie nicht das Skript von Ma9ic (in einer anderen Antwort), außer Sie möchten ...
Es mag zwar gut für dich funktionieren, aber in diesen acht kleinen Zeilen von Bash gibt es so viele Probleme.
Erstens,
Es verwendet identify
, um die Anzahl der Seiten aus der PDF-Eingabedatei zu extrahieren. % Co_de% (Teil von ImageMagick) kann jedoch PDFs nicht vollständig selbst verarbeiten. Ghostscript muss als 'delegate' ausgeführt werden, um die PDF-Eingabe zu verarbeiten. Es wäre viel effizienter, Ghostscript direkt zu verwenden, anstatt es indirekt über ImageMagick auszuführen.
Zweitens,
Es verwendet identify
zur PDF- & gt; JPEG-Konvertierung. Die gleiche Bemerkung wie oben: Ghostscript wird sowieso verwendet, also warum nicht direkt ausführen?
Drittens,
Er läuft über die Seiten und führt für jede einzelne Seite der PDF-Datei einen anderen convert
-Prozess durch, dh 100 Konvertierungen für eine 100-seitige PDF-Datei. Das bedeutet: Es werden auch 100 Ghostscript-Befehle ausgeführt, um 100 JPEGs zu erzeugen.
Vierter ,
Fahim Parkar's Frage war, ein Thumbnail von der ersten Seite der PDF zu bekommen, nicht von allen.
Das Skript führt mindestens 201 verschiedene Befehle für eine 100-seitige PDF-Datei aus, wenn alles in nur einem Befehl ausgeführt werden kann. Wenn du Ghostscript direkt ...
Verwenden Sie das richtige Tool für den Job und verwenden Sie es richtig!
Aktualisierung:
Seit ich gefragt wurde, hier ist meine alternative Implementierung zu Ma9ics Skript.
%Vor%Ich habe sogar einen Benchmark dafür erstellt. Ich konvertierte die 756-Seiten-PDF-1.7-Spezifikation in JPEGs mit beiden Skripten: