マイ・プログラム:テキストボックスとボタンがほとんどないフォームが含まれています。 「デフォルトプリンタ」はAdobe PDFと設定されています。C#でのフォーム/ UserControlの印刷
私の目標:ユーザーが[印刷]ボタンをクリックしたときにフォーム/ユーザーコントロールのスクリーンショットを撮りたいですか?スクリーンショットはデスクトップに.pdf形式で保存されます。
私の問題:スクリーンショットの
- サイズ:スクリーンショットのサイズが大きすぎると、それはページのサイズに合わない(デフォルト私はコードで、次の2つの問題をしているページサイズ)を.pdfに変換すると、以下の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#の言語を学ぶ初心者であり、あなたの助けに感謝します。 :)
このQ/Aを見て、C#イメージスケーリングのサンプルを入手してください:http://stackoverflow.com/questions/249587 –
2番目の問題(ダブルダイアログ)については、これはちょっと推測ですが、この行を削除してみてください。 'printDocument1 .PrintPage + = ... 'あなたのコンストラクタから。私はこれが 'InitializeComponent()'の内部ですでに起こっていると推測しています。これは、イベントを明示的に2回処理していることを意味します。 Form1.Designer.csファイルを開いて、複製している他のものがあるかどうかを確認します。 (あなたのInit呼び出しを除いて、コンストラクタ内の他のものはすべて冗長かもしれません) –
@PaulSasik:Nope。問題2の場合、その行を削除すると私に白いPDFが得られ、保存できません。 ._。 – Smith