使用imagemagick从PDF制作多个页面的缩略图

时间:2014-07-22 07:48:06

标签: php pdf imagemagick thumbnails

我已经研究过如何从单页PDF中制作漂亮的缩略图。但是,正如我的下面的代码显示我能为2页以上的PDF做的最好的选择是选择第一页:

$w=320;$h=240;
$fname="my.pdf";
$saveFname = "mypdf.jpg";

$im = new \imagick($fname);
if($im->getNumberImages()>=2){
    $im->setiteratorindex(0);   //Just do first page
    }
$im->thumbnailImage($w,$h,/*bestfit=*/true,/*fill=*/true);
$im->writeImage($saveFname);

我想要做的是并排第1页和第2页,并充分利用可用空间。 (如果可以选择对所有页面或所选页面进行平铺,那就更好了。)

我认为montageImage可能是答案,但我找不到完整的示例,因此无法确定如何指定要处理的PDF页面。

以上列表的注释:

  • thumbnailImage的第3个参数表示它保持原始
  • 的宽高比
  • 第4个参数表示两侧有垫(带白色),因此图像仍为$ w x $ h像素
  • 您可以将[n]附加到$ fname以仅加载页面n(从零开始计算)(例如“my.pdf [0]”生成第一页的缩略图)。
  • 默认情况下,它会执行多页PDF的最后一页,因此需要setiteratorindex()来选择要处理的页面。

1 个答案:

答案 0 :(得分:1)

修改版

这可以更简单地做你想做的事情!

montage -density 288 input.pdf[0,1] -resize 50% -mode Concatenate -tile 2x thumb.jpg

原始解决方案

我不确定如何在php中执行此操作,但这是一个脚本,可以在ImageMagick的命令行执行我想要的操作:

#!/bin/bash
PDF=$1
TMPA="TMPA-$$.JPG"
TMPB="TMPB-$$.JPG"
out=1
#
# Get number of pages in PDF
NUMPAGES=$(identify "$PDF" | wc -l)
echo $PDF has $NUMPAGES pages
#
# Iterate over all pages, two at a time
for ((p=0;p<$NUMPAGES;))
do
    convert -density 288 a.pdf[$p] -alpha remove -resize 50% "$TMPA"
    ((p++))
    convert -density 288 a.pdf[$p] -alpha remove -resize 50% "$TMPB"
    ((p++))
    convert +append "$TMPA" "$TMPB" thumb${out}.jpg
    ((out++))
    rm "$TMPA" "$TMPB" 2> /dev/null
done

另存为thumbnailer并使用如下:

chmod +x thumbnailer
./thumbnailer xyz.pdf

它产生了一个&#34;两个&#34;缩略图文件thumb{1..n/2}.jpg

中PDF的输出

希望有一些提示可以使用什么参数以及在`php中调用哪些函数。