我们使用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
时,只显示绘制的第一张大图,所有其他图画都会出现。
只有重新启动我们的应用程序才能撤消此行为。