を使用して、PrintPreviewControl
そのグラフィックス オブジェクトに直接描画します。通常、これは背景画像と他の描画で構成されます。
大きな背景画像を描画する必要がある場合を除いて、これは完全に機能しています。ここでいうラージとは、ビットマップに換算すると約250MBの画像を指します。
大きな画像が描画されると、画像を保存できるように手動でPrintDocument
a 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
、他のすべての描画が存在します。
この動作は、アプリケーションを再起動することによってのみ元に戻すことができます。