将pdf的第一页转换为jpg时收到无效的文件名错误

时间:2015-02-02 20:41:16

标签: php pdf imagemagick imagick hhvm

我使用imagick将pdf转换为脚本中的jpg我有...如果我在没有指定页面的情况下直接指向上传的pdf,但是当我添加{{{ 1}}到文件路径的末尾,指定我只想读取第一页,它突然出现以下错误:

  

"致命错误:未捕获的异常' ImagickException'与消息   '提供的文件名无效' Imagick-> readImage()"

我还尝试在构造函数中直接使用[0]而没有运气,但如果没有页面说明符,那也可以正常工作。

根据文件......这应该有效。我在这里做错了什么?

'/path/to/file.pdf[0]'

更新:我应该提到我正在使用HHVM。不确定这会对这种情况产生影响......但我是。

UPDATE2:我在HHVM github repo上打开了an issue。希望他们能解决这个问题...在那之前,我在下面标记正确的答案是一个体面的(虽然是hacky)解决方法。

3 个答案:

答案 0 :(得分:4)

好的...所以在我的情况下解决这个问题的方式是使用fopen(),然后使用setIteratorIndex(0),这是非常不直观的。但对于那些有同样问题的人......你去吧!

$pdf_handle = fopen('/path/to/file.pdf', 'rb');

$doc_preview = new Imagick();
$doc_preview->setResolution(180,180);
$doc_preview->readImageFile($pdf_handle);
$doc_preview->setIteratorIndex(0);
$doc_preview->setImageFormat('jpeg');
$doc_preview->writeImage('/path/to/file.jpg');
$doc_preview->clear();
$doc_preview->destroy();

答案 1 :(得分:1)

我的计算机里没有想象力,但我可以猜出问题是什么。问题是当您使用页面部分打开PDF文件时,不能包含包含正斜杠的目录路径字符串。 我认为因为我从php.net这里读取了readImage函数页面http://php.net/manual/en/imagick.readimage.php并且它们没有包含目录路径所以我认为这是一个粗俗但仍在继续。 您应该尝试使用chdir()http://php.net/manual/en/function.chdir.php)将目录更改为PDF文件,然后尝试使用与此$doc_preview->readImage('file.pdf[0]');相同的函数,而不使用目录路径。最有可能它会起作用。 有些API有陈词滥调,你必须解决它们。

答案 2 :(得分:1)

readImage()要求$ filename是绝对路径。

如果要使用相对路径,则在其上使用realpath(),将相对路径转换为绝对文件路径。

而不是

$imagick->readImage('/path/to/file.pdf[0]');

尝试

$imagick->readImage(realpath("/path/to/file.pdf")."[0]");