Speichern Sie Jede PDF-Seite ein Bild Mit Imagick
Habe ich folgende php-Funktion, die die Konvertierung einer lokalen PDF-Datei in Bilder. Kurz gesagt, ich möchte jede PDF-Seite umgewandelt werden in ein separates Bild.
Die Funktion wandelt das PDF in ein Bild - aber nur auf der letzten Seite. Ich will jeder Seite der PDF-Datei konvertiert werden, um ein Bild und nummeriert. Nicht nur auf der letzten Seite der PDF-Datei.
Derzeit ist diese Funktion wandelt die letzten Seite example.pdf
zu example-0.jpg
. Problem ich bin mir sicher, dass liegt in der for
Methode. Was bin ich?
$file_name = 'example.pdf'; //using just for this example, I pull $file_name from another function
function _create_preview_images($file_name) {
//Strip document extension
$file_name = basename($file_name, '.pdf');
//Convert this document
//Each page to single image
$img = new imagick('uploads/'.$file_name.'.pdf');
//Set background color and flatten
//Prevents black background on objects with transparency
$img->setImageBackgroundColor('white');
$img = $img->flattenImages();
//Set image resolution
//Determine num of pages
$img->setResolution(300,300);
$num_pages = $img->getNumberImages();
//Compress Image Quality
$img->setImageCompressionQuality(100);
//Convert PDF pages to images
for($i = 0;$i < $num_pages; $i++) {
//Set iterator postion
$img->setIteratorIndex($i);
//Set image format
$img->setImageFormat('jpeg');
//Write Images to temp 'upload' folder
$img->writeImage('uploads/'.$file_name.'-'.$i.'.jpg');
}
$img->destroy();
}
- Ich weiß nicht, ob sich etwas geändert hat, aber letztes mal war ich um die Generierung von pdf thumbnail es war
$img = new imagick('file.pdf[0]');
nur die erste Seite. - Ja...ich bin mir dessen bewusst, dass. Aber ich will nicht die ersten, mittleren oder letzten Seite - ich will, dass ALLE Seiten konvertiert in einzelne Bilder.
- Ich weiß, was ich zu sagen versuche ist, dass PDF nicht gut funktionieren, wie andere multi-image-Formate, so dass Sie wahrscheinlich haben, um die Anzahl der Seiten und in der Schleife erstellen, die neue imagick-Instanzen anfügen
[$i]
Dateiname. - Hast du dir überhaupt den code...das ist genau das, was ich zu tun versuche...
- Diese Methode funktioniert nicht mit einem multi-page PDF.
$img->flattenImages();
führt alle Seiten auf der jeweils anderen und exportiert die Datei als einzelnes Bild, unabhängig von der Anzahl der Seiten. Für eine Lösung für multi-Seite PDF-Dateien mit schwarzem hintergrund stackoverflow.com/q/26793063/2028547
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint, wie die meisten meinem code war richtig. Das Problem war, ich war mit
$img->flattenImages();
falsch. Diesemerges
eine Sequenz von Bildern zu einem einzigen Bild. Ähnlich wie Photoshop reduziert alle sichtbaren Ebenen in einem Bild werden beim exportieren einerjpg
.Entfernte ich die oben genannte Zeile und die einzelnen Dateien geschrieben wurden, als erwartet.
ersten installieren
in Ihrem system oder server
und erstellen Sie dann
Ordner und setzen Sie pdf-Datei in diesem Ordner führen Sie dann den code und laden Sie diese Datei
Gibt es einen viel einfacheren Weg, ohne die Schleife, verwenden Sie einfach
$img->writeImages($filename,false);
und es wird eine Datei pro PDF-Seite. Als Sie sagte, wenn Sieflatten
zuerst das Bild ein, speichert es nur 1 Seite.