はじめに
ライセンス的に問題のない「空白PDFファイル」が欲しかったのですが、すぐに見つからなかったので作りました。リポジトリはこちらです。
空白PDFが欲しい
あるPDFファイルと別のPDFをpdftk
で結合することを考えます。この時、二つ目のPDFを、いわゆる「奇数ページ起こし」にしたいことがあります。つまり、1つ目のファイル(A)が奇数ページ(例えば3ページ)で終わっており、二つ目のファイル(B)が偶数ページ(例えば4ページ)ある時、そのまま結合して両面印刷すると
A1,A2 | A3,B1 | B2, B3| B4
みたいになって読みづらくなります。これを、空白を一枚挟んで
A1,A2 | A3,空白 | B1, B2| B3, B4
としたくなりますね。もし空白のPDFblank.pdf
があれば、pdftk
を使って
pdftk A.pdf blank.pdf B.pdf cat output output.pdf
でおしまいです。というわけで、PDFblank.pdf
が欲しいわけですが・・・、空白のPDFってどうやって作るんだ?
で、ググって見ると、Rubyを使う方法も出てくるんですが、オンラインツール使う方法とか、Adobe Acrobatを使う方法とかが多い感じです。英語でググっても、なんかツールを使えみたいなのが多くて、うーん、という感じ。
たまに「白紙PDFをどうぞ」的なサイトもあるのですが、ライセンスが不明なのと、ダウンロードしてみると、ファイルに余計な情報が入っていたりして微妙だったりします。
というわけで、こちらでも紹介されている、Ruby + Prawnで空白PDFを生成することにします1。
Ruby + Prawnで空白PDF
といっても、コードはこれだけ。
require "prawn"
doc = Prawn::Document.new(page_size: "A4")
doc.render_file "blank.pdf"
できあがるPDFも
%PDF-1.3
%????
1 0 obj
<< /Creator <feff0050007200610077006e>
/Producer <feff0050007200610077006e>
>>
endobj
2 0 obj
<< /Type /Catalog
/Pages 3 0 R
>>
endobj
3 0 obj
<< /Type /Pages
/Count 1
/Kids [5 0 R]
>>
endobj
4 0 obj
<< /Length 4
>>
stream
q
Q
endstream
endobj
5 0 obj
<< /Type /Page
/Parent 3 0 R
/MediaBox [0 0 595.28 841.89]
/CropBox [0 0 595.28 841.89]
/BleedBox [0 0 595.28 841.89]
/TrimBox [0 0 595.28 841.89]
/ArtBox [0 0 595.28 841.89]
/Contents 4 0 R
/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
>>
>>
endobj
xref
0 6
0000000000 65535 f
0000000015 00000 n
0000000109 00000 n
0000000158 00000 n
0000000215 00000 n
0000000268 00000 n
trailer
<< /Size 6
/Root 2 0 R
/Info 1 0 R
>>
startxref
540
%%EOF
と最低限で、余計な情報が入っていなくていい感じです。ちなみに二行目の「????」は、このファイルがバイナリであることを知らせるための非ASCIIデータです。一応このファイルをCC0ライセンスでリポジトリに置いておくので、必要な人はダウンロードして使ってください。
まとめ
なんか空白PDFが必要な人が、その都度スクリプトその他で作ってる気がしてアレな気がしますね。pdftk
に白紙PDFを生成する機能があると一番幸せな気がしますが、作ってプルリクするのがいいのかな。
-
最初、このページ見て「RubyとlibHaruを使っている」ところまで見て、自分でPrawnで書いてから、後で見返してみたら「追記」にPrawnを使う方法が書いてあることに気が付きました。 ↩