アップロードされた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
、出力フォーマットを非常に簡単かつ広範囲に微調整できることです。
pdfinfo:
pdfinfo input.pdf | grep "Page.*size:"
出力例:
Page size: 595.276 x 841.89 pts (A4)
pdfinfo
複数ページのPDFに関しては、よりも確実に高速で正確です。identify
(私がこれをテストした13ページのPDFはidentify
、処理に31秒かかりましたが、pdfinfo
必要な時間は0.5秒未満でした。...)
警告:デフォルトでは、最初のページ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が必要です。withで除算すると、可能な実数値が整数に丸められます...)-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
ユーザーに実際に吸収されていません...
私が述べたように、周りには2つの異なるpdfinfo
ユーティリティがあります。
- パッケージの一部として
xpdf-utils
提供されるもの(一部のプラットフォームではxpdf-tools
)。 - パッケージの一部として
poppler-utils
提供されるもの(一部のプラットフォームpoppler-tools
では、とも呼ばれ、パッケージとして分離されていない場合もありますが、メインpoppler
パッケージの一部です)。
Popplerのpdfinfo
出力
これがPopplerのpdfinfo
コマンドからの出力例です。テストされたファイルは2ページのPDFで、最初のページは縦向きのA4で、2番目のページは横向きのA4形式です。
kp @ mbp:〜$ pdfinfo -f 1 -l 2 a4portrait + landscape.pdf プロデューサー:GPL Ghostscript 9.05 作成日:2012年7月26日木曜日14:23:31 ModDate: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)
2つの違いに気づきましたか?
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 ModDate:2012年7月26日木曜日14:23:31 タグ付き:いいえ ページ:2 暗号化:いいえ ページ1サイズ:595 x 842ポイント(A4) ページ2サイズ:842 x 595ポイント(A4) ファイルサイズ:3100バイト 最適化:いいえ PDF版:1.4
よく見ると、もう1つの違いに気付くかもしれません。私はそれに指を向けないでしょう、そして今のところ私の口を閉じたままにします... :-)
Popplerpdfinfo
は2ページのローテーションを正しく報告します
次に、ファイルの2ページ目を90度回転しますpdftk
(Adobe Acrobatはありません)。
pdftk \
a4portrait+landscape.pdf \
cat 1 2E \
output a4portrait+landscape---page2-landscaped-by-pdftk.pdf
今、Popplerpdfinfo
はこれを報告しています:
kp @ mbp:〜$ pdfinfo -f 1 -l 2 a4portrait + landscape --- page2-landscaped-by-pdftk.pdf 作成者:pdftk 1.44-www.pdftk.com プロデューサー:itex-paulo-155(itextpdf.sf.net-lowagie.com) 作成日:2012年7月26日木曜日14:39:47 ModDate: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によって開発された)は、 2005年頃に発生したXPDF(Glyph&Cog LLCによって開発された)のフォークです。 tセキュリティ関連の問題に対して常にタイムリーなバグ修正を提供します...)
とにかく、Popplerフォークは非常に長い間、関連するコマンドラインユーティリティ、それらのコマンドラインパラメータと構文、および元の(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
。
編集:申し訳ありませんが、元の質問に対するマイクBのコメントを参照していました。彼が言ったように、幅と高さを知った後、ポートレートまたは横向きの画像があるかどうかを判断できます(高さ>幅の場合はポートレート、それ以外の場合は横向き)。
また、引数に\n
追加されると-format
(Kurt Pfeifleによって提案されたように)、各ページが独自の行に分割されます。%W
彼はまた、および%H
フォーマットパラメータについても言及しています。可能なすべてのフォーマットパラメータはここにあります(それらはたくさんあります)。