Почему в окне предварительного просмотра отображаются правильно отформатированные страницы, которые на самом деле не печатаются? - PullRequest
0 голосов
/ 01 сентября 2009

Я пишу приложение для печати отформатированных данных с использованием Visual Studio 2008 / C #. Я отформатировал данные так, как я хочу, чтобы они отображались. Я использую два Print Documents и обработчики событий, потому что первая страница отчета содержит требования к форматированию, которые отличаются от страниц 2 до N.

Предварительный просмотр показывает мне правильно отформатированные данные для всех страниц, которые я пытаюсь распечатать. Тем не менее, страницы с 2 по N на самом деле не будут печататься.

Я прошел через мой код, и данные правильно передаются в обработчик событий. Это блок кода, который вызывает обработчик события второго печатного документа. Что я делаю не так?

         // First page print limit has been reached. Do we
        //  still have unprinted items in the arraylist? Call the second 
        //  print handler event and print those items.
        if (((alItemsToPrint.Count) - iItemPrintedCount) > 0)
        {
            // Getting a look at my formating
            PrintPreviewDialog printPreview2 = new PrintPreviewDialog();
            printPreview2.Document = ItemsPrintDocument;
            printPreview2.ShowDialog();
            printPreview2.Dispose();                               

            // Print item overflow pages
            ItemsPrintDocument.Print();

            // Release the resources consumed by this print document
            ItemsPrintDocument.Dispose();
        } 

Спасибо за ваше время, все.

1 Ответ

1 голос
/ 29 июня 2010

Для печати документа вы используете:

PrintDocument.Print

При предварительном просмотре Вы присваиваете PrintDocument для PrintPreviewDialog

printPreview2.Document = ItemsPrintDocument;

Когда вы показываете PrintPreviewDialog, он заменяет PrintDocument PrintController на PreviewPrintController и вызывает PrintDocument.Print.

Это действие создает список изображений (метафайлов) по одному на каждой странице.

Затем он восстанавливает оригинальный PrintController в PrintDocument и показывает изображения.

Когда вы нажимаете кнопку PrintButton на PrintPreviewDialog, он вызывает PrintDocument.Print с оригинальным PrintController.

Обратите внимание, что для правильного поведения вы можете использовать событие PrintDocument BeginPrint, чтобы инициализировать переменные для нового PrintDocument.Print.

Если вы используете PrintPreviewDialog, вам не нужно вызывать PrintDocument.Print.

...