2

テンプレートから作成されたドキュメントに透かしを入れることができる必要があります。私は今次のコードを持っています:

# Note: the raw PDF text (body variable below) is sent from a remote server.
Prawn::Document.new(:template => StringIO.new(body), :page_size =>
'A4') do |document|
  # ... including other pages and sections to the template here ...

  # watermark
  d.page_count.times do |i|
    d.go_to_page i
    d.stroke_line [d.bounds.left, d.bounds.bottom], [d.bounds.right, d.bounds.top]
    d.draw_text "Watermark", :rotate => 45, :at => [100,100], :size => 100
  end
end

これは、私が理解できない何らかの理由でテンプレート化されたページを無視しています。ここでプロットが厚くなります。サーバーが透かしを追加すると、このコードは期待どおりに機能します(たとえば、ストレートRubyコード=エビが生成されていないページにテキストをオーバーレイしないが、透かしは事前に透かしを入れたテンプレートで機能します)。私の唯一の推測は、サーバーが実行しているz-index / layerを作成する方法はあるが、Prawn自体は作成できないということです。

これは、PDF生成自体を実行するサーバーからのコードの一部です。これは、iTextを使用して透かしを実行します。

PdfStamper stamper = new PdfStamper(...);
PdfContentByte over = stamper.GetOverContent(i + 1);
over.BeginText();
over.SetTextMatrix(20, 40);
over.SetFontAndSize(bf, 20);
over.SetColorFill(new Color(97, 150, 58));
over.ShowTextAligned(Element.ALIGN_CENTER,
                     watermarkText,
                     document.PageSize.Width / 2,
                     document.PageSize.Height / 2,
                     55);
over.EndText();
over.Stroke();

エビの生データを使用する前にそれが実行された場合は、透かしを入れることができます。図を参照してください。

だから私の質問は:

  1. ハイブリッドの代わりにエビを使って同じ効果を達成する方法を知っている人はいますか?透かしをローカルで処理したいです。

  2. GetOverContent()エビに相当する基本的なものはありますか?

  3. :templateとを使用せずに生のPDFデータの文字列をPrawnに取り込むためのより良い方法はありStringIOますか?(私は#add_content方法を見ましたが、それはうまくいきませんでした)


TL; DR:ドキュメントに透かしを入れるために、エビのテンプレートテキストの上にテキストをフロートさせる必要があります。

私が研究できる洞察や道はありがたいです。これが意味をなさない場合、私は明確にすることができます。

4

2 に答える 2

1

書類にスタンプを押してみてください。

create_stamp("watermark") do
 rotate(30, :origin => [-5, -5]) do
   stroke_color "FF3333"
   stroke_ellipse [0, 0], 29, 15
   stroke_color "000000"
   fill_color "993333"
   font("Times-Roman") do
     draw_text "Watermark", :at => [-23, -3]
   end
   fill_color "000000"
 end
end

stamp_at "watermark", [210, 210] 
于 2013-11-17T13:13:01.700 に答える