2009-10-22 7 views
5

Potrzebuję pomocy w wysyłaniu sformatowanego tekstu do drukarki przy użyciu Ruby w Ruby na szynach LUB wysyłania pliku PDF do drukarki z programu Ruby. Mogę napisać kod, aby utworzyć plik pdf z aplikacji Rails, ale nie wiem, jak wydrukować ten plik PDF na domyślną drukarkę. Próbuję napisać małą aplikację biletową z Ruby on Rails.Drukowanie pliku na drukarce w języku Ruby

+0

Byłoby bardzo pomocne wiedzieć, dla jakiego systemu operacyjnego to jest. –

+0

Myślę, że @Shreyans chcą wydrukować go po stronie klienta, a nie po stronie serwera. Odpowiedzi @wdebeaum i @ P.Bader są po stronie serwera. – klew

Odpowiedz

6

W systemach Linux i Mac OS X można użyć programu wiersza poleceń "lpr", przekazując mu nazwę pliku PDF (nie jest jednak pewne co do systemu Windows). Na przykład:

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

Dzięki (y). Zadziałało!! – Rohit

8

Oto rozwiązanie w środowisku Windows: Foxit! http://www.foxitsoftware.com/pdf/reader/

Możesz wywołać program foxit.exe (samodzielny plik wykonywalny), aby w trybie cichym wydrukować plik PDF w tle.

Składnia: foxit.exe/t "Twój file.pdf" "Nazwa drukarki"

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

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

0

Nie jestem pewien, czy istnieje sposób, aby wydrukować coś na domyślna drukarka z sieci. W moim banku, gdy chcę uzyskać potwierdzenie płatności, dostaję pdf i muszę go wydrukować ręcznie. Myślę, że to dobre rozwiązanie. Po prostu dodaj trochę informacji na ten temat.

0

Mam wewnętrzną aplikację do tworzenia etykiet komputerowych. Importuję komputery z pliku otrzymanego od firmy Dell lub wprowadzam je ręcznie, eksportuję je do pliku CSV, który mogę zaimportować do MS SCCM. Mogę drukować etykiety do umieszczenia na komputerach. Etykiety mają logo firmy, nazwę komputera, adres MAC i dane kontaktowe servicedesk.

Drukuję go za pomocą gLabels. Projektujesz etykietę w gLabels, wpisujesz dynamiczne pola i dodajesz do niej plik CSV, a następnie wypisuje plik PDF, który następnie wykorzystuję do drukowania Lpr do mojego Dymo Labelwritera.

Umieściłem to w moim modelu Komputery, ponieważ nie wiedziałem, gdzie jeszcze go umieścić.

# 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 

Ten działa na Fedorze Linux, więc backend drukarki to CUPS i jego część, która obsługuje PDF, którego nie znam. Może to być CUPS lub sterownik drukarki lub sam sterownik drukarki.

Istnieją inne metody tworzenia tekstu strukturalnego do formatu PDF, ale dla etykiet gLabels jest świetny.