我正在尝试将多个 png 保存在一个 pdf 中。我从对 Endicia 标签服务器的 API 调用接收 PNG,该服务器向我提供 Base64 编码图像作为响应。
基于这个问题:
如何使用 Prawn 将 base64 字符串转换为 PNG,而不保存在 Rails 中的服务器上 https://stackoverflow.com/questions/13256723/how-to-convert-base64-string-to-png-using-prawn-without-saving-on-server-in-rail
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
但我收到以下错误:
“\x89”从 ASCII-8BIT 到 UTF-8
任何想法?
不需要将图像数据写入临时文件,Prawn::Document#image 可以接受 StringIO。
尝试替换这个:
file = Tempfile.new('labelimg', :encoding => 'utf-8')
file.write Base64.decode64(@image)
file.close
pdf.image file
有了这个:
require 'stringio'
.....
image_data = StringIO.new( Base64.decode64(@image) )
pdf.image(image_data)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)