0

私はPrawnを使用してHTMLソースからPDFファイルを生成しています。このHTMLには、太字、斜体、下線、順序付きリスト、順序なしリストなど、一部の基本的な書式のみが含まれています。最初の3つについては、Prawnがコマンドでの使用を処理:inline_format => truetextます。

ulPrawnに理解してolタグを付け、PDFファイルのリストに変換するように指示するにはどうすればよいですか?ヘルパーを使うべきだと理解しています。誰もがこれに直面したことがありますか?

ありがとう!

4

3 に答える 3

2

そのため、Prawnは組み込みのHTML解析を提供しないため、ulandliタグの意味を認識しません。エビのテキストボックスが最も近いオプションかもしれません。

編集:

-

この目的のために、ここに小さな、実行可能な実装があります:

HTML文字列は<ul><li>First line</li><li>Second line</li></ul>

Ruby HTMLパーサーを使用して、行を解析できます。ここではのこぎりを使用しました。

require 'nokogiri'
require 'prawn'

Prawn::Document.generate "result.pdf" do |pdf|
  Nokogiri::HTML("html_string_above").xpath('//li').each do |node|
    pdf.text_box "#{node.inner_html}"
  end
end

-

これを実現するには、htmlからpdfへの変換gemを使用する方がはるかに簡単です。WickedPDFプロジェクトを見てください。

于 2012-09-23T17:02:54.210 に答える
1

私は自分で小さなヘルパーを作成することになりました。これはあまりきれいではないかもしれませんが、きちんとしたHTMLで非常にうまく機能するようです

def parse_lists(body)
  # add a bullet for each line in a list.
  body = body.gsub(/<li>/, "<li>#{Prawn::Text::NBSP * 3}<font size='20'>  •  </font>")
  # add a line break for any list element, since li, ol and ul will be later removed.
  body.gsub(/<\/ul>/, "</ul><br>").gsub(/<\/li>/, "</li><br>").gsub(/<\/ol>/, "</ol><br>")
end

これは後でHTMLサニタイズと一緒に使用し、text parse_lists(body), :inline_format => truePrawnコマンドから呼び出されます。

Kashyapの答えはおそらくずっと一貫しているので正しいとマークしていますが、他の人に役立つ場合に備えて、この機能するスニッパーも残しています。

于 2012-09-26T01:25:04.240 に答える
1

良いアプローチは、 Nokogiriを使用してHTML文字列を前処理する方法を提供し、Prawnが「inline_format」オプションで管理できる基本タグのみをテキストに残すことです。

def self.render_html_text(instr)
   # Replacing <p> tag
   outstr = instr.gsub('<p>',"\n")
   outstr.gsub!('</p>',"\n")
   # Replacing <ul> & <li> tags
   doc = Nokogiri::HTML(outstr)
   doc.search('//ul').each do |ul|
     content = Nokogiri::HTML(ul.inner_html).xpath('//li').map{|n| "• #{n.inner_html}\n"}.join
     ul.replace(content)
   end
   #removing some <html><body> tags inserted by Nokogiri
   doc.at_xpath('//body').inner_html
end
于 2018-03-25T15:46:11.343 に答える