4

私のコントローラーから私はpdfを作成します:

def show
    @order = Order.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @order }
      format.pdf do
        pdf = InvoicePdf.new(@order, view_context)

        send_data pdf.render, filename: "invoice_#{@order.order_number}.pdf",
                              type: "application/pdf",
                              disposition: "inline",
                              size: 10
      end
    end
  end

請求書_pdf.rb:

require 'barby'
require 'barby/barcode/code_39'
require 'barby/outputter/prawn_outputter'

class InvoicePdf < Prawn::Document
    def initialize(order, view)
        super({
            :top_margin => 70,
            :page_size => 'A4',
            :font_size => 10,
            :text  => 8
            })

        @order = order
        @view = view
        order_number
        barcode
    end

    def order_number
        text "Order #{@order.order_number}"
    end

    def barcode
        barcode = Barby::Code39.new @order.order_number
        barcode.annotate_pdf(XXXX)
    end
end

バーコード メソッドまたはXXXXとしてマークされたオプションを変更して、バーコードを PDF ドキュメントに埋め込むにはどうすればよいですか?

4

2 に答える 2

6

編集

InvoicePdfクラスで、barcodeメソッドを次のように変更します。

def barcode
  barcode = Barby::Code39.new @order.order_number
  barcode.annotate_pdf(self)
end

このannotate_pdfメソッドは、ここPrawn::Documentにある引数としてa を取りselfます。


元の回答

バーコードを使用して新しい PDF を作成する場合は、次のようにします。

def barcode
  _barcode = Barby::Code39.new(@order.order_number)
  outputter = Barby::PrawnOutputter.new(_barcode)
  outputter.to_pdf
end

PrawnOutputter新規またはto_pdf呼び出しで、pdf オプション (高さ、余白、ページ サイズなどを含む) を指定できることに注意してください。詳細については、https ://github.com/toretore/barby/wiki/Outputtersおよびhttp://rdoc.info/github/toretore/barby/Barby/PrawnOutputterのドキュメントを参照してください。

ファイルに書き込みたい場合は、次のようにします。

File.open("my_file.pdf","w") { |f| f.print barcode }

を呼び出すだけでもよいことに注意してください_barcode.to_pdf。これは、新しい を作成するのと同じ効果があるようですPrawnOutputterが、この機能は Barby のドキュメントには記載されていません。

Prawn::Documentバーコードを書き込みたい既存の pdf ドキュメント ( として) がある場合は、次のことができることに注意してください。

def barcode(p_pdf)
  _barcode = Barby::Code39.new(@order.order_number)
  _barcode.annotate_pdf(p_pdf) 
end
于 2013-07-29T16:51:07.467 に答える