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


57

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

発行touch blank.pdfすると、空のPDF ファイルが生成されます。空のPDF ページを生成するコマンドラインツールはありますか?


なぜあなたはそれが必要なのですか?非両面プリンターで両面(両面)印刷をエミュレートするための印刷パッケージがあります。これを行うには、奇数ページ数のジョブの偶数ページを印刷するときに余分な空白ページを配置する必要があります。これを行うには、lpにフォームフィードを送信するだけです。これは空白のページファイルなどを作成せずにトリックを行います...
ジョー・

10
@ジョーブライアンがこれを望んでいる、または必要としているのは、私たちのビジネスではありません。
イアンホルダー

6
@IainHolder:もっと多くのSEユーザーがあなたのように考えてくれたらいいなと思います。
Mehrdad

3
@IainHolder-OPのビジネスをこじ開けようとしていません!私がやっていることのようなものであれば、別の方法があることを提案したかっただけです。多くの場合、このようなことはxyの問題(meta.stackexchange.com/questions/66377/what-is-the-xy-problem)であるため、目標を尋ねることは非常に適切です。
ジョー

5
上記のリンクを詳細に読んだところです。これがこのような論争の的である問題だとは知りませんでした。TL; DR-自分が何をしているのかわかっている場合は、質問に対する答えが欲しいだけです。あなたがそれほどよく知らないなら、あなたは間違った質問をし、本当の問題が何であるかを明確にすることが役立つかもしれません。
ジョー

回答:


85

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: 特別なファイルフォーマットの他の例であると思われます。)

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


2
ImageMagickには便利なマニュアルがありません。「xc:<foo>」は「X Constant Image」を意味しますが、実際には「x canvas」と考えることができます。色の単一ブロック、この場合はnoneを指定する方法です。ImageMagickの「事実上の」マニュアルであるimagemagick.org/Usage/canvas/#solidで詳細を確認してください。
パイプ

2
ちなみに、賢明な用紙サイズが必要な場合は、LetterではなくA4でも機能します。
-TRiG

@TRiG:もちろんです。編集であなたに言及しなかったのは残念ですが、この場合、私はそれを知っていました。
BartekChom

これを受け入れた答えに変更しました。なぜなら、それが私の答えだからです~/bin
ブライアンフィッツパトリック

このコマンドを変更して、n個の空白ページを含むPDFファイルを生成できますか?
ブライアンフィッツパトリック

34

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

PDF 1.5オブジェクトと相互参照ストリーム(ファイルを完全に印刷可能なASCIIにできるという利点がある)を使用しない場合、できることは317バイトであると信じています。コピーと貼り付けた場合、相互参照テーブルエントリ(間のラインの全ての4つ上の末尾のスペースが必要であることにご注意0 4trailer<<...)、そして存在することはない後の最終の改行することになっ%%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 842A4の場合。これをシェルスクリプトに埋め込んで、希望する用紙サイズの空のPDFを出力できます。唯一のトリッキーな部分はstartxref、オブジェクト3のサイズが変わってもオフセットが正確に保たれるようにすることです。



5
このような何かがうまく受信されるかどう私が見るためにmeta.codegolfに投稿:meta.codegolf.stackexchange.com/questions/8990/...
ネイト・エルドリッジ

これは、テキストエディターで空のページを含む有効なPDFドキュメントを作成するのに適したソリューションですが、コマンドラインソリューションとはまったく異なります(OPが要求したとおり)。
カートファイフル

23

あなたが持っている場合convert(ImageMagickのユーティリティ)をインストールして、あなたはこれを行うことができます:

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

1
convert-size出力PDFのサイズを設定するために使用できるオプションもあります。
mkc

21
convert xc:none -page Letter a.pdf空のtxtファイルを作成せずに書き込むこともできます。
BartekChom

3
@BartekChomのメソッドは、さらに空白の空白ページを作成するようです。小さいファイルが生成され、選択可能なファイルはまったくありません(null)。また、フォントエラーは発生しません。
chbrown

1
@BartekChom私はそれを別の答えとして欲しいので、私はそれを支持することができます。
アンコ

1
convert.im6: improper image header a.txt '@ error / txt.c / ReadTXTImage / 429 を取得しました。convert.im6:何の画像が定義されていないa.pdf' @ error/convert.c/ConvertImageCommand/3044.
シガー・

12

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

世界で最も過小評価されているソフトウェアgroffによってもたらされました。


2
CentOS 7.2でgroffバージョン1.22.2 を入手groff: can't find `DESC' filegroff:fatal error: invalid device `pdf'ました。
gla3dr

bash 4.1.2ランニングを使用している私にとって同じメッセージgroff 1.18.1.4
-zundarz

2
@ gla3dr groff-baseだけでなく、完全なgroffパッケージをインストールします。
キャプテンキリン

1
.bp「ブレークページ」の略で、これが2ページのドキュメントを生成する理由です。1ページのドキュメントを作成するには、さらに簡単に実行しecho | groff -T pdf > blank.pdfます。
ファヒムミサ

非常に良い解決策ですが、@ FaheemMithaが言ったように、echo .bp実際にはに置き換える必要がありますecho
myrdd

8

pdfTeXを使用できます。

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

texput.pdfImageMagickが使用するものの半分である約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バイト)。


1
バリアントを使用しますecho "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf。これはわずかに小さく、2200バイトです。
ファヒムミタ

echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry} \begin{document}\shipout\hbox{}\end{document}' | pdflatex作成しますarticle.pdfblank.pdf直接作成することは可能ですか?
ファヒムミタ

@FaheemMitha:うーん、空の入力を持つps2pdfがゼロページを含むPDFファイルを生成することを期待しますが、実際にそこにページがあります。それはどこから来るのだろう...
ヘニングMakholmさん

@Faheem:少なくともTexliveを使用する-jobname <basename>と、コマンドラインで出力ファイルのベース名を設定できます。
ヘニングマックホルム

1
@FaheemMitha:各ページ\shipout\hbox{}またはshowpage1ページを作成します。TeXとPostscriptの両方に使用可能なループ構造がありますが、選択したスクリプト言語を使用してコマンドを適切な回数複製するがおそらく簡単です。
ヘニングマクホルム

3

空白ページでPDFを作成する簡単な方法は、次を使用することrst2pdfです:

echo -e '.. raw:: pdf\n\n   PageBreak' | rst2pdf -o blank.pdf

1つのスペースにエコーするだけでは機能しません。ページのないPDFファイル(空のファイルとは異なります)になります。


2

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

ps2pdf blank.pdf

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

ps2pdf file.ps file.pdf

1
ps2pdf blank.pdf引数としてPostscriptファイルを想定しているため、エラーを返します。また、2番目のコマンドには既存のが必要file.pdfです。何か不足していますか?
ファヒームミサ

1
これを試してください:1 touch blank.ps.; 2 ps2pdf blank.ps blank.pdf.; 3.pdftk A=1.pdf B=blank.pdf cat A1-end B output 2.pdf
ビクトリアスチュアート

2

最後に、空のページを表示する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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.