オプションは画像を拡大縮小できないため、あなたがしようとしていることは:background
オプションを使用して行うことはできません。このオプションを使用する場合は、画像が PDF と同じ dpi (通常は 72 dpi) であることを確認する必要があります。Prawn::Document.generate
:background
:background
ただし、通常の画像のようにページに画像を埋め込むだけで、その上にテキストを浮かせることができます。これは、画像を埋め込むときに拡大縮小できるため機能します。コードは次のようになります。
Prawn::Document.generate("#{Rails.root.to_s}/public/#{filename}.pdf", :page_size => [576,576], :left_margin => 50, :right_margin => 50, :page_layout => :portrait, :skip_page_creation => true, :skip_encoding => true) do |pdf|
bg_image = "#{Rails.root.to_s}/public/images/pdf/bg_blank_low.jpg"
pdf.image bg_image, :scale => 0.2311
pdf.move_up 576
end
これにより、「背景」がページを完全に覆うようになります (スケール 2700/576 を手動で計算したため)。余白を尊重したい場合 (これはおそらく一般的にはより良い方法です)、次のように変更できます。
pdf.image bg_image, :width => pdf.bounds.width
これにより、ページの境界ボックスの幅に基づいて画像が自動的にスケーリングされます。move_up
もちろん、次のように変更する必要があります。
pdf.move_up pdf.bounds.height
これを行った後、テキストの挿入を開始できます。テキストは画像の上に表示され、シミュレートされたスケーリングされた背景が得られます。
アップデート
これはコメントに関する更新です。自動的に作成されるページがあり、それらの背景を同じにしたい場合、現在の prawn リリースをそのまま使用しているとうまくいきません。この機能が本当に必要な場合は、エビにパッチを当てる必要があります。
エビのソース ( https://github.com/sandal/prawnから) を入手して見てください。あなたが求めているのはlib/document.rb
、244行目にメソッドがありstart_new_page
、これがあなたが求めているものです。このメソッドの 280 行目で、背景が設定されている場所を確認できます。残念ながら、それはcanvas
つまり、画像がすでに適切なサイズである必要があることを意味します。これが、背景画像が自動的に拡大縮小されない理由です。
この動作をオーバーライドする必要があります。これは Ruby であるため、プロジェクト内でクラスを再度開き、このメソッドをコピーして貼り付けるだけです (これを行う方法についてさらに情報が必要な場合は、Ruby クラスのモンキー パッチに関する情報がたくさんあります)。ここで、このメソッドを思いのままに編集します。おそらく最も簡単な方法は、キャンバスをすべて削除してから、上記のイメージ トリックを使用することです。したがって、行は次のようになります。
image(@background, :width => bounds.width) if @background
move_up bounds.height
これで、背景を設定する標準的な方法に戻ることができ、すべてが機能するはずです。
実際、280行目を次のように変更することで回避できる場合もあります。
canvas { image(@background, :width => bounds.width) } if @background
そして、余分な行を入力する必要がなくなり、すべてが正常に機能するはずです:)。オプションで画像を使用すると、:width
画像が自動的にスケーリング:at
されますが、エビのようにオプションを使用しても画像はスケーリングされません。
注:私は実際にこれを行っていないので、ねじれを解決する必要があるかもしれません.