コマンドラインから空のPDFを作成するには?

コマンドラインから空のPDFを作成するには?

最近、空のPDFページ(8.5 "x 11"サイズ)が必要でしたが、コマンドラインで作成する方法がわからなかったことに気づきました。

展開時にtouch blank.pdf空のPDFが生成されます。文書。空のPDFを生成できるコマンドラインツールはありますか?ページ

答え1

convertKetanの回答に使用されたImageMagickユーティリティを使用すると、次の内容を作成することもできます。

convert xc:none -page Letter a.pdf

または

convert xc:none -page A4 a.pdf

または(横A4用紙の場合)

convert xc:none -page 842x595 a.pdf

など。、空のテキストファイルを作成する必要はありません。 @chbrownはこれが小さなPDFファイルを生成することを見つけました。

「xc:」は「X定数イメージ」を意味しますが、実際には「xキャンバス」と考えることができます。これは単一のカラーブロックを指定する方法ですが、この場合はそうではありません。より多くの情報が必要な場合は訪問してくださいhttp://imagemagick.org/Usage/canvas/#solidこれはImageMagickの「本当の」マニュアルです。 [パイプから追加された情報](これらのものはファイルpdf:aの型を明示的に宣言するために使用できます 。label:'some text'gradient:rose:logo:

Ankoはこの修正を別々の回答として投稿するよう提案したので、そうしています。

答え2

可能な最小のGIF、最小の空白ページPDFは小さすぎて不要ですが、無害なメタデータがファイルサイズの重要な部分になり、圧縮によって実際に作業がより単純になるため、手動で計算する必要があります。大きい。また、ファイル構造のどのビットが必要で、どのビットが必要ないかに関するPDF仕様の規則に細心の注意が必要です。 (/Resources空でもページオブジェクトに辞書を含める必要があることをご存知ですか?いいえストリームを含める必要がありますか/Contents? )

PDF 1.5オブジェクトと相互参照ストリーム(ファイルがASCIIで完全に印刷可能であるという利点がある)を使用しない場合、可能な最善の方法は317バイトです。コピーして貼り付ける場合は、4つの相互参照テーブルエントリ(0 4およびそれらの間の行)のすべての後にスペースが必要ですtrailer<<...いいえ次の最後の改行文字でなければなりません%%EOF

%PDF-1.4
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
2 0 obj<</Type/Pages/Count 1/Kids[3 0 R]>>endobj
3 0 obj<</Type/Page/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<<>>>>endobj
xref
0 4
0000000000 65535 f 
0000000009 00000 n 
0000000052 00000 n 
0000000101 00000 n 
trailer<</Size 4/Root 1 0 R>>
startxref
178
%%EOF

相互参照テーブルを手で作成したv1.5相互参照ストリームに置き換えると、ファイルは少し小さくなりますが、印刷できなくなるASCII:294バイトになります。 (下の外部参照ストリームは読みやすくするために16進ダンプされており、入力できません。いいえストリーム辞書に反映されます。有効なPDFを回復するには、16進ダンプをその生のバイナリバイトに置き換えるか、328バイトの長さのファイルに/Length 15変更して許可する必要があります。/Length 30/Filter/ASCIIHexDecode)

%PDF-1.5
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
2 0 obj<</Type/Pages/Count 1/Kids[3 0 R]>>endobj
3 0 obj<</Type/Page/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<<>>>>endobj
4 0 obj<</Type/XRef/Size 5/W[1 1 1]/Root 1 0 R/Length 15>>stream
0000ff01090001340001650001b200endstream endobj
startxref
178
%%EOF

また、オブジェクト1から3までをオブジェクトストリームにラップしようとしましたが、それがストリームを圧縮しても節約されたものよりも多くのオーバーヘッドが追加されました。

外部参照ストリームの可能な代替表現は次のとおりです。

4 0 obj<</Type/XRef/Size 4/W[0 1 0]/Index[1 4]/Root 1 0 R/Length 4>>stream
091365b2endstream endobj

残念ながら、実際のストリームデータの長さは大幅に節約されますが、追加の長さのために節約され/Index[1 4]たデータの1バイトしか残りません。また、オブジェクト 0 がファイルの外に残ることを許可されているかどうかは不明です。 (オブジェクト0が世代番号-1を持たなければならないかどうかは不明です。それは必要ありません。実際、より多くのバイトを節約できます。

4 0 obj<</Type/XRef/Size 5/W[1 1 0]/Root 1 0 R/Length 10>>stream
000001090134016501b2endstream endobj

.)

用紙サイズを変更するには、612 792PostScriptポイント(72 PostScriptポイント= 1 USインチまたは25.4 mm)で表される適切な幅と高さを置き換えます。たとえば595 842、A4の場合。必要な用紙サイズの空のPDFを出力するシェルスクリプトにそれを含めることができます。唯一のトリッキーな部分は、startxrefオブジェクト3のサイズが変わってもオフセットが正確に維持されることを確認することです。

答え3

(ImageMagickユーティリティ)がインストールされている場合は、convert次のことができます。

touch a.txt && convert a.txt -page Letter a.pdf

答え4

pdfTeXが利用可能です:

echo '\shipout\hbox{}\end' | pdftex

texput.pdfこれは、ImageMagickが使用するものの半分の約900バイトの空白の単一ページを生成します。

ただし、これによりTeXインストールのデフォルトの用紙サイズが適用されます。サイズを明示的に設定するには、LaTeXに移動できます。

echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry}
      \begin{document}\shipout\hbox{}\end{document}' | pdflatex

別のオプションは、GhostscriptのPDFドライバを使用することです。しかし、ps2pdfスクリプトは便利です。

echo showpage | ps2pdf -sPAPERSIZE=letter - blank.pdf

TeXよりはるかに静かでコンパクトな出力(約2300バイト)を生成します。

関連情報