我需要扫描上传的 PDF 以确定其中的页面是否都是纵向的,或者是否有横向页面。有没有办法可以使用 PHP 或 linux 命令来扫描这些页面的 PDF?
2 回答
(更新的答案 - 向下滚动......)
您可以使用pdfinfo
(poppler-utils或xpdf-tools的一部分)或identify
(ImageMagick 工具包的一部分)。
确认:
identify -format "%f Page %s: Width: %W -- Height: %H\n" T-VD7.PDF
示例输出:
T-VD7.PDF Page 0: Width: 595 -- Height: 842
T-VD7.PDF Page 1: Width: 595 -- Height: 842
T-VD7.PDF Page 2: Width: 1191 -- Height: 842
[...]
T-VD7.PDF Page 11: Width: 595 -- Height: 421
T-VD7.PDF Page 12: Width: 595 -- Height: 842
或者更简单一点:
identify -format "%s: %Wx%H\n" T-VD7.PDF
给出:
0: 595x842
1: 595x842
2: 1191x842
[...]
11: 595x421
12: 595x842
注意,如何identify
使用从零开始的页面计数机制!
如果页面的宽度大于高度,则页面为“横向”。如果两者相等,则它们既不是也不是。
优点是可以identify
让您非常轻松且非常广泛地调整输出格式。
pdf信息:
pdfinfo input.pdf | grep "Page.*size:"
示例输出:
Page size: 595.276 x 841.89 pts (A4)
pdfinfo
如果涉及多页 PDF,肯定比更快、更精确。identify
(我测试的 13 页 PDF 需要identify
31 秒才能处理,而pdfinfo
需要不到半秒......)
警告:默认情况下只pdfinfo
报告第一页的大小。要获取所有页面的大小(您可能知道,有些 PDF 使用混合页面大小和混合方向),您必须修改命令:
pdfinfo -f 3 -l 13 input.pdf | grep "Page.*size:"
现在输出:
Page 1 size: 595.276 x 841.89 pts (A4)
Page 2 size: 595.276 x 841.89 pts (A4)
Page 3 size: 1191 x 842 pts (A3)
[....]
Page 12 size: 595 x 421 pts (A5)
Page 13 size: 595.276 x 841.89 pts (A4)
这将打印第 3 页(首先报告)到第 13 页(最后报告)的大小。
编写脚本:
pdfinfo \
-f 1 \
-l 1000 \
Vergleich-VD7.PDF \
| grep "Page.* size:" \
| \
| while read Page _pageno size _width x _height rest; do
[ "$(echo "${_width} / 1"|bc)" -gt "$(echo "${_height} / 1"|bc)" ] \
&& echo "Page $_pageno is landscape..." \
|| echo "Page $_pageno is portrait..." ; \
done
(bc
-trick 是必需的,因为-gt
比较仅适用于整数的 shell。除以1
withbc
会将可能的实数值取整为整数......)
结果:
Page 1 is portrait...
Page 2 is portrait...
Page 3 is landscape...
[...]
Page 12 is landscape...
Page 13 is portrait...
更新:使用“权利”pdfinfo
发现页面旋转...
我最初的回答吹响了pdfinfo
. Serenade X 在评论中说他/她的问题是发现旋转的页面。
好的,这里有一些尚未广为人知的附加信息,因此尚未被所有pdfinfo
用户真正吸收......
正如我所提到的,有两种不同的pdfinfo
实用程序:
- 作为
xpdf-utils
包的一部分提供的一个(在某些平台上也称为xpdf-tools
)。 - 作为包的一部分出现的那个
poppler-utils
(在某些平台上也称为poppler-tools
,有时它不是作为包分开而是作为主poppler
包的一部分)。
波普勒的pdfinfo
输出
因此,这里是 Popplerpdfinfo
命令的示例输出。测试文件是 2 页 PDF,其中第一页为纵向 A4,第二页为横向 A4 格式:
kp@mbp:~$ pdfinfo -f 1 -l 2 a4portrait+landscape.pdf 制作人:GPL Ghostscript 9.05 创建日期:2012 年 7 月 26 日星期四 14:23:31 修改日期:2012 年 7 月 26 日星期四 14:23:31 标签: 没有 形式:无 页数:2 加密:否 第 1 页尺寸:595 x 842 磅 (A4) 第 1 页腐烂:0 第 2 页尺寸:842 x 595 磅 (A4) 第 2 页腐烂:0 文件大小:3100 字节 优化:无 PDF版本:1.4
你看到说Page 1 rot: 0
和的线条了Page 2 rot: 0
吗?
你注意到这句话Page 1 size: 595 x 842 pts (A4)
和Page 2 size: 842 x 595 pts (A4)
两者之间的区别了吗?
XPDF 的pdfinfo
输出
现在让我们将其与 XPDF 的输出进行比较pdfinfo
:
kp@mbp:~$ xpdf-pdfinfo -f 1 -l 2 a4portrait+landscape.pdf 制作人:GPL Ghostscript 9.05 创建日期:2012 年 7 月 26 日星期四 14:23:31 修改日期:2012 年 7 月 26 日星期四 14:23:31 标签: 没有 页数:2 加密:否 第 1 页尺寸:595 x 842 磅 (A4) 第 2 页尺寸:842 x 595 磅 (A4) 文件大小:3100 字节 优化:无 PDF版本:1.4
如果您仔细观察,您可能会注意到另一个不同之处。我不会把手指指向它,我会暂时闭上嘴...... :-)
Popplerpdfinfo
正确报告第 2 页的旋转
pdftk
接下来,我使用(我没有 Adobe Acrobat)将文件的第二页旋转 90 度:
pdftk \
a4portrait+landscape.pdf \
cat 1 2E \
output a4portrait+landscape---page2-landscaped-by-pdftk.pdf
现在波普勒的pdfinfo
报道是这样的:
kp@mbp:~$ pdfinfo -f 1 -l 2 a4portrait+landscape---page2-landscaped-by-pdftk.pdf 创建者:pdftk 1.44 - www.pdftk.com 制作人:itext-paulo-155 (itextpdf.sf.net-lowagie.com) 创建日期:2012 年 7 月 26 日星期四 14:39:47 修改日期:2012 年 7 月 26 日星期四 14:39:47 标签: 没有 形式:无 页数:2 加密:否 第 1 页尺寸:595 x 842 磅 (A4) 第 1 页腐烂:0 第 2 页尺寸:842 x 595 磅 (A4) 第 2 页腐烂:90 文件大小:1759 字节 优化:无 PDF版本:1.4
如您所见,该行Page 2 rot: 90
告诉我们我们正在寻找什么。XPDFpdfinfo
将基本上报告有关更改文件的信息,就像它报告原始文件一样。当然,它仍然可以正确捕获更改的Creator:
,Producer:
和*Date:
信息,但它会错过旋转的页面......
还要注意这个细节:第2页最初设计为横向页面,从Page 2 size: 842 x 595 pts (A4)
信息部分可以看出。但是,它在当前 PDF 中显示为纵向页面,如Page 2 rot: 90
部件所示。
另请注意,轮换信息可能会出现 4 个不同的值:
0
(无旋转),90
(向东旋转,或顺时针旋转 90 度),180
(向南旋转,翻滚的页面图像,倒置,或顺时针 180 度),270
(向西旋转,或逆时针旋转 90 度,或顺时针旋转 270 度)。
一些背景信息
Popper(由The Poppler Developers 开发)是XPDF(由Glyph & Cog LLC开发)的一个分支,它发生在 2005 年左右。(当时他们分叉 Poppler 开发人员的重要原因之一是:Glyph & Cog 没有t 总是为与安全相关的问题提供及时的错误修复......)
无论如何,Poppler fork 很长一段时间以来一直保持相关的命令行实用程序、它们的命令行参数和语法以及它们的输出格式与原始 (XPDF/Glyph & Cog LLC) 兼容。
与竞争 XPDF 工具相比,现有的 Poppler 工具获得了额外的功能
但是,最近他们开始添加其他功能。从我的头顶冒出:
pdfinfo
现在还报告每个页面的轮换状态(从 2012 年 3 月 1 日发布的 Poppler v0.19.0 开始)。pdffonts
现在还报告每种字体的字体编码(从 2012 年 3 月 15 日发布的 Poppler v0.19.1 开始)。
Poppler 工具获得更多兄弟姐妹
Poppler 工具还提供了一些额外的命令行实用程序,这些实用程序不在原始 XPDF 包中(其中一些是最近才添加的):
pdftocairo
- 用于创建 PNG、JPEG、PostScript、EPS、PDF、SVG 的实用程序(使用 Cairo)pdfseparate
- 提取 PDF 页面的实用程序pdfunite
- 用于合并 PDF 文件的实用程序pdfdetach
- 从 PDF 中列出或提取嵌入文件的实用程序pdftohtml
- 从 PDF 文件转换 HTML 的实用程序
identify
ImageMagick 附带的将为您提供给定 PDF 文件的宽度和高度(它还需要在系统上安装 GhostScript)。
$ identify -format "%g\n" FILENAME.PDF
1417x1106+0+0
1417
宽度在哪里,1106
高度在哪里,您(为此)可以忽略+0+0
.
编辑:对不起,我指的是Mike B对原始问题的评论 - 正如他所说,在知道宽度和高度后,您可以确定您是否有纵向或横向图像(如果高度 > 宽度则纵向,否则为横向)。
此外,\n
添加到参数中的-format
参数(如 Kurt Pfeifle 所建议的)会将每个页面分隔成自己的行。他还提到了%W
和%H
格式参数;所有可能的格式参数都可以在这里找到(有很多)。