2016-08-17 64 views
0

我想下载我的动态内容作为pdf文件。 PDF正在生成,但没有内容,甚至没有一个简单的文本(当我测试的时候)。Rails wicked_pdf宝石生成空的pdf

因为我需要大量的数据,我需要计算和发送参数而不刷新页面,所以我通过Ajax请求来完成它。

$("#download_pdf").click(function() { 
    report_type = $("#report_type").val(); 
    start_date = $("#start_date").val(); 
    end_date = $("#end_date").val(); 
    date_type = $("#date_type").val(); 

    $.ajax({ 
    data: { report_type: report_type, start_date: start_date, end_date: end_date, date_type: date_type }, 
    url: '/reports/generate_pdf.pdf', 
     success: function(data) { 
      var blob=new Blob([data]); 
      var link=document.createElement('a'); 
      link.href=window.URL.createObjectURL(blob); 
      link.download="Report_"+new Date()+".pdf"; 
      link.click(); 
      console.log("pdf printed"); 
     } 
    }); 
}); 

这里是控制我的Ruby代码:

def generate_pdf 

    @results = get_report_result_by_datetype(params[:report_type], params[:start_date], params[:end_date], params[:date_type]) 
    @type = params[:report_type].to_i 


    @start_date = params[:start_date] 
    @end_date = params[:end_date] 

    respond_to do |format| 
     format.html 
     format.pdf do 
     render pdf: "report", 
      layout:    'pdf_layout', 
      template:   'reports/generate_pdf.html.erb', 
      encoding:   'UTF8', 
      print_media_type: true, 
      disposition:   'attachment', 
      page_size:   'letter', 
      orientation:   'landscape', 
      lowquality:   'false', 
      debug:    true 
     end 
    end 
end 

有在我获取数据没有问题。

注意:我注意到最奇怪的是,当计算的数组很小时,生成的pdf有一页,如果它很大,生成的pdf将显示多页。

如果有人指出我出错的地方,我会非常感激。

在此先感谢!

回答

0

虽然我不知道如何解决您的wicked_pdf代码,我可以推荐使用宝石prawn(这是不特定的轨道,并删除了一些Rails的魔法从方程)如下:

format.pdf do 
    pdf_path = Rails.root.join("tmp", "my_file_name.pdf") 
    template_path = Rails.root.join("app", "views", "reports", "generate_pdf.html.erb") 
    this = binding 
    Prawn::Document.generate(pdf_path) do 
    text Erb.new(template_path).result(this) 
    end 
    render file: pdf_path  
end 

实际上没有对它进行测试,所以如果不起作用,我们表示抱歉。