相关疑难解决方法(0)

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

我想pdf从DB记录生成文件.将其编码为Base64字符串并将其存储到DB.哪个工作正常.现在我想要反向操作,如何解码Base64字符串并pdf再次生成文件?

这是我到目前为止所尝试的.

def data_pdf_base64
  begin
    # Create Prawn Object
    my_pdf = Prawn::Document.new
    # write text to pdf
    my_pdf.text("Hello Gagan, How are you?")
    # Save at tmp folder as pdf file
    my_pdf.render_file("#{Rails.root}/tmp/pdf/gagan.pdf")
    # Read pdf file and encode to Base64
    encoded_string = Base64.encode64(File.open("#{Rails.root}/tmp/pdf/gagan.pdf"){|i| i.read})
    # Delete generated pdf file from tmp folder
    File.delete("#{Rails.root}/tmp/pdf/gagan.pdf") if File.exist?("#{Rails.root}/tmp/pdf/gagan.pdf")
    # Now converting Base64 to pdf again
    pdf = Prawn::Document.new
    # I have used ttf font because it …
Run Code Online (Sandbox Code Playgroud)

ruby pdf ruby-on-rails prawn

8
推荐指数
1
解决办法
2615
查看次数

使用Base64中的图像生成带有图像的PDF

我想在一个pdf中保存多个png.我从API调用收到的PNG到Endicia Label Server,它给我一个Base64编码图像作为响应.

基于这个问题:

如何使用Prawn将base64字符串转换为PNG而不保存在Rails中的服务器上

def batch_order_labels
  @orders = Spree::Order.ready_to_ship.limit(1)
  dt = Date.current.strftime("%d %b %Y ")
  title = "Labels - #{dt} - #{@orders.count} Orders"

  Prawn::Document.generate("#{title}.pdf") do |pdf|
    @orders.each do |order|
      label = order.generate_label
      if order.international?
        @image = label.response_body.scan(/<Image PartNumber=\"1\">([^<>]*)<\/Image>/imu).flatten.last
      else
        @image = label.image
      end

      file = Tempfile.new('labelimg', :encoding => 'utf-8')
      file.write Base64.decode64(@image)
      file.close


      pdf.image file
      pdf.start_new_page
    end
  end

  send_data("#{title}.pdf")
end
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

"\ x89"从ASCII-8BIT到UTF-8

任何的想法?

base64 png ruby-on-rails prawn

6
推荐指数
2
解决办法
4246
查看次数

标签 统计

prawn ×2

ruby-on-rails ×2

base64 ×1

pdf ×1

png ×1

ruby ×1