【问题标题】:How to get width and height PDF page by Imagick?如何通过 Imagick 获取宽度和高度 PDF 页面?
【发布时间】:2017-05-19 08:31:09
【问题描述】:

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

【问题讨论】:

标签: php pdf yii2 imagick


【解决方案1】:

Imagick 是一个原生 php 扩展,用于使用 ImageMagick API 创建和修改图像。所以不会重试任何 PDF 的信息,而是图像的信息:

Imagick::getNumberImages — 返回 图像 在 对象。

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

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

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

PDF 中的每个页面对于不同的页面框可以有不同的大小。

PDF 总是有一个 MediaBox 定义。所有其他页面框不一定必须出现在常规 PDF 文件中。

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

您应该能够检索到准确的“HiResBoundingBox”值(即 PDF 中的 MediaBox 值)。

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

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

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

打印这个字符串:

595.28x841.89+0+0595.28x841.89+0+0595.28x841.89+0+0595.28x841.89+0+0

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

【讨论】:

  • 感谢您的回答。这个命令 "identify -format \"%[pdf:HiResBoundingBox]\" $pdf" 应该在终端 ubuntu 中工作,对吧(其中 $pdf 是 pdf 文件的路径)?为什么我得到“识别:找不到命令”?
  • 那是因为您的服务器上没有安装 Imagick 库 从终端运行以下命令:sudo apt-get install imagemagick 对于 Mac 用户,只需运行命令:brew install imagemagick
  • 您对我的解决方案有何看法?请看我的回答
  • 通过我的解决方案,我得到了相同的值,并且它的工作速度比通过命令“identify”略快
  • 是的,我喜欢您的解决方案,但它有不同的方法。在我的解决方案中,我从 PDF 文档中获取所有尺寸(请记住,PDF 文档上可能有不同大小的页面)在您的解决方案中您投入时间和精力 1)传递特定的 $pagenumber 和 2)您正在生成一个新文件。 png 正如我在您的问题中看到的,您要求一种方法 来获取特定 PDF 页面的宽度和高度或格式。请记住您的解决方案,您正在使用库中已生成的图像,如果您不生成它们,那么您将无法访问这些值,但是是的,您的解决方案将起作用
【解决方案2】:

这种方法怎么样? 通过 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多