我使用imagick将pdf转换为脚本中的jpg我有...如果我在没有指定页面的情况下直接指向上传的pdf,但是当我添加{{{ 1}}到文件路径的末尾,指定我只想读取第一页,它突然出现以下错误:
"致命错误:未捕获的异常' ImagickException'与消息 '提供的文件名无效' Imagick-> readImage()"
我还尝试在构造函数中直接使用[0]
而没有运气,但如果没有页面说明符,那也可以正常工作。
根据文件......这应该有效。我在这里做错了什么?
'/path/to/file.pdf[0]'
更新:我应该提到我正在使用HHVM。不确定这会对这种情况产生影响......但我是。
UPDATE2:我在HHVM github repo上打开了an issue。希望他们能解决这个问题...在那之前,我在下面标记正确的答案是一个体面的(虽然是hacky)解决方法。
答案 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]");