IMPRESS?O EM C# - N?O IMPRIME MAIS P?GINAS
Eu não estou conseguindo imprimir mais páginas. Estou fazendo a impressão via código. Já tentei vários exemplos mas nenhum funciona.
Agora o código para colocar no botão
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;
using GPrint.controller;
using System.Data.Common;
using System.Drawing;
namespace GPrint.model
{
class Impressao
{
//[ô]define os objetos printdocument e os eventos associados
PrintDocument pd = new PrintDocument();
int paginaAtual = 1;
//define o objeto para visualizar a impressao
private PrintPreviewDialog objPrintPreview = new PrintPreviewDialog();
//private DbDataReader Leitor;
//private DB banco;
public ListView lista;
public void imprimir()
{
pd.PrintPage += new PrintPageEventHandler(this.Pd_PrintPage);
pd.DefaultPageSettings.Landscape = true;
objPrintPreview.Document = this.pd;
objPrintPreview.WindowState = FormWindowState.Maximized;
objPrintPreview.PrintPreviewControl.Zoom = 1;
objPrintPreview.Text = [Ô]Impressões por dia[Ô];
objPrintPreview.ShowDialog();
}
private void Pd_PrintPage(object sender, PrintPageEventArgs e)
{
//Variaveis das linhas
Single LinhasPorPagina = 0;
Single PosicaoDaLinha = 0;
int LinhaAtual = 0;
//TÃtulo
string titulo = [Ô]Impressões por dia[Ô];
//Variáveis das margens
Single MargemEsquerda = e.MarginBounds.Left;
Single MargemSuperior = e.MarginBounds.Top + 40;
Single MargemDireita = e.MarginBounds.Right;
Single MargemInferior = e.MarginBounds.Bottom;
//classe Pen define um objeto usado para definir linhas e curvas
Pen CanetaDaImpressora = new Pen(Color.Black, 1);
//int MargemCentro = (e.MarginBounds.Width - titulo.Length / 2);
//MessageBox.Show([Ô][Ô] + MargemCentro);
//VARIÃVEIS PARA OS CAMPOS QUE APARECERÃO NA TELA
//DateTime Data1;
//string Nomes;
string impressora;
string nomeDoc;
//string status;
string qtdPaginas;
string proprietario;
string tamanhoKB;
string enviado;
string tamanhoPapel;
//Variaveis das fontes
Font FonteNegrito;
Font FonteTitulo;
Font FonteSubTitulo;
Font FonteRodape;
Font FonteNormal;
Font FonteGrande;
//define efeitos em fontes
FonteNegrito = new Font([Ô]Arial[Ô], 10, FontStyle.Bold);
FonteTitulo = new Font([Ô]Arial[Ô], 20, FontStyle.Bold);
FonteSubTitulo = new Font([Ô]Arial[Ô], 12, FontStyle.Bold);
FonteRodape = new Font([Ô]Arial[Ô], 8);
FonteNormal = new Font([Ô]Arial[Ô], 8);
FonteGrande = new Font([Ô]Arial[Ô], 14);
//define valores para linha atual e para linha da impressao
LinhaAtual = 0;
//int L = 0;
//Linhas do Cabeçalho
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda - 80, 40, MargemDireita + 80, 40);
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda - 80, 90, MargemDireita + 80, 90);
//nome do tÃtulo
//MargemEsquerda + 0
e.Graphics.DrawString(titulo, FonteTitulo, Brushes.Black, MargemEsquerda, 50, new StringFormat());
//e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda - 80, 90, MargemDireita + 80, 90);
LinhasPorPagina = Convert.ToInt32(e.MarginBounds.Height / FonteGrande.GetHeight(e.Graphics) - 10);
//Aqui são lidos os dados
//string impressora;string nomeDoc;string status;string qtdPaginas;string proprietario;
//string tamanhoKB;string enviado;string tamanhoPapel;
e.Graphics.DrawString([Ô]Impressora[Ô], FonteNegrito, Brushes.Black, MargemEsquerda - 80, 100, new StringFormat());
e.Graphics.DrawString([Ô]Nome do documento[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 190, 100, new StringFormat());
//e.Graphics.DrawString([Ô]Status[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 350, 100, new StringFormat());
e.Graphics.DrawString([Ô]QTD Pag.[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 450, 100, new StringFormat());
e.Graphics.DrawString([Ô]Proprietário[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 520, 100, new StringFormat());
e.Graphics.DrawString([Ô]Tamanho(KB)[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 650, 100, new StringFormat());
e.Graphics.DrawString([Ô]Enviado[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 750, 100, new StringFormat());
e.Graphics.DrawString([Ô]Tam. Papel[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 870, 100, new StringFormat());
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda - 80, 120, MargemDireita + 80, 120);
//while (LinhaAtual < LinhasPorPagina && Leitor.Read())
int i = 0;
//LinhasPorPagina = 25;
//LinhasPorPagina = 28;&& i < lista.Items.Count
//paginaAtual = 1;
//LinhaAtual < LinhasPorPagina &&
while (i < lista.Items.Count)
{
//string impressora;string nomeDoc;string status;string qtdPaginas;string proprietario;
//string tamanhoKB;string enviado;string tamanhoPapel;
impressora = lista.Items[i].SubItems[0].Text;
nomeDoc = lista.Items[i].SubItems[1].Text;
//status = lista.Items[i].SubItems[2].Text;
qtdPaginas = lista.Items[i].SubItems[3].Text;
proprietario = lista.Items[i].SubItems[4].Text;
tamanhoKB = lista.Items[i].SubItems[5].Text;
enviado = lista.Items[i].SubItems[6].Text;
tamanhoPapel = lista.Items[i].SubItems[7].Text;
PosicaoDaLinha = MargemSuperior + Convert.ToInt32(LinhaAtual * FonteGrande.GetHeight(e.Graphics));
e.Graphics.DrawString(impressora, FonteNormal, Brushes.Black, MargemEsquerda - 80, PosicaoDaLinha, new StringFormat());
e.Graphics.DrawString(nomeDoc, FonteNormal, Brushes.Black, MargemEsquerda + 190, PosicaoDaLinha, new StringFormat());
//e.Graphics.DrawString(status, FonteNormal, Brushes.Black, MargemEsquerda + 350, PosicaoDaLinha, new StringFormat());
e.Graphics.DrawString(qtdPaginas, FonteNormal, Brushes.Black, MargemEsquerda + 490, PosicaoDaLinha, new StringFormat());
e.Graphics.DrawString(proprietario, FonteNormal, Brushes.Black, MargemEsquerda + 520, PosicaoDaLinha, new StringFormat());
e.Graphics.DrawString(tamanhoKB, FonteNormal, Brushes.Black, MargemEsquerda + 670, PosicaoDaLinha, new StringFormat());
e.Graphics.DrawString(enviado, FonteNormal, Brushes.Black, MargemEsquerda + 750, PosicaoDaLinha, new StringFormat());
e.Graphics.DrawString(tamanhoPapel, FonteNormal, Brushes.Black, MargemEsquerda + 870, PosicaoDaLinha, new StringFormat());
LinhaAtual += 1;
i++;
}
//Rodape
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda - 80, MargemInferior + 50, MargemDireita + 80, MargemInferior + 50);
e.Graphics.DrawString(System.DateTime.Now.ToString(), FonteRodape, Brushes.Black, MargemEsquerda, MargemInferior + 60, new StringFormat());
LinhaAtual += Convert.ToInt32(FonteGrande.GetHeight(e.Graphics));
LinhaAtual += 1;
e.Graphics.DrawString([Ô]Página : [Ô] + paginaAtual, FonteRodape, Brushes.Black, MargemDireita - 50, MargemInferior + 60, new StringFormat());
//Incrementa o número da pagina
paginaAtual += 1;
if (LinhaAtual > LinhasPorPagina)
{
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
}
}
}
}
Agora o código para colocar no botão
Impressao impressao = new Impressao();
impressao.lista = this.listViewDados;
impressao.imprimir();
Agora eu consegui resolver. Eu declarei a variável i como pública. Ela conta a posição do registro e mesmo se tiver mais páginas imprime de onde parou e também eu estava fazendo a lógica errada.
Eu troquei no loop while o código
e também troquei
por
Sendo que declarei a variável int i como pública e assim imprime de onde parei.
Eu troquei no loop while o código
while (i < lista.Items.Count)
por
while (i < lista.Items.Count && LinhaAtual < LinhasPorPagina)
e também troquei
if (LinhaAtual > LinhasPorPagina)
{
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
}
por
if (i + 1 > LinhasPorPagina && i < LinhaAtual)
{
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
}
Sendo que declarei a variável int i como pública e assim imprime de onde parei.
MARCOSARANTESJ,
Que bom que você conseguiu, testei aqui e as páginas não giram mais ao infinito como ontem.
Parabéns aê!
[][ô]s,
Tunusat.
Que bom que você conseguiu, testei aqui e as páginas não giram mais ao infinito como ontem.
Parabéns aê!
[][ô]s,
Tunusat.
Faça seu login para responder