带有Rails的PDFKit使用render_to_string创建格式错误的文本

时间:2013-02-16 08:55:56

标签: ruby-on-rails ruby encoding pdfkit

我正在使用PDFKit将部分视图呈现为PDF文件。但是,在尝试使用render_to_string(首选方法)而不是外部Web请求时,我遇到了一些问题。

使用网址

呈现时的pdf文件
html = "#{root_url}/contracts/#{@contract.id}"
pdf = PDFKit.new(html, page_size: 'Letter').to_pdf

Proper Text

使用render_to_string呈现时的pdf文件:

html = render_to_string :partial => "agreement"
pdf = PDFKit.new(html , page_size: 'Letter').to_pdf
*from the console*
html => "\n\n<style>\n  #contract h2{text-align: center; margin-bottom: 10px;}\n  #contract em{font-weight: bold; text-decoration: underline; font-style: normal;}\n  #contract p.tab{margin-left: 25px;}\n  #contract ol{list-style:lower-alpha;}\n  #contract ol li{margin-left: 25px; font-size: 1em; line-height: 1.615em; color: #555; margin-bottom: 5px;}\n  #contract b{font-weight: bold;}\n  #contract p p{margin-left: 10px;}\n</style>\n<div id=\"contract\">\n <p>This agreement (“<b>Agreement</b>”) is entered into...

Malformatted Text

我做错了什么?

1 个答案:

答案 0 :(得分:3)

源部分中有弯曲的引号。控制台输出显示:

...<p>This agreement (“<b>Agreement</b>”)...

曲线引号为UTF-8字符,但PDFKit默认将其解析为ASCII。请参阅this question


编辑:传入直接呈现的字符串需要字符串使用UTF-8编码。 Ruby 1.9默认执行此操作。在Ruby 1.8中,尝试以下操作:

html = render_to_string :partial => "agreement", :encoding => "UTF-8"