Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Altevir

Usando PrintDocument no Visual Studio 2010

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.