web-dev-qa-db-ja.com

コマンドラインからPDFページサイズを照会する方法

スクリプトの場合、PDFファイル(mm))のページの寸法を取得する必要があります。

pdfinfoは 'pts'で出力するだけです。例:

Page size:      624 x 312 pts

何を使うべきですか?

とにかく「pts」の単位は何ですか-変換したい場合に備えて...

35
maxschlepzig

pdfinfoで使用される「pts」ユニットは、PostScriptポイントを示します。 PostScriptポイント は、インチと72ドット/インチの解像度で定義されます。

1980年代後半から1990年代にかけて、従来のポイントはデスクトップパブリッシングポイント(PostScriptポイントとも呼ばれる)に取って代わられ、72ポイントからインチ(1ポイント= 1⁄72インチ= 25.4⁄72 mm =0.352¯7mm[≙ 0.3528 mm])。

gvのマニュアルには、PostScriptポイントで指定された 一般的な用紙フォーマットのリスト が含まれています。

31
maxschlepzig

最も簡単な方法ではありませんが、imagemagickunitsを指定すると、

$ identify -verbose some.pdf | grep "Print size" 
Print size: 8.26389x11.6944

ページサイズをインチ単位で検索し(PDFが異なる次元を使用している場合、いくつかの結果が得られる可能性があります)、次のように数値を変換します。

$ units -t '8.26389 inch' 'mm'
  209.90281

8.26インチが209.9 mmであることを意味します(私はA4 PDFを使用しました)。

15
Axel Knauf

同じ問題に遭遇し、次の解決策にたどり着きました。 PDFファイルの作成方法に関するドキュメントには触れませんでした。ページサイズが異なる2つの空のPDFファイルを比較しただけです。

PDFには、「<<」と「>>」の間に埋め込まれたあらゆる種類の属性があるようです。ページサイズ情報はプレーンテキストであり、単純な正規表現検索で見つけることができます。

これはすべてのPDFに当てはまる場合とそうでない場合がありますが、さまざまなソースから見つけたすべてのPDFで機能しました。

関連する部分は、A4サイズのページでは次のようになります。

/MediaBox [0 0 595 842]
/MediaBox[0 0 595 842]
/MediaBox[ 0 0 595.32 841.92]

これは[0 0 width height]を意味するので、これは私の非常に下手ですが、これを抽出するための実用的な解決策です:

cat test.pdf | egrep -ao "/MediaBox ?\[ ?[0-9]+ [0-9]+ [0-9]+(\.[0-9]+)? [0-9]+(\.[0-9]+)?\]" | head -1

Test.pdfをファイルに変更するだけです。

6
Peter Rakmanyi

Maxchlepzigsの回答を使用してmmを直接計算しました。

$ pdfinfo test.pdf | grep "Page size" | grep -Eo '[-+]?[0-9]*\.?[0-9]+' | awk -v x=0.3528 '{print $1*x}'

これはAlex Knaufs回答でも機能しますが、識別にはpdfinfoよりもはるかに時間がかかり、imagemagickが必要です。ただし、複数のファイルにこれを使用できる(つまり、ディレクトリにcdして*.pdfを使用する)ことができます。

$ identify -verbose some.pdf | grep "Print size" | grep -Eo '[-+]?[0-9]*\.?[0-9]+' | awk -v x=25.4 '{print $1*x}'

2番目のgrepコマンドは、2つのポイント/インチの値を取得します。あなたはgrepの正規表現をスキップしてawkで直接実行できるとかなり確信していますが、私はそれを理解できませんでした。

0
defuzed