none
Printervb 2010 RRS feed

  • Pregunta

  • Saludos. Antes que todo pido disculpas por el titulo de mi pregunta, ya que tuve que formularla así porque la página no me deja asignar la consulta.

    Bueno mi dilema es el siguiente: Estoy realizando un programa de Vb 2010 en el cual deseo imprimir un Crystal Report directamente en la impresora sin que aparezca la pantalla de impresora, por consiguiente necesito que esta imprima en la impresora predeterminada, por ello necesito la ruta y esta solo escoge la primera impresora que tiene en su lista (OneNote). Les dejo parte del código y me gustaría que me ayudaran a resolver este pequeño detalle.

    'Supuestamente este era el código que me daba la ubicación de la impresora

    Dim instance As New Printing.PrinterSettings
    Dim impresosaPredt As String = instance.PrintFileName

    'Aqui le intento imprimir directamente mi reporte

    'Imprime es el Crystal RE.... document

     Imprime.PrintOptions.PrinterName = impresosaPredt
     Imprime.PrintToPrinter(1, False, 0, 0)

    'Pero como ya les dije imprime directamente en OneNote y no en la impresora predeterminada

    Según tengo entendido en la línea: Imprime.PrintOptions.PrinterName = "aqui debe tener una ruta c:\Hp3030"

    Gracias

    martes, 11 de noviembre de 2014 1:58

Todas las respuestas

  • Si lo que quieres es imprimir por la impresora predeterminada solo tienes que quitar la linea

    Imprime.PrintOptions.PrinterName = impresosaPredt


    Saludos, Javier J

    martes, 11 de noviembre de 2014 7:44
  • Gracias por tu respuesta.

    Ya lo hice y sigue imprimiendo en la primera de la lista (OneNote) la cual no la tengo como predeterminada. ya realicé una prueba colocando el nombre de la impresora predeterminada directamente (Imprime.PrintOptions.PrinterName = "PDFCreator")  se sale del programa directamente y no imprime. Le coloqué un "Try" para que me arrojara un error y así visualizarlo, pero solo cierra el programa y no imprime.

    martes, 11 de noviembre de 2014 14:43
  • Comprueba que tienes el último service pack de Crystal Report. Si es así prueba a hacerlo de esta forma:

    Dim printersettings As new System.Drawing.Printing.PrinterSettings()

    printersettings.PrinterName = PrinterToUse
    printersettings.Copies = 1
    printersettings.Collate = false

    Imprime.PrintToPrinter(printersettings, new System.Drawing.Printing.PageSettings(), false)


    Saludos, Javier J

    miércoles, 12 de noviembre de 2014 8:02
  • Gracias por tu respuestas. Ya resolví el problema practicando "Ensayo-Error", y logré hacer que imprimiera directamente en la impresora predeterminada. A continuación coloco las líneas de código y las explico: 

    'Primero importo para que algunas líneas puedan funcionar, lo mas seguro sobran unas

    Imports CrystalDecisions.CrystalReports.Engine
    Imports CrystalDecisions.Shared
    Imports CrystalDecisions.ReportSource
    Imports CrystalDecisions.CrystalReports.Engine.ReportObjects
    Imports System
    Imports System.Drawing.Printing
    Imports System.Text

    'Este código lo coloque en el evento Load del formulario

     Dim Impresoras As String
            ' Default printer      
            Dim s_Default_Printer As String = pd.PrinterSettings.PrinterName

            ' recorre las impresoras instaladas  
            For Each Impresoras In PrinterSettings.InstalledPrinters
                ListBox1.Items.Add(Impresoras.ToString)
            Next
            ' selecciona la impresora predeterminada  
            ListBox1.Text = s_Default_Printer
            Tx_Printer.Text = ListBox1.Text

    'coloco el nombre de la impresora predeterminada en un textbox (Tx_Printer)

    'El código está en un botón porque necesitaba probarlo               

     Private

    Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

          'cargo el reporte Cr_FacturaT
            Me.Cr_FacturaT.ReportSource = "D:\visualBasic\2010\CajaSoftware2010\CajaSoftware2010\CajaSoftware2010\FacturaTicket.rpt"

            ''Todo esto es para darle valor a los datos que van al reporte pero que no están en la Base de datos.
            Dim I_v_A As New ParameterDiscreteValue
            Dim M_Impo As New ParameterDiscreteValue
            Dim M_Total As New ParameterDiscreteValue
            Dim Fact_Num As New ParameterDiscreteValue
            Dim Temp As ParameterField
            Dim Tabla As New ParameterFields

            Fact_Num.Value = "0000001".ToString
            I_v_A.Value = "12,05".ToString
            M_Impo.Value = "125,50".ToString
            M_Total.Value = "365,75".ToString


            'asignamos los valores
            Temp = New ParameterField
            Temp.CurrentValues.Add(Fact_Num)
            Temp.ParameterFieldName = "@Num_Factura"
            Tabla.Add(Temp)

            Temp = New ParameterField
            Temp.CurrentValues.Add(I_v_A)
            Temp.ParameterFieldName = "@IVA"
            Tabla.Add(Temp)

            Temp = New ParameterField
            Temp.CurrentValues.Add(M_Impo)
            Temp.ParameterFieldName = "@Sub_Total"
            Tabla.Add(Temp)

            Temp = New ParameterField
            Temp.CurrentValues.Add(M_Total)
            Temp.ParameterFieldName = "@Total"
            Tabla.Add(Temp)

            Me.Cr_FacturaT.ParameterFieldInfo = Tabla

           'Esta linea es para el crystal document
            Dim ReporteImp As String = "D:\visualBasic\2010\CajaSoftware2010\CajaSoftware2010\CajaSoftware2010\FacturaTicket.rpt"

            Me.facturaTicket1.Load(ReporteImp)

    'Increiblemente debo colocar esto para que no se cierre el programa, sino lo coloco el programa al 

            Dim Imprime As New FacturaTicket
            Imprime.Refresh()      

            facturaTicket1.SetParameterValue("@Num_Factura", "00000001")
            facturaTicket1.SetParameterValue("@IVA", "200,00")
            facturaTicket1.SetParameterValue("@Sub_Total", "300,00")
            facturaTicket1.SetParameterValue("@Total", "400,00")

            'ubicar impresora

            Try
                MsgBox(Tx_Printer.Text)         
                facturaTicket1.PrintOptions.PrinterName = Tx_Printer.Text          
                facturaTicket1.PrintToPrinter(1, False, 0, 0)
                facturaTicket1.Dispose()
                facturaTicket1.Close() 'se debe cerrar sino genera un error
                Me.Close()           
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub

    Si estoy haciendo algo mal me gustaría saber cual línea estoy errado. 

    Gracias

    viernes, 14 de noviembre de 2014 18:56