0

我们使用 aPrintPreviewControl并直接绘制到它的图形对象。通常这由背景图像和顶部的其他图形组成。

这工作得很好,除非我们必须绘制大背景图像。这里的大是指转换为位图时大约 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仅显示绘制的第一张大图像时,所有其他绘图都存在。

这种行为只能通过重新启动我们的应用程序来逆转。

4

0 回答 0