Печать файла на принтер в Ruby - PullRequest
5 голосов
/ 22 октября 2009

Мне нужна помощь с отправкой форматированного текста на принтер с использованием Ruby on Ruby on Rails ИЛИ отправкой файла pdf на принтер из программы Ruby. Я могу написать код для создания PDF-файла из приложения Rails, но не знаю, как распечатать этот PDF-файл на принтере по умолчанию. Я пытаюсь написать небольшое приложение для продажи билетов на Ruby on Rails.

Ответы [ 4 ]

8 голосов
/ 12 апреля 2010

Вот решение в среде Windows: Foxit! http://www.foxitsoftware.com/pdf/reader/

Вы можете вызвать foxit.exe (автономный исполняемый файл) для автоматической печати PDF в фоновом режиме.

Синтаксис: foxit.exe / t "your file.pdf" "Имя принтера"

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

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

7 голосов
/ 22 октября 2009

В 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
1 голос
/ 12 апреля 2010

Я не уверен, есть ли способ напечатать что-нибудь на принтере по умолчанию из Интернета. В моем банке, когда я хочу получить подтверждение оплаты, мне выдают PDF, и я должен распечатать его вручную. Я думаю, что это хорошее решение. Просто добавьте информацию об этом.

0 голосов
/ 16 июня 2013

У меня есть внутреннее приложение для создания компьютерных ярлыков. Я импортирую компьютеры из файла, полученного от Dell, или ввожу их вручную, я экспортирую их в файл 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...