【问题标题】:Rails and Prawn PDF - add current item ID to filename?Rails and Prawn PDF - 将当前项目 ID 添加到文件名?
【发布时间】:2011-02-28 15:23:30
【问题描述】:

我有两个使用 Prawn PDF “即时”制作的 PDF。

这些 PDF 文件称为 jobsheet.pdf 和discharge.pdf - 它们的网址是:

railsroot/kases/IDNO/jobsheet.pdf
railsroot/kases/IDNO/discharge.pdf

我正在尝试研究如何自动将文件名附加到 ID 号:

railsroot/kases/IDNO/jobsheet_IDNO.pdf
railsroot/kases/IDNO/discharge_IDNO.pdf

要创建 PDF,代码如下:

Kases 控制器

def jobsheet
    @kase = Kase.find(params[:id])

    respond_to do |format|
      format.html {} # jobsheet.html.erb
      format.xml  { render :xml => @kase }
      format.pdf { render :layout => false }

      prawnto :prawn => { 
                 :background => "#{RAILS_ROOT}/public/images/jobsheet.png", 
                 :left_margin => 0, 
                 :right_margin => 0, 
                 :top_margin => 0, 
                 :bottom_margin => 0, 
                 :page_size => 'A4' }
    end

  end

  # GET /kases/1
  # GET /kases/1.xml
  def discharge
    @kase = Kase.find(params[:id])

    respond_to do |format|
      format.html { } # discharge.html.erb
      format.xml  { render :xml => @kase }
      format.pdf { render :layout => false }

      prawnto :prawn => { 
                 :background => "#{RAILS_ROOT}/public/images/discharge.png", 
                 :left_margin => 0, 
                 :right_margin => 0, 
                 :top_margin => 0, 
                 :bottom_margin => 0, 
                 :page_size => 'A4' }
    end

  end

路线

 map.resources :kases, :member => { :discharge => :get }
  map.resources :kases, :member => { :jobsheet => :get }

要查看 PDF,我使用以下链接:

jobsheet_kase_path(@kase, :format => 'pdf')
discharge_kase_path(@kase, :format => 'pdf')

这可能吗?

谢谢,

丹尼

【问题讨论】:

    标签: ruby-on-rails pdf pdf-generation prawn


    【解决方案1】:

    prawnto documentation 看来,prawnto 方法支持将文件名作为选项哈希的一部分传递。所以你应该能够做这样的事情:

    def jobsheet 
      @kase = Kase.find(params[:id]) 
    
      respond_to do |format| 
        format.html # jobsheet.html.erb 
        format.xml { render :xml => @kase } 
        format.pdf { render :layout => false } 
    
        prawnto :filename => "jobsheet_#{@kase.id}", :prawn => {  
          :background => "#{RAILS_ROOT}/public/images/jobsheet.png",          
          :left_margin => 0,  
          :right_margin => 0,  
          :top_margin => 0,  
          :bottom_margin => 0,  
          :page_size => 'A4' } 
      end 
    end 
    

    【讨论】:

    • 嗨,约翰,我在几分钟前的文档中注意到了这一点,但它似乎没有任何效果。名称仍然是jobsheet.pdf 和discharge.pdf - 我的路线可以覆盖名称吗?谢谢,丹尼
    • 啊——别理我。文件名有效,但我期待 URL 发生变化——我的错误。谢谢你帮助我!谢谢,丹尼
    【解决方案2】:

    如果不使用 prawnto,以下适用于 prawn-rails 和 prawn_plus。

    # in format.pdf
    headers["Content-Disposition"] = "attachment; filename=\"file-#{model.id}.pdf\""
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-17
      • 2014-09-07
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多