如何从命令行查询pdf页面大小?

如何从命令行查询pdf页面大小?

对于脚本编写,我需要获取 PDF 文件的页面尺寸(以毫米为单位)。

pdfinfo只需将其打印为“pts”,例如:

Page size:      624 x 312 pts

我应该用什么?

或者无论如何单位是“pts” - 如果我想转换它们......

答案1

使用的“pts”单位pdfinfo表示 PostScript 点。 APostScript 点以英寸为单位,分辨率为每英寸 72 点:

在 20 世纪 80 年代末到 90 年代,传统点被桌面出版点(也称为 PostScript 点)取代,其定义为 72 点/英寸(1 分= 1⁄72 英寸 = 25.4⁄72 毫米 =0.352 ̄7毫米[≙0.3528毫米])。

该手册gv包含常见纸张格式列表以 PostScript 点指定。

答案2

不是最简单的方法,但给定imagemagickunits你也可以使用

$ identify -verbose some.pdf | grep "Print size" 
Print size: 8.26389x11.6944

查找以英寸为单位的页面大小(如果 PDF 使用不同的尺寸,这可能会产生多个结果),然后像这样转换数字:

$ units -t '8.26389 inch' 'mm'
  209.90281

这意味着 8.26 英寸为 209.9 毫米(我使用的是 A4 PDF)。

答案3

遇到了同样的问题并得出了以下解决方案。我没有深入了解如何构建 pdf 文件的文档,我只是比较了两个具有不同页面大小的空 pdf 文件。

看起来 pdf 在“<<”和“>>”之间嵌入了各种属性。我发现页面大小信息以纯文本形式存在,可以通过简单的正则表达式搜索找到。

这可能适用于所有 pdf,也可能不适用于所有 pdf,但它适用于我从不同来源找到的所有 pdf。

对于 A4 尺寸的页面,相关部分可以类似于以下任何部分:

/MediaBox [0 0 595 842]
/MediaBox[0 0 595 842]
/MediaBox[ 0 0 595.32 841.92]

这意味着 [0 0 宽度高度] 所以这是我的超级蹩脚但有效的解决方案来提取它:

cat test.pdf | egrep -ao "/MediaBox ?\[ ?[0-9]+ [0-9]+ [0-9]+(\.[0-9]+)? [0-9]+(\.[0-9]+)?\]" | head -1

只需将 test.pdf 更改为您的文件即可。

答案4

不幸的是pdfinfo只给出了第一页的大小。我们可以用来mutool从所有(或某些选定的)页面获取尺寸。然后使用awk以毫米为单位显示这些页面尺寸。

mutool info -M file.pdf \
 | awk '/\[ [ .[:digit:]]+ \]/ { printf "Page %02d: %9s x %-9s\n",  $1, $8*25.4/72 "mm", $9*25.4/72 "mm" }'
Page 01:     841mm x 1189mm   
Page 02:     594mm x 841mm    
Page 03:     420mm x 594mm    
Page 04:     297mm x 420mm    
Page 05:     210mm x 297mm    
Page 06:     148mm x 210mm    
Page 07:     105mm x 148mm    
Page 08:    1000mm x 1414mm   
Page 09:     707mm x 1000mm   
Page 10:     500mm x 707mm    
Page 11:     353mm x 500mm    
Page 12:     250mm x 353mm    
Page 13:     176mm x 250mm    
Page 14:     125mm x 176mm    
Page 15:  184.15mm x 266.7mm  
Page 16:   215.9mm x 355.6mm  
Page 17:   215.9mm x 279.4mm

mutool返回页面大小pts,定义为国际英寸的 1⁄72。注意1 in = 25.4 mm

创建具有不同尺寸页面的 PDF 文件

file.pdfmutool是使用pdfjam以下 bash 脚本创建的

#!/bin/bash

#Creating pdf file with an empty A4 (595 x 842 pts) page. 
mutool create -o empty.pdf /dev/null

#Using empty.pdf as template for creating 17 diferents page sizes
for PAPERSIZE in {letter,legal,executive,{a,b}{0..6}}paper; do 
    pdfjam -q --paper "${PAPERSIZE}" -o "${PAPERSIZE}.pdf" empty.pdf 
done

#Merging in file.pdf
mutool merge -o file.pdf *paper.pdf

相关内容