从 rails 应用中的多个模型创建 pdf 文件

Create pdf file from multiple models in rails app

在我的 rails 应用中,用户在不同的模型中输入大量数据。用户应该可以从他在不同模型中输入的所有数据创建一个 pdf 文件。哪个 ruby gem 提供此功能,如何使用?我已经研究过 Prawn,但无法弄清楚它是否提供了使用来自不同模型的数据创建一个 pdf 的功能。

Prawn 是一个用于从任何 数据生成PDF 的库。如何创建 PDF 取决于您。还有你的数据来自哪里。因此,请查看 Prawn 中有关如何操作的文档。

您可能还想查看 prawn-table,因为它支持向 PDF 文档添加表格。

我认为您不会找到任何预构建的解决方案来满足您的需求。

这里整理教程如何使用大虾pdf打印相关模型

例如我有父模型并且它有很多车(相关模型)

class Parent < ActiveRecord::Base
  has_many :cars, dependent: :destroy
  accepts_nested_attributes_for :cars, allow_destroy: :true
end

在我的控制器中,我定义如下

class ParentsController < ApplicationController

  def show
      @parent = Parent.find(params[:id])

      respond_to do |format|
        format.html     
        format.pdf do
            # here you call prawn pdf class (see below)
            pdf = ParentPdf.new(@parent)
            send_data pdf.render, filename: 'family.pdf',
                                  type: 'application/pdf',
                                  disposition: 'inline'
          end
        end
      end
    end
  end
end

您可以按照 app/pdf/parent_pdf.rb 创建文件夹和文件,它继承自 Prawn::Document class

class ParentPdf < Prawn::Document

  def initialize(parent)
    # init margin and size
    super(top_margin: 5, left_margin: 5, page_size: 'A4', page_layout: :landscape, print_scaling: :none)

    # pass argument to variable
    @parent = parent
    # here is you access related models like you access from your controller
    @cars = @parent.cars
    # you print the model
    print_header 
    # and print related model
    print_detail
  end 

  def print_header
    bounding_box([420, 510], width: 350, height: 90) do
      text "name: #{@parent.name}", size: 11
    end
  end

  def print_detail
    font 'Helvetica'
    font_size 9
    @cars.each do |car|
      text "car: #{car.name}", size: 11
    end
  end

end

最后是通过 hyper 打印 pdf 的命令link

<%= link_to 'print pdf', parent_path(parent, format: "pdf"), :class => 'btn btn-sm btn-secondary' %>