CC0ライセンスの空白PDFファイル

はじめに

ライセンス的に問題のない「空白PDFファイル」が欲しかったのですが、すぐに見つからなかったので作りました。リポジトリはこちらです。

https://github.com/kaityo256/blank_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を生成する機能があると一番幸せな気がしますが、作ってプルリクするのがいいのかな。

  1. 最初、このページ見て「RubyとlibHaruを使っている」ところまで見て、自分でPrawnで書いてから、後で見返してみたら「追記」にPrawnを使う方法が書いてあることに気が付きました。