2009-08-31 30 views
0

私は、Visual Studio 2008/C#を使用して書式設定されたデータを印刷するアプリケーションを作成しています。私はそれが表示されるようにデータをフォーマットしました。レポートの最初のページには2ページからNページとは異なるフォーマット要件があるため、2つの印刷ドキュメントとイベントハンドラを使用しています。印刷プレビューで実際に印刷されない書式設定されたページが正しく表示されるのはなぜですか?

印刷プレビューでは、印刷しようとするすべてのページの適切なフォーマットデータが表示されます。それにもかかわらず、ページ2〜Nは実際には印刷されません。

私のコードを踏んで、データがイベントハンドラに正しく渡されています。これは、2番目の印刷ドキュメントのイベントハンドラを呼び出すコードブロックです。私は間違って何をしていますか?

  // 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

、あなたが使用します。

PrintDocument.Print 

あなたはPrintPreviewDialogを表示するとプレビューは、あなたが

printPreview2.Document = ItemsPrintDocument; 

PrintPreviewDialog

へのPrintDocumentを割り当て、それはPreviewPrintControllerへのPrintDocument「PrintControllerを置き換え、コールPrintDocument.Print。

このアクションでは、各ページに1つずつイメージ(メタファイル)のリストが生成されます。

次に、元のPrintControllerをPrintDocument上に復元し、イメージを表示します。

PrintPreviewDialogでPrintButtonを押すと、元のPrintControllerでPrintDocument.Printを呼び出します。

正しい動作のために、BeginPrintのPrintDocumentイベントを使用して、varsを新しいPrintDocument.Printに初期化することができます。

PrintPreviewDialogを使用する場合は、PrintDocument.Printを呼び出す必要はありません。

関連する問題