gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:10:14 24 4
gpt4 key购买 nike

我需要扫描上传的PDF,以确定其中的页面是否全部为纵向页面或是否有横向页面。是否可以使用PHP或linux命令扫描这些页面的PDF?

最佳答案

(更新的答案-向下滚动...)
您可以使用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使您可以非常轻松,非常广泛地调整输出格式。
pdfinfo:
pdfinfo input.pdf | grep "Page.*size:"
输出示例:
Page size:      595.276 x 841.89 pts (A4)
如果涉及多页PDF,则 pdfinfo绝对比 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页的大小(要报告的 f irst)到第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比较仅适用于带整数的shell。用 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.05CreationDate:   Thu Jul 26 14:23:31 2012ModDate:        Thu Jul 26 14:23:31 2012Tagged:         noForm:           nonePages:          2Encrypted:      noPage    1 size: 595 x 842 pts (A4)Page    1 rot:  0Page    2 size: 842 x 595 pts (A4)Page    2 rot:  0File size:      3100 bytesOptimized:      noPDF version:    1.4

    Do you see the lines saying Page 1 rot: 0 and Page 1 rot: 0?

    Do you notice the lines saying Page 1 size: 595 x 842 pts (A4) and Page 2 size: 842 x 595 pts (A4) and the differences between the two?

    XPDF's pdfinfo output

    Now let's compare this to the output of XPDF's pdfinfo:

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

    You may notice one more difference, if you look closely enough. I won't point my finger to it, and will keep my mouth shut for now... :-)

    Poppler's pdfinfo correctly reports rotation of page 2

    Next, I rotate the second page of the file by 90 degrees using pdftk (I don't have Adobe Acrobat around):

    pdftk \
    a4portrait+landscape.pdf \
    cat 1 2E \
    output a4portrait+landscape---page2-landscaped-by-pdftk.pdf
    现在,Poppler的 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)
    CreationDate:Thu Jul 26 14:39:47 2012
    修改日期: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行告诉我们我们正在寻找什么。 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(由 The Poppler Developers开发)是 XPDF(由 Glyph & Cog LLC开发)的一个分支,发生于2005年左右。(作为当时他们将Poppler开发人员 fork 的重要原因之一,Glyph&Cog并不总是提供及时的错误修复。有关安全性的问题...)
    无论如何,Poppler分支在很长一段时间内一直保持关联的命令行实用程序,其命令行参数和语法以及其输出格式与原始(XPDF/Glyph&Cog LLC)兼容。
    现有的Poppler工具在竞争XPDF工具方面获得了更多功能
    但是,最近他们开始添加其他功能。从我的头顶上出来:
  • pdfinfo现在还报告每个页面的旋转状态(从2012年3月1日发布的Poppler v0.19.0开始)。
  • pdffonts现在还报告每种字体的字体编码(从2012年3月15日发布的Poppler v0.19.1开始)。

  • Poppler工具获得更多 sibling
    Poppler工具还提供了一些额外的命令行实用程序,这些实用程序不在原始XPDF软件包中(其中一些是最近才添加的):
  • pdftocairo-用于创建PNG,JPEG,PostScript,EPS,PDF,SVG(使用开罗)的实用程序
  • pdfseparate-提取PDF页面的实用工具
  • pdfunite-合并PDF文件的实用程序
  • pdfdetach-从PDF
  • 列出或提取嵌入式文件的实用程序
  • pdftohtml-从PDF文件转换HTML的实用程序
  • 关于php - 如何使用PHP或Linux脚本找到PDF的方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11529715/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com