为什么“打印预览”显示的格式正确的页面实际上不会打印?

时间:2009-08-31 21:46:14

标签: c# visual-studio-2008 print-preview

我正在编写一个使用Visual Studio 2008 / C#打印格式化数据的应用程序。我已经按照我希望它显示的方式格式化数据。我使用两个打印文档和事件处理程序,因为报告的第一页带有与第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 个答案:

答案 0 :(得分:1)

要打印文档,请使用:

PrintDocument.Print

预览时,将PrintDocument分配给PrintPreviewDialog

printPreview2.Document = ItemsPrintDocument;

当您显示PrintPreviewDialog时,它会将PrintDocument的PrintController替换为PreviewPrintController并调用PrintDocument.Print。

此操作会在每个页面上生成一个图像列表(图元文件)。

接下来,它恢复PrintDocument上的原始PrintController并显示图像。

当您在PrintPreviewDialog上按PrintButton时,它会使用原始PrintController调用PrintDocument.Print。

请注意,对于正确的行为,您可以使用BeginPrint的PrintDocument事件将vars初始化为新的PrintDocument.Print。

如果您使用PrintPreviewDialog,则不需要调用PrintDocument.Print。