0

我已经尝试了许多用于创建 PDF 文档的 gem,其中一些非常好用,没有太多困难。我的任务是在 PDF 文档中创建一个二维码。我在 QR 生成器和 PDF 生成器之间尝试了很多组合。虽然我在将二维码导入 PDF 文档时遇到了很多麻烦。我正在使用rqrcodegem,我喜欢它,因为它从 CSS 生成二维码,而不是图像。

我尝试过使用专门为使用 Prawn 生成 QR 码而构建的 gem,但是我不断收到一条消息,说它无法识别该modules方法。我得到的最接近的是在我的html文档中使用类似的结构。但这只是在没有表格的情况下使用它,这是没有用的,因为 gem 通过输出表格和 CSS 来工作。

我知道这很模糊,但是由于可能的解决方案和我尝试过的不同尝试的数量,我不确定我应该提供哪些其他信息。

有任何想法吗?rqrcode有没有其他人设法使用 Prawn 中的表格创建带有 gem 的 QR 码?

表格在视图中的外观(HTML,不是 PDF):

<table class="qr">
 <% qr.modules.each_index do |x| -%>
   <tr>
   <% qr.modules.each_index do |y| -%>
    <% if qr.dark?(x,y) -%>
    <td class="black"/>
    <% else -%>
    <td class="white"/>
    <% end -%>
   <% end -%>
   </tr>
 <% end -%>
</table> 

我最接近的没有它打破.prawn.pdf file(当我尝试添加一个表格时它打破了)。并且只是测试是否有效*,当我尝试将其更改为单元格背景时它会中断。!modules method

@qr.modules.each_index do |x|
   @qr.modules.each_index do |y|
    if @qr.dark?(x,y)
      pdf.text "!"
    else
      pdf.text "*"
    end
   end
 end

宝石文件

gem 'prawn'

gem 'prawn-qrcode'

gem "rqrcode", "~> 0.4.2"

更新

我找到了一些有用的代码,尽管现在我遇到的问题是 QR 码的实际大小。我希望能够把二维码做得很大。令人惊讶的是,新代码中的参数实际上并没有改变大小。实际二维码中的size参数确实会稍微改变大小,但它实际上是在改变二维码的版本,这不是我想要的。

4

1 回答 1

1

我有一个几乎类似的问题。我必须生成一个条形码的 pdf 文档。条形码需要在 html 视图的网格中显示,当用户单击“另存为 pdf”时,视图的 pdf 文件将发送给用户。我解决了它

在控制器中,上课前

require 'rubygems'
require 'barby'
require 'barby/barcode/code_128'
require 'chunky_png'
require 'barby/outputter/png_outputter'
require 'aws/s3'

控制器方法

def generate_barcode
   ...
   @barcode_numbers = inspection.get_barcode_numbers
   ...
   @barcode_numbers.each do |d|
     barcode = Barby::Code128B.new(d)
     image_path = get_image_path + "code_#{params[:inspection_id]}_#{@spec.id}_#{d.sub('.', '0')}.png"
     File.open(image_path, 'w'){|f|
       f.write barcode.to_png(:height => 50, :margin => 3)
       Barcode.create(:filename => "code_#{params[:inspection_id]}_#{@spec.id}_#{d.sub('.', '0')}.png", :measurement => d)
     }
   end
   html = render_to_string(:action => "generate_barcode.html.haml", :layout => false)
   kit = PDFKit.new(html)
   send_data(kit.to_pdf, :filename => 'barcodes.pdf', :type => 'application/pdf', :disposition => 'inline')
   @all_barcodes.each do |d|
     File.delete("#{Rails.root}/tmp/#{d.filename}")
   end if Rails.env != "development"
   @all_barcodes.destroy_all
于 2012-10-07T04:36:43.510 回答