0

複数行のフッターテキストがあります。テキストの長さは、ユーザーの名前と勤務先の会社によって異なります。すべてのフッターと同様に、PDFのメインコンテンツと混ざらないように、ドキュメントの下限の下に表示する必要があります。

問題は、Prawnでテキストをドキュメントの下限より下に印刷することを見つけた唯一の理由は、#draw_textを使用することです。これは、number_pagesがテキストをドキュメントの下限の下に表示するために使用するのと同じメソッドです。ただし、#draw_textを使用する際の1つの注意点は、テキストを2行目に折り返すことができないことです。

#text_box、#bounding_boxなどの2行目にテキストを折り返すことができる多くのメソッドを見つけましたが、これらのメソッドの注意点は、ドキュメントの下限より下に何も印刷できないことです。

たとえば、次のドキュメントはドキュメントの下限を下回るため、ドキュメントには何も印刷されません。

text_box "Generated by Tom Cruise for Universal Studios", :at => [bounds.left, 0], :width => 200

以下は、ドキュメントの下限内にあるため、ドキュメントに印刷されますが、すでにそこに存在するコンテンツの上にも印刷されます。

text_box "Generated by Tom Cruise for Universal Studios", :at => [bounds.left, bounds.bottom - 20], :width => 200

そして最後に、以下はドキュメントの下限の下に印刷され、PDF内の既存のコンテンツの上に印刷されないようにしますが、使用可能な:widthオプションや、必要に応じてテキストを2行目に折り返す機能はありません。 :

draw_text "Generated by Tom Cruise for Universal Studios", :at => [bounds.left, 0]

両方の世界を最大限に活用する方法はありますか?ドキュメントの下限より下に印刷し、行の折り返しで最大幅を適用する方法はありますか?

4

2 に答える 2

1

フッターの複数の行を処理するための独自の小さなルーチンを作成することになりました。エビが箱から出してこのようなものをサポートしてくれればいいのですが、なぜいくつかのものが下限の下に表示できないのに、他のものは表示できるのか、私はまだ少し不思議に思っています。また、すべての異なるタイプのテキストメソッドが行の折り返しで:width属性をサポートしていると便利です...しかし、私は逸脱します。これが私が最終的に使用したコードです。

line_wrapper = Prawn::Core::Text::LineWrap.new

repeat :all do
  str = "Generated on " + Time.zone.now.strftime("%m/%d/%y at %I:%M:%S %p %Z") + " by #{user.full_name} at #{user.company.name}"
  starting_position = 0
  while !str.blank?
    single_line = line_wrapper.wrap_line(str, :width => 470, :document => pdf)
    draw_text(single_line, :at => [bounds.left, starting_position])
    starting_position -= 10
    str.slice!(single_line)
  end
end
于 2010-11-19T16:09:17.233 に答える
1

行の折り返しを手動で行う必要があると思います(たとえば、いつ改行するかを計算します)。

しかし、標準の number_pages メソッドと以下を使用して、複数行のフッターを取得できました。

pdf.number_pages "Copyright #{Time.now.year} Company.", [pdf.bounds.left, 0]
pdf.number_pages "Profile generated on #{Time.now.strftime('%B %d, %Y')}.", [pdf.bounds.left, 10]

それはあなたが探しているものですか?

于 2010-11-17T19:05:58.400 に答える