私は最近、1つの空白PDFページ(8.5 "x 11"サイズ))を必要としていて、コマンドラインからページを作成する方法がわからないことに気付きました。
発行touch blank.pdf
は空のPDFfileを生成します。空のPDFページ?
convert
、Ketanの回答で使用されているImageMagickユーティリティでは、次のようなものも記述できます。
convert xc:none -page Letter a.pdf
または
convert xc:none -page A4 a.pdf
または(横A4用紙の場合)
convert xc:none -page 842x595 a.pdf
etc。 、空のテキストファイルを作成しません。 @chbrownさんは、これにより小さなPDFファイルが作成されることに気付きました。
「xc:」は「X定数画像」を意味しますが、実際には「xキャンバス」と考えることができます。これは、色の単一のブロックを指定する方法です。この場合はありません。詳細は http://imagemagick.org/Usage/canvas/#solid で、ImageMagickの「事実上の」マニュアルです。 [パイプからの情報で補完](pdf:a
のようなものを使用して、ファイルの形式を明示的に宣言できます。label:'some text'
、gradient:
、rose:
およびlogo:
特別なファイル形式の他の例のようです。)
アンコはこの修正を別の回答として投稿することを提案したので、私はそれを行っています。
可能な限り小さいGIF のように、可能な限り小さい空白ページPDFは非常に小さいので、メタデータの不要ではあるが無害なビットであるため、手動で作成する必要があります。ファイルサイズの重要な部分になり、圧縮は実際に物事を行いますbigger。また、ファイルのどのビットに関するPDF仕様の規則にも注意する必要があります構造は必須ではありません(空でも、ページオブジェクトに/Resources
辞書が含まれている必要があることをご存知ですか。ただし、/Contents
ストリームを含めるにはnotが必要ですか? )
PDF 1.5オブジェクトと相互参照ストリームを使用しない場合(これには、ファイルを完全に印刷可能なASCIIにすることができるという利点があります)、最善の方法は317バイトです。貼り付けます。4つの相互参照テーブルエントリ(0 4
とtrailer<<...
の間の行)のすべてに後続スペースが必要であり、notは、%%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を回復するには、hexdumpを対応する未加工のバイナリバイトに置き換えるか、/Length 15
を/Length 30/Filter/ASCIIHexDecode
に変更して、次のファイルを受け入れる必要があります。長さは328バイトです。)
%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が必要かどうかもわかりません。that'sが不要な場合、実際に
4 0 obj<</Type/XRef/Size 5/W[1 1 0]/Root 1 0 R/Length 10>>stream
000001090134016501b2endstream endobj
。)
用紙サイズを変更するには、612 792
をPostScriptポイントで表した適切な幅と高さに置き換えます(72 PostScriptポイント= 1 U.S.インチまたは25.4ミリメートル)。たとえば、A4の場合は595 842
です。これをシェルスクリプトに埋め込んで、必要な用紙サイズの空白PDFを出力することができます。トリッキーな部分は、startxref
オフセットが正確であることを確認することだけです。オブジェクト3のサイズが変更された場合。
convert
(ImageMagickユーティリティ)がインストールされている場合、これを行うことができます。
touch a.txt && convert a.txt -page Letter a.pdf
echo .bp | groff -T pdf > t.pdf
世界で最も過小評価されているソフトウェアgroffがお届けします。
あなたはpdfTeXを使うことができます:
echo '\shipout\hbox{}\end' | pdftex
空白の単一ページを生成しますtexput.pdf
約900バイト、ImageMagickが使用する量の半分。
ただし、これは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バイト)。
PDF空白のページを作成する簡単な方法は、rst2pdf
:
echo -e '.. raw:: pdf\n\n PageBreak' | rst2pdf -o blank.pdf
単一のスペースにエコーするだけでは効果がなく、最終的にPDFページのないファイルになります(空のファイルとは異なります)。
コマンドラインで次のように入力します。
ps2pdf blank.pdf
コマンド ps2pdf
はPostScriptファイルをPDFに変換するために使用されます
ps2pdf file.ps file.pdf
最後に、重要なのは、ここにPDF空のページを表示するGhostscriptの方法です:
gs -sDEVICE=pdfwrite -o empty.pdf -c showpage
ほとんどの場合、ページサイズはレターです。 A4が必要な場合は、これを使用します。
gs -sDEVICE=pdfwrite -o empty.pdf -g5950x8420 -c showpage
背景: the -c
パラメータの後には、Ghostscriptが解釈しようとする有効なPostScript文字列を続けることができます。そして、PostScriptの空のページは、次の短いコードブロックで表されます。
%!PS
showpage
これにより、PDF 1つの空白ページのファイルが生成されます。
_gs -sDEVICE=pdfwrite -o emptyOnePage.pdf -dDEVICEWIDTHPOINTS=612 -dDEVICEHEIGHTPOINTS=792 -c 1 {showpage} repeat
_
_1
_をより大きな数に変更して、より多くのページを生成します。
PDF 64のファイルnumberedページが生成されます:
gs -sDEVICE=pdfwrite -o NumberPages64.pdf -dDEVICEWIDTHPOINTS=612 -dDEVICEHEIGHTPOINTS=792 -c "/Times-Roman findfont 32 scalefont setfont /pagenum 0 def 64 {newpath 250 50 moveto (page ) /pagenum pagenum 1 add def show pagenum ( ) cvs show showpage} repeat"
_64
_を必要なページ数に変更します(_1
_も機能します)。 _1000000
_試してみたところ機能しましたが、not open thatドキュメントビューアで出力しました。