イムは、多くのデータをテーブル形式といくつかのリストに含むpdfを作成するためにエビを使用しています。リストの問題は、私がwebfrointendで使っているようなul> liリストに相当する意味がないので、リストとしてテキストを使用しているということです。リストは正当化されません。複数の行を使用するリスト・ポイントは、リスト・アイコンには合わないので、不安定に見えます。私はどのようにして、クラップスのように見えないリストを実装することができますか?エビのリストを使用する
答えて
Prawnは良いPDFライブラリでしたが、問題は独自のビューシステムです。 Prawn-formatがありますが、これ以上管理されません。
WickedPDFを使用することをお勧めします。単純なERBコードをPDFに含めることができます。
エビを使用する:別の汚いと醜いソリューションは、国境ずに2列の表で、最初の列がリスト-弾丸、第2の列のテキストが含まれています:
table([ ["•", "First Element"],
["•", "Second Element"],
["•", "Third Element"] ])
私は同様の問題を抱えていましたそして、エビの中にテーブルを使用するよりもわずかに異なる方法でそれを解決:
["Item 1","Item 2","Item 3"].each() do |list-item|
#create a bounding box for the list-item label
#float it so that the cursor doesn't move down
float do
bounding_box [15,cursor], :width => 10 do
text "•"
end
end
#create a bounding box for the list-item content
bounding_box [25,cursor], :width => 600 do
text list-item
end
#provide a space between list-items
move_down(5)
end
これは明らかエクステ可能性がありたとえば、each()ではなくeach_with_index()で番号付きリストを行うことができます。また、バウンディングボックス内の任意のコンテンツを許可します(これはテーブルでは許可されません)。
このソリューションでは、PDFドキュメントに複数のページがあるときに問題が発生します。テキストが次のページに移動すると、そのページが一番下に表示されます。 –
回り込みは、crmの回答に似た方法を作成することです。違いは、テキストが別のページに移動しても複数のレベルを持つことができないことです。
def bullet_item(level = 1, string)
indent (15 * level), 0 do
text "• " + string
end
end
単純にそうように、このメソッドを呼び出します。
bullet_item(1, "Text for bullet point 1")
bullet_item(2, "Sub point")
はリファクタリング気軽に。
Adobeの内蔵フォントで箇条書きを作成するには、\ u2022を使用します。
\u2022 This will be the first bullet item
\u2022 blah blah blah
エビはWinAnsiコードで(グリフ別名)シンボルをサポートしており、これらは、UTF-8でエンコードされなければなりません。詳細については、次の記事を参照してください。https://groups.google.com/forum/#!topic/prawn-ruby/axynpwaqK1g
サラウンドマニュアルには、サポートされているグリフの完全なリストがあります。
なぜこの回答は認識されませんでしたか? @電源 - ちょうどこれを自分で使いました。あなたの構文では二重引用符でカプセル化されていると言わなければなりません。 – Tass
これはちょうど顧客のためにこれを行いました。 UL/OLのリストを含むフォーマット済みのHTMLをレンダリングしたいすべての人のために:
def render_html_text(text, pdf)
#render text (indented if inside ul)
indent = 0 #current indentation (absolute, e.g. n*indent_delta for level n)
indent_delta = 10 #indentation step per list level
states = [] #whether we have an ol or ul at level n
indices = [] #remembers at which index the ol list at level n, currently is
#while there is another list tag do
# => starting position of list tag is at i
# render everything that comes before the tag
# cut everything we have rendered from the whole text
#end
while (i = text.index /<\/?[ou]l>/) != nil do
part = text[0..i-1]
if indent == 0 #we're not in a list, but at the top level
pdf.text part, :inline_format => true
else
pdf.indent indent do
#render all the lis
part.gsub(/<\/li>/, '').split('<li>').each do |item|
next if item.blank? #split may return some ugly start and end blanks
item_text = if states.last == :ul
"• #{item}"
else # :ol
indices[indices.length-1] = indices.last + 1
"#{indices.last}. #{item}"
end
pdf.text item_text, :inline_format => true
end
end
end
is_closing = text[i+1] == '/' #closing tag?
if is_closing
indent -= indent_delta
i += '</ul>'.length
states.pop
indices.pop
else
pdf.move_down 10 if indent == 0
type_identifier = text[i+1] #<_u_l> or <_o_l>
states << if type_identifier == 'u'
:ul
elsif type_identifier == 'o'
:ol
else
raise "what means type identifier '#{type_identifier}'?"
end
indices << 0
indent += indent_delta
i += '<ul>'.length
end
text = text[i..text.length-1] #cut the text we just rendered
end
#render the last part
pdf.text text, :inline_format => true unless text.blank?
end
ありがとうございました。 改善点: 'String#blank?'は純粋なRubyではありません。 '.strip == '''をクイックフィックスとして使用しました。 箇条書き項目をレンダリングするときに '#{item.strip}'に使用されます。そうしないと、箇条書きの後に行末が表示されてしまいます(おそらくHTMLマークアップの改行のためです) –
カーソルの位置を尊重するだけでなく、コードの行数の少ない真のリストのようにレンダリングする優れたソリューションです:
items = ["first","second","third"]
def bullet_list(items)
start_new_page if cursor < 50
items.each do |item|
text_box "•", at: [13, cursor]
indent(30) do
text item
end
end
end
start_new_page節では、行頭文字項目が次のページに移動する必要がある場合があります。これにより、弾丸を弾丸の内容で維持する。
例PDFレンダリングスクリーンショット:
- 1. エビのグラフィック
- 2. pdfをレンダリングするためにエビを使用するのは何ですか?
- 3. Amazon S3のエビPDF
- 4. エビを使ったPDF生成でのテーブル生成の問題
- 5. リストのリスト(forを使用した範囲の使用)
- 6. ディクショナリタイプのリストを使用する
- 7. は、日本語のテキストでPDFを生成するために、外部のTTFフォントを使用したエビを使用して
- 8. lapplyを使用してリストのリストを操作する
- 9. リストのテスト<T>リストを使用する<T>
- 10. エビのテーブルで単語を囲む方法
- 11. erlangリストを使用してリストを減算する:map
- 12. クエリーストリングを使用するSharePoint BCSリスト
- 13. F#再帰的リストを使用する
- 14. リスト操作を使用するPython
- 15. JSONでリストを使用する場合
- 16. リストをpythonマルチプロセッシングで使用する
- 17. アンドロイドNativeActivityで使用するメソッドのリスト
- 18. java 8リストのインスタンスを使用してマップするリストを変更する
- 19. Railsの自身の行動で3とエビ
- 20. jQueryを使用して複数のリストを複数のリストに分割する
- 21. リストをキーを使用してオートマッテの既存のリストにマップする
- 22. Forループの使用リスト
- 23. Python GCSE - リストの使用
- 24. 人のリストで使用される名前のリストが
- 25. VS2008の「未使用の使用を削除する」例外のリスト
- 26. LINQを使用して別のリストからリストを取得する
- 27. プライオリティキューの基になるコンテナのカスタムタイプのリストを使用する
- 28. リストを使用しているMarkupBuilder
- 29. リストで使用するJavaの型を制限する
- 30. リストを使用してPythonを使用して2つの名前の共通文字のリストを返す
あなたが何をしようとしたのですか? – tmaximini
私はちょうどテキストとしてripmentリストを試しましたが、コメントが1つ以上の行を持つとすぐに治療と見えます。 – davidb