カテゴリー別アーカイブ: PDF

RubyでPDFのページ数を数える

Rubyスクリプトから,既存のPDFファイルの総ページ数をカウントしたいことがたまにあります。

方法はいくつか考えられます(多少強引なのも含めて)。

PDF::Readerを使う方法

たぶん一番スマート。

#!/usr/bin/env ruby
require 'pdf/reader'

fname = "test.pdf"
p PDF::Reader.new(fname).page_count

PDF::Readerはgemでインストールできます。

$ gem install pdf-reader

続きを読む

白紙のPDF

需要があるかは謎ですが,白紙のPDFを置いてみます。改造や再配布はご自由にどうぞ。

これらが必要になる場面としては例えば,「幾人かの原稿をまとめて一つのPDFにしたいのだけど,各人の1ページめは必ず奇数ページにこないといけない」ような状況を想定しています。花子さんの原稿が3枚で次に太郎さんの原稿を置く場合,間にこの白紙PDFを挟めば良いかと。pdftk でやるならこうですね。

pdftk hanako.pdf blanksheet-a4-portrait.pdf tarou.pdf cat output all.pdf

Acrobatを持っている場合は新規空白ページを作成する方法(Acrobat X)でも可能なようですが,スクリプトでだーっとやりたい場面が多いので。

なお,これらのPDFは,Ruby と libHaru を用いて以下のようなスクリプトで生成しました。

#!/usr/bin/env ruby
require "hpdf"

sizes = %w(A4 A3 A5 B4 B5 LETTER)
directions = %w(PORTRAIT LANDSCAPE)

directions.each do |direction|
  sizes.each do |size|
    pdf = HPDFDoc.new
    page = pdf.add_page
    page.set_size(eval("HPDFDoc::HPDF_PAGE_SIZE_#{size}"),
                  eval("HPDFDoc::HPDF_PAGE_#{direction}"))
    pdf.save_to_file("blanksheet-#{size.downcase}-#{direction.downcase}.pdf")
  end
end

(2017-05-15 追記)
上記スクリプトは libHaru を用いていましたが,libHaru を Ruby から使う場合は hpdf.so が Ruby のバージョンに依存してしまうのがちょっとつらいところです。

Prawn は Pure Ruby なのが良いですね。というわけで最近PDF生成関係のスクリプトを Prawn で書き直したりしています。A4ポートレートの白紙PDFをPrawnで生成するとしたらこんな感じでしょうか。

#!/usr/bin/env ruby
require "prawn"

Prawn::Document.new(:page_size   => 'A4',
                    :page_layout => :portrait).render_file("hakushi-a4.pdf")