是否可以在不使用gem的情况下在rails中渲染/生成pdf?

时间:2019-02-24 09:24:22

标签: ruby-on-rails pdf

有些宝石可以生成pdf。但是我不想使用宝石。我尝试了以下方法:

def show
    respond_to do |format|
       format.html
       format.pdf
    end
end

对于链接:

link_to show_path(@show, format: :pdf)

我可以得到pdf输出,但它表示pdf文档可能无法正确显示。

1 个答案:

答案 0 :(得分:5)

Rails不会立即生成pdf。 PDF是具有二进制部分的7位文本格式,因此从技术上讲,您可以使用ERB模板show.pdf.erb手动生成它:

%PDF-1.1
%¥±ë

1 0 obj << /Type /Catalog /Pages 2 0 R >>
endobj

2 0 obj << /Type /Pages /Kids [3 0 R] /Count 1 /MediaBox [0 0 300 300] >>
endobj

3 0 obj << /Type /Page /Parent 2 0 R
    /Resources
     << /Font
         << /F1
            << /Type /Font /Subtype /Type1 /BaseFont /Times-Roman >>
         >>
     >>
    /Contents 4 0 R
  >>
endobj

4 0 obj << /Length 90 >>
  stream
    BT
      /F1 18 Tf
      90 150 Td
      (Hello World!) Tj
    ET
  endstream
endobj

trailer << /Root 1 0 R /Size 4 >>
%%EOF

某些应用程序可以查看这个最小的PDF,但是其中有错误,因为没有xref部分,并且对象字节数将是错误的。同样,一旦您需要比单页带有几个文本标签更复杂的内容,它将变得难以维护。

更好的生成方式实际上是使用虾或wicked_pdf之类的宝石