繁体   English   中英

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

[英]How to get width and height PDF page by Imagick?

我使用基于Imagick库的Yii2包pdf-to-image包将PDF的每一页都转换为图像。 我还需要获取特定PDF页面的宽度和高度或格式。 有什么办法吗?

Imagick是本机php扩展,可​​使用ImageMagick API创建和修改图像。 因此,不重试任何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 pt == 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

使用一些正则表达式,您可以为每页获取宽度: 595.28pt和高度: 841.89pt ,并将它们转换为毫米。

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

现在我有PDF文件页面的图像。 我知道分辨率(每英寸数像素),我可以像素获取图像的宽度和高度。 因此,无需对数学有深入的了解即可计算以英寸$pdfPageWidth = $imageWidth / $RESOLUTION; $pdfPageHeight = $imageHeght/ $RESOLUTION;的PDF页面的宽度和高度: $pdfPageWidth = $imageWidth / $RESOLUTION; $pdfPageHeight = $imageHeght/ $RESOLUTION; $pdfPageWidth = $imageWidth / $RESOLUTION; $pdfPageHeight = $imageHeght/ $RESOLUTION;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM