0

を使用して、PrintPreviewControlそのグラフィックス オブジェクトに直接描画します。通常、これは背景画像と他の描画で構成されます。

大きな背景画像を描画する必要がある場合を除いて、これは完全に機能しています。ここでいうラージとは、ビットマップに換算すると約250MBの画像を指します。

大きな画像が描画されると、画像を保存できるように手動でPrintDocumenta newを割り当てるまで、すべて正常に動作します (以下のコード)。PrintPreviewController

public Image MakeImage()
{
  PrintController oOriginalController = default(PrintController);
  PreviewPrintController oPreviewController = default(PreviewPrintController);
  Image oImage = default(Image);
  PreviewPageInfo[] oPageInfos = null;
  PreviewPageInfo oPageInfo = default(PreviewPageInfo);

  //Save the original controller
  oOriginalController = moPrintDocument.PrintController;

  //Create a preview controller
  oPreviewController = new PreviewPrintController();
  oPreviewController.UseAntiAlias = true;
  moPrintDocument.PrintController = new PrintControllerWithStatusDialog(oPreviewController);
  moPrintDocument.Print();

  //Get print pages
  oPageInfos = oPreviewController.GetPreviewPageInfo();
  if (oPageInfos.Length > 0)
  {
    //Get the page info
    oPageInfo = oPageInfos(0);

    //Set the image
    oImage = new Bitmap(Convert.ToInt32(oPageInfo.PhysicalSize.Width / 100 * 96), Convert.ToInt32(oPageInfo.PhysicalSize.Height / 100 * 96));

    //Create the graphics object
    using (Graphics oGraphics = Graphics.FromImage(oImage))
    {
      //Clear the image
      oGraphics.Clear(Color.White);

      //Draw the image
      oGraphics.DrawImage(oPageInfo.Image, 0, 0, oImage.Width, oImage.Height);
    }
  }
  else
  {
    //Set no image
    oImage = null;
  }

  //Restore the original controller
  moPrintDocument.PrintController = oOriginalController;

  //Return the pdf document
  return oImage;
}

作成された画像には大きな画像はありませんが、他のすべての図面は含まれています。

描画された最初の大きな画像のみが表示されるに戻るとPrintPreviewControl、他のすべての描画が存在します。

この動作は、アプリケーションを再起動することによってのみ元に戻すことができます。

4

0 に答える 0