2009-10-22 15 views
5

Necesito ayuda para enviar un texto formateado a una impresora usando Ruby en Ruby on Rails O enviando un archivo pdf a una impresora desde el programa Ruby. Puedo escribir el código para crear un archivo pdf desde la aplicación Rails pero no sé cómo imprimir ese archivo pdf en una impresora predeterminada. Intento escribir una pequeña aplicación de venta de entradas con Ruby on Rails.Imprimir un archivo en una impresora en Ruby

+0

Sería muy útil saber para qué es el sistema operativo. –

+0

Creo que @Shreyans quiere imprimirlo en el lado del cliente, no en el lado del servidor. Las respuestas de @wdebeaum y @ P.Bader son para el lado del servidor. – klew

Respuesta

6

En Linux y Mac OS X puede usar el programa de línea de comando "lpr", pasándole el nombre del archivo PDF (aunque no estoy seguro acerca de Windows). Por ejemplo:

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

Gracias (y). ¡¡Funcionó!! – Rohit

8

He aquí una solución en el entorno de Windows: ¡Foxit! http://www.foxitsoftware.com/pdf/reader/

Puede llamar a foxit.exe (ejecutable independiente) para imprimir de forma silenciosa un PDF en segundo plano.

Sintaxis: foxit.exe/t "de su file.pdf" "El Nombre de la impresora"

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

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

0

no estoy seguro de si hay una manera de imprimir algo en impresora predeterminada de la web. En mi banco, cuando quiero obtener la confirmación del pago, me dan el pdf y tengo que imprimirlo a mano. Creo que es una buena solución. Solo agrega algo de información al respecto.

0

Tengo una aplicación interna para crear etiquetas de computadora. Importo computadoras de un archivo que recibo de Dell o las ingreso manualmente, las exporto a un archivo CSV que puedo importar a MS SCCM. Puedo imprimir etiquetas para poner en las computadoras. Las etiquetas tienen el logotipo de una empresa, el nombre de la computadora, la dirección MAC y la información de contacto del servicio de atención al cliente.

Lo imprimo con gLabels. Usted diseña una etiqueta en gLabels, ingresa campos dinámicos y le da un CSV y escupe un PDF que luego uso lpr para imprimir en mi Dymo Labelwriter.

Lo puse en mi modelo de Computadoras porque no sabía dónde más ponerlo.

# 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 

Esto funciona en Fedora Linux para el servidor de impresora CUPS es y qué parte de la misma que se encarga de PDF no sé. Podría ser CUPS o el controlador de la impresora o el controlador de la impresora en sí.

Existen otros métodos para crear texto estructurado en PDF, pero para las etiquetas gLabels es genial.

Cuestiones relacionadas