PRINTDOCUMENT VISUALIZAR E SOLICITAR IMPRESSORA

 Tópico anterior Próximo tópico Novo tópico

PRINTDOCUMENT VISUALIZAR E SOLICITAR IMPRESSORA

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#471303 - 03/02/2017 09:46:08

HELIO COSTA
BELO HORIZONTE
Cadast. em:Fevereiro/2005


Bom dia,

Preciso de visualizar o que irei imprimir e ao clicar no botão da impressora deixar escolher qual impressora vou imprimir sem imprimir na impressora padrão.

    Private Sub btnImprimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImprimir.Click
    Dim pd As Printing.PrintDocument = New Printing.PrintDocument()
        AddHandler pd.PrintPage, New Printing.PrintPageEventHandler(AddressOf Me.PrintDocument1_PrintPage)
        Dim objPrintPreview As New PrintPreviewDialog
        Try
            With objPrintPreview  'define o formulário como maximizado e com Zoom
                .Document = pd
                .WindowState = FormWindowState.Maximized
                .PrintPreviewControl.Zoom = 1
                pd.DefaultPageSettings.Landscape = False
                .Text = "Relacao de Clientes"
                .ShowDialog()
            End With
        Catch ex As Exception
            MessageBox.Show(ex.ToString())
        End Try
end sub

Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
....
end sub



Helio

#471309 - 03/02/2017 11:42:39

KURTGU
SAO PAULO
Cadast. em:Dezembro/2010


LINK vbcity.com/forums/t/68137.aspx
Code:

Imports System.Drawing.Printing


Next, to get a list of available printers:

Code:

'cboPrinter is a combobox
        Dim printers As New Printing.PrintDocument()
        Dim printername = printers.PrinterSettings.PrinterName
        For Each printername In printers.PrinterSettings.InstalledPrinters
            cboPrinter.Items.Add(printername)
            cboPrinter.SelectedItem = pdTest.DefaultPageSettings.PrinterSettings.PrinterName
        Next


Now, two solutions to change the printer:
1. This just changes the printer for the document you want to print:

Code:

    Private Sub pdCrRpt_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pdCrRpt.PrintPage
'code for setting up print document
    End Sub

'in another sub:
            Dim ppdPreview As New PrintPreviewDialog()
            ppdPreview.Document = pdCrRpt

            ppdPreview.Document.PrinterSettings.PrinterName = strPrinterName
'where strPrinterName contains the name of the printer you want
'this is the only change I made to my existing code to make my idea work

            ppdPreview.ShowDialog()


2. This actually changes your windows default printer:
    (I got this to work, but used the first solution as it is simpler)

Code:

    Private Sub SetDefaultPrinter(ByVal PrinterName As String, _
    ByVal DriverName As String, ByVal PrinterPort As String)
        Dim DeviceLine As String

        'rebuild a valid device line string
        DeviceLine = PrinterName & "," & DriverName & "," & PrinterPort

        'Store the new printer information in the
        '[WINDOWS] section of the WIN.INI file for
        'the DEVICE= item
        Call WriteProfileString("windows", "Device", DeviceLine)

        'Cause all applications to reload the INI file
        Call SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, "windows")

    End Sub
    Private Declare Function WriteProfileString Lib "kernel32" Alias     "WriteProfileStringA" _
        (ByVal lpszSection As String, ByVal lpszKeyName As String, _
        ByVal lpszString As String) As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
         (ByVal hwnd As Long, ByVal wMsg As Long, _
         ByVal wParam As Long, ByVal lparam As String) As Long
    Private Const HWND_BROADCAST As Long = &HFFFF&
    Private Const WM_WININICHANGE As Long = &H1A

'in a sub:
    SetDefaultPrinter(strPrinterName, "", "")
'where strPrinterName contains the name of the printer you want



#471313 - 03/02/2017 12:52:15

HELIO COSTA
BELO HORIZONTE
Cadast. em:Fevereiro/2005


KURTGU, obrigado pelo post.

O porem que não abriu o layout do documento.
Se selecionar a impressora antes de visualizar está fazendo. O certo é definir a impressora depois de visualizar o documento a ser impresso.

Ou algo que fiz de errado?


Helio

Resposta escolhida #471608 - 13/02/2017 08:44:44

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


