【C#】自分自身のフォームのスクリーンショットをプリンタへ直接印刷する
自分自身のフォームのスクリーンショットをプリンタへ直接印刷
今回使用した環境
インターネット接続可能のオンラインの環境
64 ビット オペレーティング システム
Windows 10 21H1
Visual Studio 2022 C# .NET Framework 4.8
フォームデザイン
フォームは以下のようなイメージで、真ん中にボタン画面印刷ボタンがひとつあるだけです。
ソースコード
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
namespace ScreenPrinting
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// ビットマップイメージ
private Bitmap _bitmapImage;
private void button1_Click(object sender, EventArgs e)
{
// 自フォームのサイズを取得
Size size = this.Size;
// ビットマップイメージのサイズを決定
_bitmapImage = new Bitmap(size.Width, size.Height);
// 自フォームの画面コピーをビットマップイメージへ描画
using (Graphics g = Graphics.FromImage(_bitmapImage))
{
g.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, size);
}
// PrintDocumentクラス
PrintDocument printDocument = new PrintDocument();
// この設定をすることで「印刷中」のウィンドウを非表示とする
printDocument.PrintController = new StandardPrintController();
// PrintPageイベントでprintDocumentインスタンスに描画して印刷する
printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
printDocument.Print();
}
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
// printDocumentインスタンスにビットマップイメージを描画
e.Graphics.DrawImage(_bitmapImage, 0, 0);
}
}
}
※36行目の「printDocument.PrintController = new StandardPrintController();」がない場合、以下のような「印刷中 document 中 1 ページ」のウィンドウが表示されます。筆者の環境では必要なかったので非表示としました。
動作確認
画面印刷ボタンをクリックするとOSで設定されている「通常使うプリンター」に出力されます。筆者の環境ではPDFに出力しました。
フォームの描画範囲の指定が悪いのか、ちょっとフォームの裏にある画面までキャプチャーされてしまっていますね…。
もし綺麗に画面印刷したい場合、個々で描画範囲を調節してください。
以上となります。
ここまでお読みいただきありがとうございました。