PrintPreviewController具有大图像

时间:2013-04-03 08:52:30

标签: .net gdi+ print-preview

我们使用PrintPreviewControl并直接绘制到它的图形对象。通常这包括背景图像和顶部的其他图纸。

除非我们必须绘制大型背景图像,否则这是完美的。这里较大的是指转换为位图时大约250 mb的图像。

绘制大图像时,一切正常,直到我们手动为PrintDocument分配新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时,只显示绘制的第一张大图,所有其他图画都会出现。

只有重新启动我们的应用程序才能撤消此行为。

0 个答案:

没有答案