【问题标题】:Printing a file to a printer in Ruby在 Ruby 中将文件打印到打印机
【发布时间】:2009-10-22 16:58:52
【问题描述】:

在使用 Ruby on Ruby on Rails 将格式化文本发送到打印机或从 Ruby 程序将 pdf 文件发送到打印机时,我需要帮助。我可以编写代码从 Rails 应用程序创建一个 pdf 文件,但不知道如何将该 pdf 文件打印到默认打印机。我正在尝试使用 Ruby on Rails 编写一个小型票务应用程序。

【问题讨论】:

  • 知道这是什么操作系统会很有帮助。
  • 我认为@Shreyans 想在客户端打印它,而不是在服务器端。 @wdebeaum 和 @P.Bader 的答案适用于服务器端。

标签: ruby-on-rails pdf printing


【解决方案1】:

在 Linux 和 Mac OS X 上,您可以使用“lpr”命令行程序,将 PDF 文件的名称传递给它(虽然不确定 Windows)。例如:

def print_to_paper
  your_code_to_write_a_pdf_file("file.pdf")
  system("lpr", "file.pdf") or raise "lpr failed"
end

【讨论】:

    【解决方案2】:

    这是 Windows 环境中的一个解决方案:Foxit! http://www.foxitsoftware.com/pdf/reader/

    您可以调用 foxit.exe(独立可执行文件)在后台静默打印 PDF。

    语法:foxit.exe /t "your file.pdf" "The Printer Name"

    shell = WIN32OLE.new('Shell.Application')

    shell.ShellExecute("foxit.exe","/t \"#{filename}\" \"#{printer}\"")

    【讨论】:

      【解决方案3】:

      我不确定是否可以通过网络在默认打印机上打印某些内容。在我的银行中,当我想获得付款确认时,他们会给我 pdf,我必须手动打印。我认为这是一个很好的解决方案。只需添加一些有关它的信息。

      【讨论】:

        【解决方案4】:

        我有一个用于创建计算机标签的内部应用程序。我从戴尔获得的文件中导入计算机或手动输入计算机,然后将它们导出为 CSV,然后我可以将其导入 MS SCCM。我可以打印标签放在电脑上。标签上有公司徽标、计算机名称、MAC 地址和服务台联系信息。

        我用 gLabels 打印它。您在 gLabels 中设计一个标签,输入动态字段并向其提供 CSV,然后它会输出一个 PDF,然后我使用 lpr 将其打印到我的 Dymo Labelwriter。

        我把它放在我的计算机模型中,因为我不知道该放在哪里。

        # Print all computers with printed = false
        def self.print
          printed_labels = 0 
          csv_file = Tempfile.new(["computers", ".csv"])
          logger.debug("Writing #{csv_file.path}")
          begin
            Computer.transaction do
              Computer.unprinted.each do |computer|
                csv_file.puts "\"#{computer.mac(' ')}\",\"#{computer.hostname}\""
                computer.printed = true
                computer.save
                printed_labels += 1
              end
            end 
          ensure
            csv_file.close
            if csv_file.length > 0 
              pdf_file = Tempfile.new(["computers", ".pdf"])
              begin
                pdf_file.close
                system '/usr/bin/glabels-batch', "--input=#{csv_file.path}", "--output=#{pdf_file.path}", AssetBase::Application.config.computer_label
                system '/usr/bin/lpr', '-P', 'LabelWriter-450', pdf_file.path
              ensure
                pdf_file.unlink
              end
            end
            csv_file.unlink
          end   
          printed_labels
        end
        

        这在 Fedora Linux 上运行,因此打印机后端是 CUPS,我不知道它的哪一部分处理 PDF。它可能是 CUPS 或打印机驱动程序或打印机驱动程序本身。

        还有其他方法可以将结构化文本创建为 PDF,但对于标签,gLabels 非常棒。

        【讨论】:

          猜你喜欢
          • 2012-11-01
          • 2014-05-27
          • 2014-07-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多