none
Problema de impressão de conteúdo da tela Child Window RRS feed

  • Pergunta

  • Estou estudando a melhor forma de trabalhar com a geração de relatórios no Silverlight 4, e estou seguindo os passos abaixo:

    1 - Chamo uma Child Window com os dados que preciso para impressão, trabalhando com elementos como TextBlock e ListBox.

    2 - Quando eu clico no botão de imprimir eu faço a varredura de componente por componente, pegando os valores dos campos e inserindo na "página" para impressão, assim:

     

    // Adicionando um Título para o valor
              TextBlock conteudoTituloLinha = new TextBlock { Text = "Valor R$" };
              conteudoTituloLinha.FontSize = 15;
              conteudoTituloLinha.SetValue(Canvas.TopProperty, alturaAtual);
              conteudoTituloLinha.SetValue(Canvas.LeftProperty, margemPagina);
              conteudoTituloLinha.SetValue(Canvas.WidthProperty, tamanhoPagina);
    
              bloco.Children.Add(conteudoTituloLinha);
              bloco.Measure(new Size(pp.PrintableArea.Width, double.PositiveInfinity));
    
              <strong>if (alturaLinha > alturaDisponivel)
              {
                bloco.Children.Remove(conteudoTituloLinha);
                pp.HasMorePages = true;
              }</strong>
    
              adicionarLinha(1);
    
              //Pegando o valor
              TextBlock conteudoBloco = new TextBlock { Text = valor.Text };
              conteudoBloco.FontSize = 12;
              conteudoBloco.SetValue(Canvas.TopProperty, alturaAtual);
              conteudoBloco.SetValue(Canvas.LeftProperty, margemPagina);
              conteudoBloco.SetValue(Canvas.WidthProperty, tamanhoPagina);
    
              bloco.Children.Add(conteudoBloco);
              bloco.Measure(new Size(pp.PrintableArea.Width, double.PositiveInfinity));
    
              <strong>if (alturaLinha > alturaDisponivel)
              {
                bloco.Children.Remove(conteudoBloco);
                pp.HasMorePages = true;
              }
    </strong>
              adicionarLinha(2);
    

    Funciona muito bem, entretanto quando o conteúdo ultrapassa a altura disponível da página de impressão o processo trava e não gera o documento nem para de processar, como eu poderia verificar o tamanho disponível para acrescentar conteúdo à página ou continuar acrescentando conteúdo à página corrente.

    Eu utilizo este código acima para cada elemento na tela Child Window. Para disparar a rotina de impressão estou usando o comando documentoImpressao.PrintPage += (s, pp) =>
    {
    ...
    }

     

     


    Guilherme Carvalho
    quinta-feira, 7 de outubro de 2010 11:40