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.


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.


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


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.']'

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.)


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);

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';

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();

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 imal@treinetic.com 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!


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


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.