Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert base64 string to PNG using Prawn without saving on server in Rails

So I am trying to embed a PNG image of canvas to PDF using Prawn gem. Base64 string is generated by using canvas' toDataURL() function. As the image is only needed in PDF I'm trying to avoid saving it on the server. Params[:base64string] is correctly passed to the server.

However, I am trying to use

image = Prawn::Images::PNG.new(base64string)

to create the image but I get NoMethodError: undefined method `unpack' for nil:NilClass.

Any ideas what I'm doing wrong or how this should be done correctly?

like image 688
user975705 Avatar asked Nov 04 '22 11:11

user975705


1 Answers

found here:

Prawn wants a file path rather than encoded image data. You could use a tempfile:

require 'prawn'
require 'tempfile'
require 'active_support' # for base64

Prawn::Document.generate('/tmp/test.pdf') do
  file = Tempfile.new('image')
  file.write ActiveSupport::Base64.decode64(image)
  file.close

  image file.path
end

Hope this helps!

like image 172
MrYoshiji Avatar answered Nov 12 '22 14:11

MrYoshiji