如何获取宽度和高度PDF页面由Imagick?

时间:2017-05-19 08:31:09

标签: php pdf yii2 imagick

我使用基于Imagick库的Yii2包pdf-to-image来将每页PDF转换为图像。另外,我需要获得特定PDF页面的宽度和高度或格式。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

Imagick是一个使用ImageMagick API创建和修改图像的本机php扩展。因此,不会重试任何PDF的信息,而是图片的信息:

  

Imagick :: getNumberImages - 返回中的图像的数量   对象

     

$ PDF-> getNumberOfPages(); //返回等于PDF页面数的图像数。这是一种从pdf到图像包的方法。

PDF描述了一个或多个页面的内容和外观。它还包含这些页面的物理大小的定义。该页面大小定义并不像您想象的那么简单。实际上,PDF中与页面大小相关的定义可能高达 5 。这些被称为边界框或页面框。

MediaBox用于指定页面的宽度和高度。对于普通用户,这可能等于实际页面大小。

PDF中的每个页面可以针对各种页面框具有不同的大小。

PDF始终具有MediaBox定义。所有其他页面框不一定必须存在于常规PDF文件中。

MediaBox是PDF中最大的页面框。其他页面框可以等于MediaBox的大小,但预计它们不会更大(后者在PDF / X-4要求中明确要求)。如果它们更大,PDF查看器将使用MediaBox的值。

您应该能够检索确切的“HiResBoundingBox”值(这是PDF中的MediaBox值)。

测试文件是A4(210mm x 297mm), 595.28 pt x 841.89 pt,有四(4)页。

这些值的单位是PostScript点(其中72磅== 1英寸)。

$pdf = "1.pdf";
$output = shell_exec("identify -format \"%[pdf:HiResBoundingBox]\" $pdf");
echo $output;

打印此字符串:

<强> 595.28 X <强> 841.89 + 0 + 0的 595.28 X <强> 841.89 + 0 + 0的 595.28 < /强> X <强> 841.89 + 0 + 0的 595.28 X <强> 841.89 + 0 + 0

对于某些 REGEX ,您可以获得每页的宽度: 595.28pt 和高度: 841.89pt ,并将它们转换为毫米。

答案 1 :(得分:0)

这种做法怎么样? 通过Imagick,我可以轻松地从pdf文件中获取图像      $RESOLUTION = 300; $myurl = 'filename.pdf['.$pagenumber.'];' $image = new Imagick($myurl); $image->setResolution( $RESOLUTION , $RESOLUTION ); $image->setImageFormat( "png" ); $image->writeImage('newfilename.png');

现在从PDF文件的页面有图像。我知道分辨率(每英寸的像素数),我可以得到图像的宽度和高度,以像素为单位。因此,不需要具备深入的数学知识来计算PDF格式的页面宽度和高度:      $pdfPageWidth = $imageWidth / $RESOLUTION; $pdfPageHeight = $imageHeght/ $RESOLUTION;