在搜索Google和SO之后,我发现了一些使用ImageMagick创建PDF文档缩略图的代码。
我遇到的麻烦就是将它实现到我的WordPress主题中。我认为我已经陷入了缓存脚本需要临时文件的路径。
我正如文章中所述使用它:
<img src="http://localhost/multi/wp-content/themes/WPalchemy-theme/thumbPdf.php?pdf=http://localhost/multi/wp-content/uploads/2012/03/sample.pdf&size=200 />
哪个必须正确(也许......但我认为我使用完整URL到实际文件是正确的),因为当我点击该URL时,我将被带到一个页面,该页面读取以下错误:
Unable to read the file: tmp/http://localhost/multi/wp-content/uploads/2012/03/sample.pdf.png
现在tmp是在thumbPdf.php脚本中定义的,但我对它应该是什么值感到困惑。它是网址还是路径?像timthumb.php一样,我可以使它相对于thumbPdf.php脚本吗? (我试过./cache这是timthumb中的设置 - 并确保在我的主题根目录中有一个/ cache文件夹,但无济于事)。另外,我在我的root中放了一个/ tmp文件夹,但仍然得到同样的错误。
那么如何配置 tmp 才能使其正常工作?
http://stormwarestudios.com/articles/leverage-php-imagemagick-create-pdf-thumbnails/
function thumbPdf($pdf, $width)
{
try
{
$tmp = 'tmp';
$format = "png";
$source = $pdf.'[0]';
$dest = "$tmp/$pdf.$format";
if (!file_exists($dest))
{
$exec = "convert -scale $width $source $dest";
exec($exec);
}
$im = new Imagick($dest);
header("Content-Type:".$im->getFormat());
echo $im;
}
catch(Exception $e)
{
echo $e->getMessage();
}
}
$file = $_GET['pdf'];
$size = $_GET['size'];
if ($file && $size)
{
thumbPdf($file, $size);
}
我看到了这个答案: How do I convert a PDF document to a preview image in PHP? 我即将去尝试下一步
答案 0 :(得分:1)
错误告诉您需要的一切。
Unable to read the file: tmp/http://localhost/multi/wp-content/uploads/2012/03/sample.pdf.png
脚本当前尝试从服务器tmp /文件夹中读取文件。
$tmp = 'tmp';
$format = "png";
$source = $pdf.'[0]';
//$dest = "$tmp/$pdf.$format";
$dest = "$pdf.$format";
请记住,在安全方面这看起来并不是那么好,有人可以通过给你的脚本格式错误的外部源pdf来利用ImageMagic bug来实现非常讨厌的事情。您至少应该检查图像是否来自允许的来源,例如来自同一主机的请求。
使用ImageMagic的最佳方法是始终保存生成的图像,并且只有在生成的图像不存在时才生成新图像。某些ImageMagic操作在大文件上非常繁重,因此您不希望给服务器带来负担。