Wie konvertiere ich ein PDF-Dokument in ein Vorschaubild in PHP? [geschlossen]

199

Welche Bibliotheken, Erweiterungen usw. wären erforderlich, um einen Teil eines PDF-Dokuments in eine Bilddatei zu rendern?

Die meisten PHP-PDF-Bibliotheken, die ich gefunden habe, konzentrieren sich auf das Erstellen von PDF-Dokumenten. Gibt es jedoch eine einfache Möglichkeit, ein Dokument in einem für die Webnutzung geeigneten Bildformat zu rendern?

Unsere Umgebung ist ein LAMP-Stapel.

Mathew Byrne
quelle
Ich würde gerne in der Lage sein, dies zu tun und die Datei eine .jpgErweiterung haben zu lassen. Ich habe die .htaccess AddHandler-Methode ausprobiert und sie hat nicht funktioniert.
Keyslinger

Antworten:

228

Du brauchst ImageMagickundGhostScript

<?php
$im = new imagick('file.pdf[0]');
$im->setImageFormat('jpg');
header('Content-Type: image/jpeg');
echo $im;
?>

Die [0]Mittel page 1.

Paolo Bergantino
quelle
11
ja es funktioniert. Sie können auch Folgendes tun: $ im-> setResolution (300, 300), um beispielsweise Ihr PDF mit der gewünschten Auflösung zu rendern.
Luis Melgratti
6
Ich habe es nicht ausprobiert, aber wenn Sie Google Docs verwenden und den iFrame nicht stören, funktioniert dieser Vorschlag möglicherweise (es ist auch ein WP-
David Hobs
4
aber wie man ImageMagick und GhostScript in PHP-Datei
einbindet
1
@ think123 use Damit $im->thumbnailImage(1500, 0);wird Ihr JPG-Bild auf eine Breite von 1500 eingestellt und die Skalierung beibehalten. Siehe Dokumentation
Kevin Jantzer
1
Aus meiner Antwort unten - Wenn Sie das PDF von einem Blob laden, erhalten Sie auf diese Weise die erste Seite anstelle der letzten Seite: $ im-> readimageblob ($ blob); $ im-> setiteratorindex (0);
Jrjohnson
34

Für diejenigen, die ImageMagick aus irgendeinem Grund nicht haben, funktionieren GD-Funktionen auch in Verbindung mit GhostScript. Führen Sie den Befehl ghostscript mit aus exec(), um eine PDF-Datei in JPG zu konvertieren, und bearbeiten Sie die resultierende Datei mitimagecreatefromjpeg() .

Führen Sie den Ghostscript-Befehl aus:

exec('gs -dSAFER -dBATCH -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300 -sOutputFile=whatever.jpg input.pdf')

Erstellen Sie zum Bearbeiten ein neues Platzhalterbild $newimage = imagecreatetruecolor(...)und bringen Sie das aktuelle Bild ein. $image = imagecreatefromjpeg('whatever.jpg')Und dann können Sie verwenden , um imagecopyresampled()die Größe zu ändern, oder eine beliebige Anzahl von anderen eingebauten, nicht imagemagickBefehle

Andrew
quelle
3
Um nur ein Bild der ersten Seite zu erhalten, fügen Sie dem Befehl die Schalter -dFirstPage = 1 -dLastPage = 1 hinzu.
Tim Dearborn
Wenn es immer noch nicht funktioniert, müssen Sie möglicherweise den vollständigen Pfad zur gsBinärdatei angeben.
Craned
Dies sieht so aus, als würde ein Systembefehl ausgeführt. Was passiert, wenn der Benutzer eine Datei mit dem Namen hochlädt something;rm -rf /?
iProgramm
Wenn ich möchte, dass alle PDF-Seiten in Bilder umgewandelt werden. wie geht das dann?
Dhara
31

Sie können die Seitenzahl auch mit abrufen

$im->getNumberImages();

Anschließend können Sie mit einer Schleife Daumen für alle Seiten erstellen, z.

'file.pdf['.$x.']'
Jason
quelle
34
(Dies sollte eigentlich ein Kommentar zu Paolo Bergantinos Antwort sein)
Simon East
Schlaue Antwort. nicht von anderen gegeben, aber Sie bemerken und geschrieben.
Ashu Kumar
16

Verwenden Sie die PHP-Erweiterung Imagick . Verwenden Sie die Funktion setResolution, um die gewünschte Größe des Rasterausgabebilds zu steuern

<?php    
$im = new Imagick();
$im->setResolution(300, 300);     //set the resolution of the resulting jpg
$im->readImage('file.pdf[0]');    //[0] for the first page
$im->setImageFormat('jpg');
header('Content-Type: image/jpeg');
echo $im;
?>

(Erweiterung auf Paolo Bergantino seine Antwort und Luis Melgratti seinen Kommentar. Sie müssen die Auflösung einstellen, bevor Sie das Bild laden.)

Sebastian
quelle
11

Wenn Sie die PDF-Datei aus einem Blob laden, erhalten Sie auf diese Weise die erste Seite anstelle der letzten Seite:

$im->readimageblob($blob);
$im->setiteratorindex(0);
jrjohnson
quelle
10
(Dies sollte eigentlich ein Kommentar zu Paolo Bergantinos Antwort sein)
Simon East
9

Sie können auch versuchen, das mit imagemagick gelieferte Dienstprogramm 'convert' auszuführen.

exec("convert pdf_doc.pdf image.jpg");
echo 'image-0.jpg';
Preet Sandhu
quelle
3
Anstelle von pdf_doc.pdf wird pdf_doc.pdf [0] bevorzugt.
John Kurlak
convert ist Teil des Pakets ImageMagick; versuchen Sie sudo yum installieren ImageMagick
Jack Miller
Wenn es immer noch nicht funktioniert, müssen Sie möglicherweise den vollständigen Pfad zur convertBinärdatei angeben.
kran
1
echo 'image-0.jpg';gibt eine Zeichenfolge zurück.
suz
arbeitete für mich, danke
Isabella
4

Ich bin der Autor von PDFlib , einem GhostScript- Wrapper für PHP. Der Vorteil der Verwendung dieser Bibliothek ist, dass sie bereits getestet wurde und nicht erforderlich istImageMagic

Immer GhostScriptBefehle sind schneller als ImageMagicwenn es um die pdf , so dass Sie entweder für einen Ghostscript - Wrapper oder reine Ghostscript - Befehle gehen

$pdflib = new ImalH\PDFLib\PDFLib();
$pdflib->setPdfPath($pdf_file_path);
$pdflib->setOutputPath($folder_path_for_images);
$pdflib->convert();
imal hasaranga perera
quelle
Hallo, ich verwende Ihre PDFlib, um PNGs aus PDFs zu erstellen. $ pdflib = new ImalH \ PDFLib \ PDFLib (); $ pdflib-> setPdfPath ($ pdf_file_path); $ pdflib-> setOutputPath ($ folder_path_for_images); $ pdflib-> setImageFormat (\ ImalH \ PDFLib \ PDFLib :: $ IMAGE_FORMAT_PNG); $ pdflib-> setDPI (100); $ pdflib-> setPageRange (1, $ pdflib-> getNumberOfPages ()); $ pdflib-> convert (); Hat PDFlib eine Option zum Festlegen der Breite und Höhe der erstellten PNG-Dateien?
WGS
Hallo, keine PDFLib bietet keine Methoden zum Bearbeiten von Bildern, aber Sie können dies tun. Sobald Sie die PNGs mit PDFLib generiert haben, können Sie ein anderes Bildbearbeitungsbibliothek wie github.com/Treinetic/ImageArtist verwenden , um Ihre Arbeit zu erledigen ...
imal hasaranga perera
Bitte versuchen Sie die oben vorgeschlagene Methode, aber wenn Sie immer noch Probleme haben, senden Sie mir eine E-Mail an [email protected] und ich werde Ihnen mit einem Beispielcode helfen ... Prost!
Imal Hasaranga Perera
Ich werde es versuchen. Danke für den Vorschlag.
WGS
3

Ich installiere fertig! Es hat funktioniert!

Sie können Imagemagick unter Windows installieren .

In php (local)Gebrauch Anruf exec(<command line>) ex:

<?php
$pdf = "filename.pdf";
$info = pathinfo($pdf);
$file_name =  basename($pdf,'.'.$info['extension']);
echo $file_name;
$pdf = "filename.pdf[0]";
exec("convert $pdf convert-img/$file_name.jpg");    
?>

Außerdem können Sie class imagickin der PHP Imagick-Klasse verwendet werden

Danke, alles hat mir geholfen!

Duy Khanh
quelle
2

Anders denken: Mit der folgenden Bibliothek können Sie PDF-Dateien mit Javascript in Bilder konvertieren

http://usefulangle.com/post/24/pdf-to-jpeg-png-with-pdfjs

Jewelhuq
quelle
Wenn ich das Vorschaubild auf dem Server anzeigen möchte, wie können wir das verwenden?
Chithra
Vielleicht möchten Sie einen Blick darauf werfen: github.com/scandel/pdfThumbnails . Ich denke, Sie können das hier generierte Miniaturbild zusammen mit der eigentlichen Datei hochladen und speichern. Auf diese Weise sparen Sie mehr Rechenzeit auf Ihrem Server (da das Miniaturbild auf einem clientseitigen Computer ausgeführt wurde).
Sajed Zarrinpour
1

Hier ist eine einfache Klasse, die ich für einige Projekte geschrieben und verwendet habe. Es wird nur umbrochen imagickund das Schreiben jeder Seite auf die Festplatte behandelt. Wenn noch jemand nach einer einfachen Möglichkeit sucht, kann dieser Link hilfreich sein.

user664995
quelle
2
Nur-Link-Antworten sind in StackOverflow von geringem Wert, da die Antwort absolut unbrauchbar wird, wenn sich der Link bewegt oder stirbt. Um Ihre Antwort zu verbessern, sollte der Großteil Ihrer Lösung hier fest codiert sein.
Mickmackusa