マイ プログラム:いくつかのテキスト ボックスと 1 つのボタンを含むフォームが含まれています。「デフォルトのプリンター」は、コンピューターでAdobe PDFとして設定されています。
私の目標:ユーザーが [印刷] ボタンをクリックしたときに、フォーム/ユーザー コントロールのスクリーンショットを撮りたいです。スクリーンショットはデスクトップに .pdf 形式で保存されます。
私の問題:コードには次の 2 つの問題があります。
- スクリーンショットのサイズ: スクリーンショットのサイズが大きすぎて、印刷/ .pdfに変換したときにページのサイズ (デフォルトのページ サイズ) に収まりません。以下の2つの画像を参照してください。スクリーンショット全体をページ内に収めたい。
- 変換して保存する場所を 2 回尋ねられる: [フォームの印刷] ボタンをクリックすると、プログラムは、ファイルを印刷/変換して保存する場所を 2 回尋ねてきます。ファイルを印刷して保存する場所を 1 回だけ尋ねるプログラムが必要です。
問題 1: プログラムによってキャプチャされたスクリーンショットは、印刷時にページに収まりません。
スクリーンショットの画像を.pdfの 1 ページにこのように収めたい:
コード:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button1.Text = "Print Form";
button1.Click += new EventHandler(button1_Click);
printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
this.Controls.Add(button1);
}
private void button1_Click(object sender, EventArgs e)
{
CaptureScreen();
printDocument1.Print();
}
Bitmap memoryImage;
private void CaptureScreen()
{
Graphics myGraphics = this.CreateGraphics();
Size s = this.Size;
memoryImage = new Bitmap(s.Width, s.Height, myGraphics);
Graphics memoryGraphics = Graphics.FromImage(memoryImage);
memoryGraphics.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, s);
}
private void printDocument1_PrintPage(System.Object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(memoryImage, 0, 0);
}
}
事前にご協力いただきありがとうございます。私は初心者で、C# 言語を学んでおり、あなたの助けは大歓迎です。:)