如何使用prawn gem将Base64字符串转换为pdf文件

时间:2017-09-13 11:50:36

标签: ruby-on-rails ruby pdf prawn

我想从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

有人能指出我缺少的东西吗?

1 个答案:

答案 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.

修改

澄清评论中提供的一些信息:

  1. 可以使用render text: raw_pdf_str#send_data method(这些是4.x API版本,我不记得5.x API风格)。

  2. 可以对字符串进行编码(来自Prawn对象),而无需将渲染的PDF数据保存到文件中(而是将其保存为String对象)。即:

    encoded_string = Base64.encode64(my_pdf.render)
    
  3. 字符串数据可以直接用作电子邮件附件,类似于模式provided here,只使用字符串直接而不是从文件中读取任何数据。即:

    # inside a method in the Mailer class
    attachments['my_pdf.pdf'] = { :mime_type => 'application/pdf',
                                  :content => raw_pdf_str }