我需要扫描上传的PDF以确定其中的页面是否全部是纵向还是有任何横向页面.有没有我可以使用PHP或Linux命令扫描这些页面的PDF?
Kur*_*fle 15
您可以使用pdfinfo
(poppler-utils或xpdf-tools的identify
一部分)或(ImageMagick工具包的一部分).
identify -format "%f Page %s: Width: %W -- Height: %H\n" T-VD7.PDF
Run Code Online (Sandbox Code Playgroud)
示例输出:
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
Run Code Online (Sandbox Code Playgroud)
或者更简单一点:
identify -format "%s: %Wx%H\n" T-VD7.PDF
Run Code Online (Sandbox Code Playgroud)
得到:
0: 595x842
1: 595x842
2: 1191x842
[...]
11: 595x421
12: 595x842
Run Code Online (Sandbox Code Playgroud)
注意,如何identify
使用从零开始的页面计数机制!
如果页面的宽度大于其高度,则页面为"横向".如果两者相等,它们既不是 - 也不是.
优点是identify
可以非常轻松地调整输出格式.
pdfinfo input.pdf | grep "Page.*size:"
Run Code Online (Sandbox Code Playgroud)
示例输出:
Page size: 595.276 x 841.89 pts (A4)
Run Code Online (Sandbox Code Playgroud)
pdfinfo
肯定是更快,也更精确的比identify
,如果涉及到多页的PDF文件.(我测试过这本13页的PDF文件需要identify
31秒才能处理,而pdfinfo
需要不到半秒......)
警告:默认情况下pdfinfo
,仅报告第一页的大小.要获取所有页面的大小(您可能知道,有些PDF使用混合页面大小以及混合方向),您必须修改命令:
pdfinfo -f 3 -l 13 input.pdf | grep "Page.*size:"
Run Code Online (Sandbox Code Playgroud)
现在输出:
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)
Run Code Online (Sandbox Code Playgroud)
这将打印第3页(的大小˚F通过页面IRST报道)13(升 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
Run Code Online (Sandbox Code Playgroud)
(bc
-trick是必需的,因为-gt
比较仅适用于整数的shell.除以1
with bc
将把可能的实数值四舍五入到整数......)
结果:
Page 1 is portrait...
Page 2 is portrait...
Page 3 is landscape...
[...]
Page 12 is landscape...
Page 13 is portrait...
Run Code Online (Sandbox Code Playgroud)
pdfinfo
发现页面轮换...我最初的答案是为了呐喊pdfinfo
.Serenade X在评论中表示他/她的问题是发现旋转的页面.
好了,这里有一些其他信息尚未广为人知,因此尚未被所有pdfinfo
用户真正吸收......
正如我所提到的,有两种不同的pdfinfo
实用程序:
xpdf-utils
包的一部分(在一些平台上也命名xpdf-tools
).poppler-utils
包的一部分出现的那个(在某些平台上也有名称poppler-tools
,有时它不是作为包分离出来的,而是主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
你看行说Page 1 rot: 0
和Page 1 rot: 0
?
你注意到称线Page 1 size: 595 x 842 pts (A4)
,并Page 2 size: 842 x 595 pts (A4)
与两者之间的区别是什么?
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
如果你仔细观察,你可能会注意到另外一个区别.我不会指着它,现在我会闭嘴...... :-)
pdfinfo
正确报告第2页的轮换接下来,我使用pdftk
(我没有Adobe Acrobat)将文件的第二页旋转90度:
pdftk \
a4portrait+landscape.pdf \
cat 1 2E \
output a4portrait+landscape---page2-landscaped-by-pdftk.pdf
Run Code Online (Sandbox Code Playgroud)
现在Poppler pdfinfo
报告了这个:
kp@mbp:~$ pdfinfo -f 1 -l 2 a4portrait+landscape---page2-landscaped-by-pdftk.pdf Creator: pdftk 1.44 - www.pdftk.com Producer: itext-paulo-155 (itextpdf.sf.net-lowagie.com) CreationDate: Thu Jul 26 14:39:47 2012 ModDate: Thu Jul 26 14:39:47 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: 90 File size: 1759 bytes Optimized: no PDF version: 1.4
如您所见,该线Page 2 rot: 90
告诉我们我们在寻找什么.XPDF pdfinfo
本质上会报告与更改文件相同的信息,就像它对原始文件一样.当然,它仍然会正确地捕获更改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(由Poppler开发人员开发)是XPDF(由Glyph&Cog LLC 开发)的一个分支,发生在2005年左右.(当时他们分析Poppler开发人员的一个重要原因是:Glyph&Cog没有' t始终为安全相关问题及时提供错误修正...)
无论如何,Poppler fork很长一段时间都保留了相关的命令行实用程序,它们的命令行参数和语法以及它们的输出格式与原始(XPDF/Glyph&Cog LLC)兼容.
但是,最近他们开始添加其他功能.脱离我的头脑:
pdfinfo
现在还报告每个页面的旋转状态(从2012年3月1日发布的Poppler v0.19.0开始).pdffonts
现在还报告每种字体的字体编码(从2012年3月15日发布的Poppler v0.19.1开始).Poppler工具还提供了一些额外的命令行实用程序,这些实用程序不在原始XPDF程序包中(其中一些仅在最近才添加):
pdftocairo
- 用于创建PNG,JPEG,PostScript,EPS,PDF,SVG的实用程序(使用Cairo)pdfseparate
- 提取PDF页面的实用程序pdfunite
- 合并PDF文件的实用程序pdfdetach
- 用于列出或从PDF中提取嵌入文件的实用程序pdftohtml
- 从PDF文件转换HTML的实用程序 归档时间: |
|
查看次数: |
5787 次 |
最近记录: |