使用 PHP 获取 PDF 文件的高度和宽度

Aje*_*shy 2 php pdf height imagemagick width

我有一个使用 Imagick PHP 的 PDF 文件的缩略图创建脚本。

它将创建 PDF 文件第一页的缩略图。

我能够在固定高度和宽度的情况下生成缩略图而不会出现任何问题

我必须获得 PDF 文件第一页的高度和宽度,并且必须相应地计算缩略图的高度和宽度。

如果我必须从图像创建缩略图,我可以在 PHP 中使用 getimagesize 函数,但是有没有类似的函数来获取 PDF 文件第一页的高度和宽度?

Kur*_*fle 6

您可以通过附加[0]到文件名来访问 ImageMagick 可以读取的任何多页文件格式的第一页。

这意味着,您可以identify使用此命令要求打印 PDF 第一页的宽度和高度,将其转换为 PHP 语法应该没有问题

 identify  -format "width: %W  --  height: %H\n"  some.pdf[0]
Run Code Online (Sandbox Code Playgroud)

这将以以下格式打印第一页MediaBox的值:

  width: 345  --  height: 777
Run Code Online (Sandbox Code Playgroud)

这些值的单位是 PostScript 点(其中72 pt == 1 inch)。当然,您可以自由修改命令以满足您的需要,例如仅给出 2 个数字值,或使用以下WxH格式:

 identify  -format "%W %H\n"  some.pdf[0]
 identify  -format "%Wx%H\n"  some.pdf[0]
Run Code Online (Sandbox Code Playgroud)

但是,请注意以下事实:

  1. PDF还支持可选的裁切框裁剪框作品框出血框设置。
  2. 其中最重要的是TrimBox,因为:
  3. 如果TrimBoxMediaBox不同(它需要相同或更小,并且不允许更大!)然后要求 PDF 查看器和打印机驱动程序仅呈现该框内的页面部分。
  4. identify 将仅返回 MediaBox 值,它不支持其他 Boxes。
  5. 同样,convert将使用 PDF 页面的(可能更大的)MediaBox 大小来呈现图像(因此其结果看起来与您在 PDF 查看器中看到的不同)。
  6. 幸运的是,带有与MediaBox值非常不同的TrimBox值的PDF并不常见。
  7. 如果您需要可以访问所有框中的值设置时,应使用不同的命令行工具来提取相关信息:pdfinfo -box -f 1 -l 1 some.pdf | grep -E '(Box:|rot:|size:)'。(如果可能,请使用Poppler版本pdfinfo...)