Mostrar todas as páginas de PrintDocument no PrintPreviewControl
-
18-09-2019 - |
Pergunta
Estou tendo problemas para criar várias páginas em uma PrintDocument e exibi-los dentro de um PrintPreviewControl. Eu posso criar uma única página com bastante facilidade, mas encadeamento de várias páginas é me iludindo.
Eu estou indo para, eventualmente, desenhar várias páginas de material usando GDI, mas não posso obter algo como isto a funcionar como esperado.
private PrintDocument doc = new PrintDocument();
private string[] printMe = new string[]{ "page1", "page2", "page3" );
private int pageCount = 0;
private void FormLoad(object sender, EventArgs e)
{
doc.PrintPage += new PrintPageEventHandler(PrintPage);
PrintPreviewControl.Document = doc;
}
private void doc_BeginPrint(object sender, PrintEventArgs e){ pageCount = 0; }
private void PrintPage(object sender, PrintPageEventArgs e)
{
Graphics g = e.Graphics;
g.DrawString(drawMe[pageCount++], "Lucida Console", Brushes.Black, new Point(20,20));
e.HasMorePages = (pageCount printMe.Length );
}
A idéia é que 3 páginas separadas são criadas, e exibido dentro do controle PrintPreview. O que eu estou ausente?
Solução
O trecho de código foi mutilado exatamente no ponto crítico, onde você atribui e.HasMorePages. Há um problema gritante em seu código: você precisa implementar um manipulador de eventos BeginPrint para repor a página contador de volta para 0
.Outras dicas
Eu não sei como mostrar todas as páginas por padrão, mas você pode mostrar mais de uma página no PrintPreviewControl
, definindo a propriedade Columns
, encontrada no Layout do propriedades janela, e / ou a propriedade Rows
, encontrada no Comportamento seção, para um valor maior que 1.