Posts Tagged ‘Ruby’

Scenario:
In many cases we need to deal with a huge number of pdf files. As in my case I am currently working on a shipping project , which deals with the pdf labels so I have faced the problem to store a pdf in database in encoded form and to display the decoded pdf file inline by base64. So here I will share the steps to solve this problem.

Solution:
Data type for the column of the table where we have to save the pdf in encrypted form should be “text” type.
Lets say column name is image_hex.
example:-

(t.text     “image_hex”)

Then we need to add the base64 module.

require ‘base64’

The purpose of using base64 to encode data is that it translates any binary data into purely printable characters.

The methods for encode and decode is given below-

  1.  encode64(data) – Returns the encoded version data.
  2.  decode64(str) – Returns the Base64-decoded version of str(encrypted date).

Lets see an example.

First we will encode pdf so that we can store it in a database.

image_hex = Base64.encode64(File.open( “#{PATH}#{file_name}.pdf”).read)

Now, image_hex contains the encoded form of pdf which we can store in database.

Now if we want to delete the original pdf(physical file) file then

File.delete(“#{PATH}#{file_name}.pdf”) if File.exist?(“#{PATH}#{file_name}.pdf”)

Now we have to use the stored encoded form of the file to show in the view(Display pdf inline).

@pdf_file = Base64.decode64(database_object.image_hex).html_safe
send_data @label_image, :type => ‘application/pdf’, :disposition => ‘inline’

This will display the pdf file decode form(original form).

Hope this will help!!