web-dev-qa-db-ja.com

コマンドラインから空白PDFを作成するにはどうすればよいですか?

私は最近、1つの空白PDFページ(8.5 "x 11"サイズ))を必要としていて、コマンドラインからページを作成する方法がわからないことに気付きました。

発行touch blank.pdfは空のPDFfileを生成します。空のPDFページ

61

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:特別なファイル形式の他の例のようです。)

アンコはこの修正を別の回答として投稿することを提案したので、私はそれを行っています。

89
BartekChom

可能な限り小さいGIF のように、可能な限り小さい空白ページPDFは非常に小さいので、メタデータの不要ではあるが無害なビットであるため、手動で作成する必要があります。ファイルサイズの重要な部分になり、圧縮は実際に物事を行いますbigger。また、ファイルのどのビットに関するPDF仕様の規則にも注意する必要があります構造は必須ではありません(空でも、ページオブジェクトに/Resources辞書が含まれている必要があることをご存知ですか。ただし、/Contentsストリームを含めるにはnotが必要ですか? )

PDF 1.5オブジェクトと相互参照ストリームを使用しない場合(これには、ファイルを完全に印刷可能なASCIIにすることができるという利点があります)、最善の方法は317バイトです。貼り付けます。4つの相互参照テーブルエントリ(0 4trailer<<...の間の行)のすべてに後続スペースが必要であり、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のサイズが変更された場合。

33
zwol

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

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

echo .bp | groff -T pdf > t.pdf

世界で最も過小評価されているソフトウェアgroffがお届けします。

13
James K. Lowden

あなたは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ページのないファイルになります(空のファイルとは異なります)。

3
Anthon

コマンドラインで次のように入力します。

ps2pdf blank.pdf

コマンド ps2pdfはPostScriptファイルをPDFに変換するために使用されます

ps2pdf file.ps file.pdf
2
GAD3R

最後に、重要なのは、ここに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
2
Kurt Pfeifle

これにより、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ドキュメントビューアで出力しました。

0
Rob Tow