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