Altevir 0 Denunciar post Postado Outubro 13, 2010 Boa Tarde !!! Pessoal, preciso de uma ajuda..... ehehehhe Depois de varias pesquisas na internet consegui montar/gerar um relatorio com o PrintDocument. como faço pra controlar/repassar os valores programaticamente para o PrinDocument, fazendo com que esse acate os valores repassados atraves do PrintDialog, PageSettings ou PageSetupDialog, tentei alguns codigos mas nao tive sucesso. Se alguem puder ajudar, agradeço. abaixo meu codigo para gerar o relatorio. Dim pd As Printing.PrintDocument = New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.RelClientes AddHandler pd.BeginPrint, AddressOf Me.InicioImpressao AddHandler pd.EndPrint, AddressOf Me.FinalImpressao Try Dim objPrintPreview As PrintPreviewDialog = New PrintPreviewDialog() With objPrintPreview .Document = pd .WindowState = FormWindowState.Maximized .PrintPreviewControl.Zoom = 1 .Text = "Cadastro de Clientes" .ShowDialog() End With 'IMPRIMIR DIRETO NA IMPRESSORA EU APAGO TODO O CODIGO DESDE A INSTANCIA DO NOVO OBJETO(objPrintPreview) ATE O END WITH E COLOCO SOMENTE: 'pd.Print() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, "Informação") End Try Tudo funciona perfeitamente, mas gostaria de customizar o relatorio via codigo, como controlar intervalo de paginas a serem impressas, orientaçao da pagina, etc. Compartilhar este post Link para o post Compartilhar em outros sites
Lab Design 0 Denunciar post Postado Novembro 18, 2010 Caro Altevir Segue um exemplo porém em C#, não será dificil modificar para vb: Esse sistema eu montei para imprimir boletos, envelopes, etiquetas e recibos de pagamento para um cliente. Os dados são recuperados de um EDI (arquivo texto cujos campos possuem tamanho fixo assim como cada linha - como um arquivo de remessa bancária), a partir desse arquivo, um datatable é populado e a seguir utilizado como datasource de um datagridview. // setando a impressora // após o usuario selecionar impressora, papel e etc... esses valores são atribuídos ao MyPrintDocument que é uma instancia do PrintDocument private bool SetupPrinter() { PrintDialog MyPrintDialog = new PrintDialog(); MyPrintDialog.AllowCurrentPage = false; MyPrintDialog.AllowPrintToFile = false; MyPrintDialog.AllowSelection = false; MyPrintDialog.AllowSomePages = false; MyPrintDialog.PrintToFile = false; MyPrintDialog.ShowHelp = false; MyPrintDialog.ShowNetwork = false; if (MyPrintDialog.ShowDialog() != DialogResult.OK) return false; MyPrintDocument.PrinterSettings = MyPrintDialog.PrinterSettings; // atribui ao PrintDocument MyPrintDocument.DefaultPageSettings = MyPrintDialog.PrinterSettings.DefaultPageSettings; return true; } // chamando o setup e imprimindo private void Print_Envelopes() { if (!SetupPrinter()) return; MyPrintDocument.DefaultPageSettings.Margins = new Margins(30, 30, 30, 30); // Margins(int Left, int Right, int Top, int Bottom) MyPrintDocument.DefaultPageSettings.Landscape = true; // força impressão horizontal para envelope oficio 229 x 114 mm pb.Visible = true; // mostra progress bar na statusbar pb.Minimum = 0; pb.Maximum = (dgv.SelectedRows.Count); // maximo = total de linhas do datagridview pb.Value = 0; pb.Step = 1; pb.PerformStep(); foreach (DataGridViewRow dr in dgv.SelectedRows) { buffer.Clear(); // var global private ArrayList buffer = new ArrayList(); buffer.Add(dr.Cells["sacado"].Value.ToString().Trim()); buffer.Add("A/C CONTAS A PAGAR"); buffer.Add(dr.Cells["ender"].Value.ToString().Trim()); buffer.Add(dr.Cells["bairro"].Value.ToString().Trim()); buffer.Add(dr.Cells["cidade"].Value.ToString().Trim() + " - " + dr.Cells["cep"].Value.ToString().Trim()); buffer.Add(dr.Cells["cep"].Value.ToString().Trim()); this.MyPrintDocument.Print(); // envia para a impressora pb.Increment(1); // incrementa o progressbar Application.DoEvents(); } // terminou a impressão, zera o progressbar e esconde novamente pb.Value = 0; pb.Visible = false; } // módulo que imprime // O componente PrintDocument deve ter o evento PrintPage apontando para MyPrintDocument_PrintPage private void MyPrintDocument_PrintPage(object sender, PrintPageEventArgs e) { float yPos = e.MarginBounds.Top; float xPos = e.MarginBounds.Left; string linha = null; Font fonte; fonte = (_opcao == Opcao.envelopes) ? new Font("Arial", 9F) : new Font("Lucida Console", 8F); SolidBrush mCaneta = new SolidBrush(Color.Black); int x = 0; if (_opcao == Opcao.boletos) { PrintBoleto _printBoleto = new PrintBoleto(); _printBoleto.XPos = 30; _printBoleto.YPos = 30; _printBoleto.AddBoleto(_dadosBoleto, e); e.HasMorePages = false; } else if (_opcao == Opcao.relatorio) { bool more = MyDataGridViewPrinter.DrawDataGridView(e.Graphics); e.HasMorePages = (more) ? true : false; } else if (_opcao == Opcao.recibos) { printRecibo(sender, e); } else if(_opcao == Opcao.envelopes) { pb.Increment(1); Application.DoEvents(); yPos = 20; xPos = 50; e.Graphics.DrawImage(Image.FromFile(Application.StartupPath + "\\templates\\logo.jpg"), xPos, yPos); yPos = 240; xPos = 300; x = 0; while (x < buffer.Count && ((linha = buffer[x].ToString()) != null)) { yPos += fonte.GetHeight(e.Graphics); e.Graphics.DrawString(linha, fonte, mCaneta, xPos, yPos, new StringFormat()); x++; } yPos = 540; xPos = 50; Font fonteEmpresa = new Font("Lucida Console", 12F, FontStyle.Bold); e.Graphics.DrawString("Radiofone do Brasil Ltda.", fonteEmpresa, Brushes.Black, xPos, yPos, new StringFormat()); yPos += fonteEmpresa.GetHeight(e.Graphics); e.Graphics.DrawString("Avenida nonononononono, 9999 - nonononono - 99999-999 - São Paulo - SP - Fone: 9999-9999 - E-mail: nonononononono@nonononononono.com.br", fonte, Brushes.Black, xPos, yPos, new StringFormat()); e.HasMorePages = false; } else if(_opcao == Opcao.etiquetas) { x = 0; while (x < buffer.Count && ((linha = buffer[x].ToString()) != null)) { // calcula a posicao da proxima linha baseada na altura da fonte de acordo com o dispositivo de impressão yPos += fonte.GetHeight(e.Graphics); e.Graphics.DrawString(linha, fonte, mCaneta, xPos, yPos, new StringFormat()); x++; if (x % 7 == 0) { yPos += fonte.GetHeight(e.Graphics); e.Graphics.DrawString("\r\n", fonte, mCaneta, xPos, yPos, new StringFormat()); yPos += fonte.GetHeight(e.Graphics); e.Graphics.DrawString("\r\n", fonte, mCaneta, xPos, yPos, new StringFormat()); } } e.HasMorePages = false; } mCaneta.Dispose(); } é isso Compartilhar este post Link para o post Compartilhar em outros sites