最近、単一の空白のPDFページ(8.5 "x 11"サイズ)が必要になりましたが、コマンドラインから作成する方法がわからないことに気付きました。
発行touch blank.pdf
すると、空のPDF ファイルが生成されます。空のPDF ページを生成するコマンドラインツールはありますか?
最近、単一の空白のPDFページ(8.5 "x 11"サイズ)が必要になりましたが、コマンドラインから作成する方法がわからないことに気付きました。
発行touch blank.pdf
すると、空のPDF ファイルが生成されます。空の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
など、空のテキストファイルを作成せずに。@chbrownは、これにより小さなPDFファイルが作成されることに気付きました。
「xc:」は「X Constant Image」を意味しますが、実際には「x canvas」と考えることができます。これは、色の単一ブロックを指定する方法です。この場合はどれも指定しません。詳細については、http://imagemagick.org/Usage/canvas/#solidをご覧ください。ImageMagickの「事実上の」マニュアルです。[パイプからの情報を補足した(のようなものpdf:a
明示ファイルのフォーマットを宣言するために使用することができる。label:'some text'
、gradient:
、rose:
およびlogo:
特別なファイルフォーマットの他の例であると思われます。)
アンコはこの修正を別の回答として投稿することを提案したので、私はそれをやっています。
~/bin
可能な限り最小の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を回復するには、hexdumpを対応する生のバイナリバイト、または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 792
には、PostScriptポイント(72 PostScriptポイント= 1 USインチまたは25.4ミリメートル)で表される適切な幅と高さに置き換えます。たとえば、595 842
A4の場合。これをシェルスクリプトに埋め込んで、希望する用紙サイズの空のPDFを出力できます。唯一のトリッキーな部分はstartxref
、オブジェクト3のサイズが変わってもオフセットが正確に保たれるようにすることです。
あなたが持っている場合convert
(ImageMagickのユーティリティ)をインストールして、あなたはこれを行うことができます:
touch a.txt && convert a.txt -page Letter a.pdf
convert
-size
出力PDFのサイズを設定するために使用できるオプションもあります。
convert xc:none -page Letter a.pdf
空のtxtファイルを作成せずに書き込むこともできます。
(null)
。また、フォントエラーは発生しません。
convert.im6: improper image header
a.txt '@ error / txt.c / ReadTXTImage / 429 を取得しました。convert.im6:何の画像が定義されていないa.pdf' @ error/convert.c/ConvertImageCommand/3044.
echo .bp | groff -T pdf > t.pdf
世界で最も過小評価されているソフトウェアgroffによってもたらされました。
groff: can't find `DESC' file
しgroff:fatal error: invalid device `pdf'
ました。
bash 4.1.2
ランニングを使用している私にとって同じメッセージgroff 1.18.1.4
.bp
「ブレークページ」の略で、これが2ページのドキュメントを生成する理由です。1ページのドキュメントを作成するには、さらに簡単に実行しecho | groff -T pdf > blank.pdf
ます。
echo .bp
実際にはに置き換える必要がありますecho
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
さらに便利なps2pdf
スクリプトですが、GhostscriptのPDFドライバーを使用することもできます。
echo showpage | ps2pdf -sPAPERSIZE=letter - blank.pdf
TeXよりも静かですが、出力はコンパクトではありません(約2300バイト)。
echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf
。これはわずかに小さく、2200バイトです。
echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry} \begin{document}\shipout\hbox{}\end{document}' | pdflatex
作成しますarticle.pdf
。blank.pdf
直接作成することは可能ですか?
-jobname <basename>
と、コマンドラインで出力ファイルのベース名を設定できます。
\shipout\hbox{}
またはshowpage
1ページを作成します。TeXとPostscriptの両方に使用可能なループ構造がありますが、選択したスクリプト言語を使用してコマンドを適切な回数複製する方がおそらく簡単です。
コマンドラインで次のように入力します:
ps2pdf blank.pdf
このコマンドps2pdf
は、PostScriptファイルをPDFに変換するために使用されます
ps2pdf file.ps file.pdf
ps2pdf blank.pdf
引数としてPostscriptファイルを想定しているため、エラーを返します。また、2番目のコマンドには既存のが必要file.pdf
です。何か不足していますか?
touch blank.ps
.; 2 ps2pdf blank.ps blank.pdf
.; 3.pdftk A=1.pdf B=blank.pdf cat A1-end B output 2.pdf
最後に、空のページを表示するPDFを作成するGhostscriptの方法を次に示します。
gs -sDEVICE=pdfwrite -o empty.pdf -c showpage
ほとんどの場合、ページサイズはレターになります。A4が必要な場合は、これを使用します。
gs -sDEVICE=pdfwrite -o empty.pdf -g5950x8420 -c showpage
背景:-c
パラメータは、Ghostscriptを解釈しようとする任意の有効なPostScript文字列が続くことができます。また、PostScriptの空のページは、次の短いコードブロックで表されます。
%!PS
showpage