Náhledy PDF pomocí Imagick

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Vyki
Člen | 388
+
0
-

Neznáte prosím děkdo způsob jak rozchodit tvorbu náhledů PDF pomocí třídy Imagick. Něco jsem o tom našel zde, ale to mi fungovat nechce. Problém je už v konstruktoru.

<?php
$im = new imagick('test.pdf[0]');
//hází Uncaught exception 'ImagickException' with message 'Postscript delegate failed `plakat_2.pdf'' in /www/doc/stranky.tld/www/test/a.php:3

$im = new imagick('test.pdf');
//hází ncaught exception 'ImagickException' with message 'Wand contains no images `MagickWand-2'' in /www/doc/stranky.tld/www/test/a.php:3
?>

Není to dáno ani cestou PDFku ani PDFkem samotným, zkoušel jsem několik PDF, kde byly poze obrázky. Nemáte někdo s touto problematikou zkušenosti? Díky
Edit: stejně tak nejde ani

<?php
$im = new imagick();
$im->setResolution(300, 300);
$im->readImage('test.pdf[0]'); //ani $im->readImage('test.pdf[1]') ani $im->readImage('test.pdf')
?>

Nejde mi to ani na jdnom hostingu – testováno na PHP 5.2 u Active24 a PHP 5.3 u Onebit EDIT: Jinak tvorba náhledů velkých fotek, kde také Imagick používám šlape v pohodě.

Editoval Vyki (18. 4. 2010 15:19)

toka
Člen | 253
+
0
-

Mne funguje toto:

<?php
/* Read page 1 */
$im = new imagick( 'test.pdf[0]' );

/* Convert to png */
$im->setImageFormat( "png" );

/* Send out */
header( "Content-Type: image/png" );
echo $im;
?>
Vyki
Člen | 388
+
0
-

toka: A ukoho máš hosting jestli můžu být zvědavý :o)

Honza Kuchař
Člen | 1662
+
0
-

To je super! :-) Funguje to i se SVG? (jestli jste to tedy někdo zkoušel)

Vyki
Člen | 388
+
0
-

Se SVG by to mělo také fungovat. Je to asi závislé na nastavení Postscriptu na serveru. Pokud je nastavený špatně, tak jako v mém případě.

toka
Člen | 253
+
0
-

Vyki napsal(a):

toka: A ukoho máš hosting jestli můžu být zvědavý :o)

Můžeš být zvědavý… na vlastním serveru.

Vyki
Člen | 388
+
0
-

Toka: A jakou používáš verzi Imagick? Poslední stable 2.3.0?

Vyki
Člen | 388
+
0
-

Tak problém je vyřešen. Správci serveru to museli krapet poštelovat a nakonfigurovat. Běhá to výborně. Když je obrázků více jde mezi nimi díky iterátoru ve třídě imagick přecházet např. foreachem. Extrahování celého PDF provádím nyní takto.

<?php
	$pdf = new Imagick();
	$pdf->readImage('soubor.pdf');
	foreach($pdf as $index => $image)
	{
    		$image->setCompression(Imagick::COMPRESSION_JPEG);
    		$image->setCompressionQuality(80);
    		$image->setImageFormat('jpeg');
    		$image->resizeImage(850, 650, Imagick::FILTER_LANCZOS, 1 , TRUE);
    		$image->writeImage("ext/$index.jpg");
	}
	$pdf->destroy();
?>

Je to šikovná hračka, bohužel to nemají ne na jednom hostingu správně nastaveno. Ze čtyřech hostingů mi to běhá pouze na Onebitu a to až od dneška.

Editoval Vyki (23. 4. 2010 21:55)

Honza Kuchař
Člen | 1662
+
0
-

A v čem tedy byla krpa?

Vyki
Člen | 388
+
0
-

Psal jsem jim, že by mě ze zajímalo, kde byl zakopanej pes, ale na to mi neodpověděli. Když jsem si s nimi v průběhu několika dnů psal, tak se zmínili, že aktualizovali na nejnovější verzi ImageMagicku na serveru, čehož jsem si v PHPinfu všiml, nicméně ani potom to nefachalo, tak to nejdříve odladili pro příkazovou řádku na serveru a potom řešili propojení s externíma knihovnama. To je vše co mi prozradili.

Vyki
Člen | 388
+
0
-

Tak chyba byla způsobena tím že si ImageMagick nerozumněl s GhostScriptem. I ta vyjímka Postscript delegate failed tomu nasvědčovala. GhostScript přiložený v repozitáři u nejnovější verze ImageMagick, bohuže s IM po instalaci nespolupracuje. Problém vyřešil tím, že zkompiloval nejnovější verzi GS ze zdroje a dal ji na server.