1

I have a Sinatra app which needs to provide downloadable reports in Microsoft Word format. My approach to creating the reports is to generate the content using ERB, and then convert the resulting HTML into docx. Pandoc seems to be the best tool for accomplishing this, but my implementation involves generating some temporary files which feels kludgy.

Is there a more direct way to generate the docx file and send it to the user?

I know that PandocRuby exists, but I couldn't quite get it working for my purposes. Here is an example of my current implementation:

  #setting up the docx mime type    
   configure do
      mime_type :docx, 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
  end

  # route to generate the report
  get '/report/:name' do
    content_type :docx

    input = erb :report, :layout=>false #get the HTML content for the input file
    now = Time.now.to_i.to_s #create a unique file name
    input_path = File.join('tmp', now+'.txt')
    f = File.new(input_path, "w+") 
    f.write(input.to_s) #write HTML to the input to the file
    f.close()

    output_path = File.join('tmp', now+'.docx') # create a unique output file
    system "pandoc -f html -t docx -o #{output_path} #{input_path}" # convert the input file to docs
    send_file output_path
  end
4

1 に答える 1