我想从DB记录生成select
文件。将其编码为pdf
字符串并将其存储到DB。哪个工作正常。现在我想要反向操作,如何解码Base64
字符串并再次生成Base64
文件?
这是我到目前为止所尝试的内容。
pdf
现在我收到以下错误:
编码ASCII-8BIT无法透明地转换为UTF-8。 请确保您尝试使用的字符串的编码是 设置正确
我尝试了How to convert base64 string to PNG using Prawn without saving on server in Rails,但它给了我错误:
“\ xFF”从ASCII-8BIT到UTF-8
有人能指出我缺少的东西吗?
答案 0 :(得分:5)
答案是解码Base64编码的字符串并直接发送或直接保存到磁盘(将其命名为PDF文件,但不使用prawn)。
解码后的字符串是PDF文件数据的二进制表示,因此无需使用Prawn或重新计算PDF数据的内容。
即
raw_pdf_str = Base64.decode64 encoded_string
render :text, raw_pdf_str # <= this isn't the correct rendering pattern, but it's good enough as an example.
修改强>
澄清评论中提供的一些信息:
可以使用render text: raw_pdf_str
或#send_data
method(这些是4.x API版本,我不记得5.x API风格)。
可以对字符串进行编码(来自Prawn对象),而无需将渲染的PDF数据保存到文件中(而是将其保存为String对象)。即:
encoded_string = Base64.encode64(my_pdf.render)
字符串数据可以直接用作电子邮件附件,类似于模式provided here,只使用字符串直接而不是从文件中读取任何数据。即:
# inside a method in the Mailer class
attachments['my_pdf.pdf'] = { :mime_type => 'application/pdf',
:content => raw_pdf_str }