微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用PHP或Linux脚本找到PDF的方向?

我需要扫描上传的PDF,以确定其中的页面是全部是纵向还是有景观页面.有没有可以使用 PHP或linux命令扫描这些页面的PDF?
(更新的答案 – 向下滚动…)

您可以使用pdfinfo(poppler-utils或xpdf-tools的一部分)或识别(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

注意,如何识别使用零页面计数机制!

如果宽度大于其高度,页面是“景观”.他们既不是,也不是,如果两者都是平等的.

优点是识别可以让您轻松,广泛地调整输出格式.

pdfinfo:

pdfinfo input.pdf | grep "Page.*size:"

示例输出

Page size:      595.276 x 841.89 pts (A4)

如果涉及到多页PDF,pdfinfo肯定比识别更快,更准确. (13页的PDF我测试了,需要识别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页的大小(l ast报告).

脚本:

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比较只对整数使用,除以1和bc之间的比例可以将可能的实数值乘以整数…)

结果:

Page 1 is portrait...
Page 2 is portrait...
Page 3 is landscape...
[...]
Page 12 is landscape...
Page 13 is portrait...

更新:使用’正确’pdfinfo来发现页面旋转…

我的初步答案是pdfinfo的号角.小夜曲X在评论中说,他/她的问题是发现旋转的页面.

好的,现在,这里还有一些尚未被广泛使用的附加信息,而且还没有真正被所有pdfinfo用户所吸收.

正如我所提到的,有两个不同的pdfinfo工具:

>作为xpdf-utils包的一部分(在某些平台上也称为xpdf-tools)的那个.
>作为poppler-utils软件包的一部分(在某些平台上也称为poppler-tools,有时它不会被分离为一个包,而是主要的poppler包的一部分).

Poppler的pdfinfo输出

所以这里是Poppler的pdfinfo命令的输出示例.测试文件一个2页的PDF,其中第一页是肖像A4,第二页是横向A4格式:

kp@mbp:~$ pdfinfo -f 1 -l 2 a4portrait+landscape.pdf 
Producer:       GPL Ghostscript 9.05
CreationDate:   Thu Jul 26 14:23:31 2012
ModDate:        Thu Jul 26 14:23:31 2012
Tagged:         no
Form:           none
Pages:          2
Encrypted:      no
Page    1 size: 595 x 842 pts (A4)
Page    1 rot:  0
Page    2 size: 842 x 595 pts (A4)
Page    2 rot:  0
File size:      3100 bytes
Optimized:      no
PDF version:    1.4

你看到这样一句话,说:1:rot:0和Page 1 rot:0?

你是否注意到这样的一行:第一页大小:595 x 842点(A4)和尺寸:842 x 595点(A4)和两者之间的差异?

XPDF的pdfinfo输出

现在我们来比较XPDF的pdfinfo的输出

kp@mbp:~$ xpdf-pdfinfo -f 1 -l 2 a4portrait+landscape.pdf 
Producer:       GPL Ghostscript 9.05
CreationDate:   Thu Jul 26 14:23:31 2012
ModDate:        Thu Jul 26 14:23:31 2012
Tagged:         no
Pages:          2
Encrypted:      no
Page    1 size: 595 x 842 pts (A4)
Page    2 size: 842 x 595 pts (A4)
File size:      3100 bytes
Optimized:      no
PDF version:    1.4

您可能会注意到另外一个区别,如果你仔细看.我不会指着我的手指,现在我会闭嘴…

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