Bom dia HELIO COSTA,
tive este mesmo problema para escolher impressoras, achei isso, que não é de minha autoria, e vou compartilhar:
crie essa Sub:
   Private Sub MeuClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs)
        If e.ClickedItem.Text = "Imprimir" Then
            Dim PrintD As New PrintDialog
            PrintD.Document = pd
            If PrintD.ShowDialog() = Windows.Forms.DialogResult.OK Then
                For i As Integer = 1 To PrintD.PrinterSettings.Copies
                    'objPrintPreview.Document.Print()
                    PrintD.Document.Print()
                Next
            End If
        End If
    End Sub


então na rotina de impressão:

  If Not (pd Is Nothing) Then
                pd.Dispose()
            End If
            pd = New Printing.PrintDocument()
            AddHandler pd.PrintPage, New Printing.PrintPageEventHandler(AddressOf Me.FuncaoImprime_PrintPage)
            AddHandler pd.BeginPrint, New Printing.PrintEventHandler(AddressOf Me.Begin_Print)
            pd.DefaultPageSettings.Landscape = True
            ' No caso do DataTable, não temos objetos vinculados a conexão nem
            ' nada a se fazer ao término da impressão, sendo assim não precisaremos
            ' usar o evento EndPrint do PrintDocument

            Dim printer As PrintDialog = New PrintDialog()
            objPrintPreview = New PrintPreviewDialog()
            Dim Controle As ToolStrip = objPrintPreview.Controls(1)
            Dim Botao As New ToolStripButton("Imprimir")
            With objPrintPreview
                .Document = pd
                .WindowState = FormWindowState.Maximized
                .PrintPreviewControl.Zoom = 1
                .Text = "Relatório"
                Botao.Image = Controle.Items(0).Image
                Controle.Items.Insert(1, Botao)
                Controle.Items(0).Visible = False
                AddHandler Controle.ItemClicked, AddressOf MeuClick
                .ShowDialog()
            End With


espero q te ajude

O conhecimento é como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#471695 - 16/02/2017 11:11:16

HELIO COSTA
BELO HORIZONTE
Cadast. em:Fevereiro/2005


Bom dia Damasceno,

Muito obrigado pelo apoio.

Desculpe a ignorância, mas quais as variáveis colocar na Sub?
MeuClick(.....,  .......,  ......)

Neste linha está com erro no Me.Begin_printer, como corrigir?
AddHandler pd.BeginPrint, New Printing.PrintEventHandler(AddressOf Me.Begin_Print)

Desde já agradeço.

Helio

#471697 - 16/02/2017 11:50:16

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


Citação:
  Desculpe a ignorância, mas quais as variáveis colocar na Sub?
MeuClick(.....,  .......,  ......)


  PrintD.Document = pd  essa variável é onde está o documento gerado


pd = New Printing.PrintDocument() 'tem que declarar no form, fora da sub, pra poder manter o relatorio
            AddHandler pd.PrintPage, New Printing.PrintPageEventHandler(AddressOf Me.pdProvisorio_PrintPage)


Citação:
  Neste linha está com erro no Me.Begin_printer, como corrigir?
AddHandler pd.BeginPrint, New Printing.PrintEventHandler(AddressOf Me.Begin_Print)



  Private Sub MeuClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs)
        If e.ClickedItem.Text = "Imprimir" Then

            Dim PrintD As New PrintDialog
            PrintD.Document = pd
            If PrintD.ShowDialog() = Windows.Forms.DialogResult.OK Then
                For i As Integer = 1 To PrintD.PrinterSettings.Copies

                    'objPrintPreview.Document.Print()
                    PrintD.Document.Print()
                Next
            End If
        End If
    End Sub


O conhecimento é como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#471701 - 16/02/2017 12:43:55

HELIO COSTA
BELO HORIZONTE
Cadast. em:Fevereiro/2005


Foi mal.

Estava com a cabeça longe.

Funcionou em partes.

Agora visualizo a impressão e se clicar no botão da impressora escolho a impressora.

Mas, não aprece mais o botão para salvar em PDF, Excell e Word.
Sabe como manter este botão?


Helio

#471704 - 16/02/2017 13:24:22

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


este tipo de relatório (feito na unha) não tem essas opções, vc precisa utilizar o report viewer para ter essas opções e, nunca vi ninguem utilizando o report viewer com este tipo de relatório, portanto acho q não rola.

O conhecimento é como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#471705 - 16/02/2017 13:41:16

HELIO COSTA
BELO HORIZONTE
Cadast. em:Fevereiro/2005


Correto.


Helio

 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por HELIO COSTA em 16/02/2017 13:41:27