我们使用 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
仅显示绘制的第一张大图像时,所有其他绘图都存在。
这种行为只能通过重新启动我们的应用程序来逆转。