エビを使ってレシートを生成していますが、ページの高さは、顧客が購入するアイテムの数に依存するため、不明です。
こんにちは@vonchristian 、
ページの高さに「auto」を設定する方法がないのではないかと思います。 PDFの主な使用例は、ページ化されたドキュメントです。
回避策として、ページに非常に大きな高さを設定し、必要なものをすべてレイアウトし、必要なスペースの量を記録し、サイズを反映するようにページオブジェクトを操作することをお勧めします。 私はあなたに私の頭のてっぺんのそれをする方法についての正確な指示を与えることができません。 私はあなたがおそらくPDF::Core
の内臓にかなり深く入る必要があるだろうとあなたに言うことができます。
投稿したかったのは:smile:-だからここに行く:
エビが自動的に新しいドキュメントを作成しないように、ドキュメントに非常に大きな高さを使用することもできます。 そして、すべてが終わったら、 Prawn::Document#y
を使用して現在の垂直位置を決定します。
次に、 Prawn::Document#page
( PDF::Core::Page
オブジェクト)を使用して、ページのMediaBoxを次のように調整できます。
require 'prawn'
Prawn::Document.generate("test.pdf", page_size: [100, 2000], margin: 10) do |doc|
rand(100).times do
doc.text("some text")
end
doc.page.dictionary.data[:MediaBox] = [0, doc.y - 10, 100, 2000]
end
@gettalongありがとう! 思ったよりずっと簡単でした。 😅
@vonchristian私は今この問題を閉じます。 この問題が解決しないと思われる場合は、お気軽に再開してください。
感謝! 私の場合、クラスTicketPdf < Prawn::Document
を使用し、メソッドinitializeのソリューションはself.page.dictionary.data[:MediaBox] = [0, self.y - 10, 350, 2000]
です。
ありがとう、見事に動作します!
幅(コンテンツの右端のx
)を決定する方法に関する提案はありますか? 上記の例では、ハードコーディングされています。
PDF::Inspector
で簡単にこれを行うことはできないと思います。
最も参考になるコメント
投稿したかったのは:smile:-だからここに行く:
エビが自動的に新しいドキュメントを作成しないように、ドキュメントに非常に大きな高さを使用することもできます。 そして、すべてが終わったら、
Prawn::Document#y
を使用して現在の垂直位置を決定します。次に、
Prawn::Document#page
(PDF::Core::Page
オブジェクト)を使用して、ページのMediaBoxを次のように調整できます。