1

Visual Studio 2005 で Windows アプリケーションを作成しました。このアプリケーションでは、ユーザーは現在アクティブなフォームを PDF ファイルにエクスポートできます。

問題は、テキストボックスの値でそれを保存するにはどうすればよいですか? それらを空のままにしておくと、問題はありません。次に、テキストボックスに入力して出力を取得し、[エクスポート] をクリックすると、「GDI+ で一般的なエラーが発生しました」というメッセージが表示されます。そしてVisual Studioの出力ウィンドウで:

A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
A first chance exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll

これが私のコードです:

アクティブな画面をキャプチャする場合:

try
{
    Rectangle bounds = this.Bounds;
    using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
    {
        using (Graphics g = Graphics.FromImage(bitmap))
        {
            g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);
        }
        bitmap.Save("C://Rectangle.bmp", ImageFormat.Bmp);
    }
}
catch(Exception e)
{
    MessageBox.Show(e.Message.ToString());
}

PDF にエクスポートする場合:

captureScreen();

PdfDocument doc = new PdfDocument();

PdfPage oPage = new PdfPage();

doc.Pages.Add(oPage);
oPage.Rotate = 90;
XGraphics xgr = XGraphics.FromPdfPage(oPage);
XImage img = XImage.FromFile(@"C://Rectangle.bmp");

xgr.DrawImage(img, 0, 0);

doc.Save("C://RectangleDocument.pdf");
doc.Close();

テキストボックスの値を含むフォームをPDFにエクスポートするのを手伝ってください。

4

1 に答える 1

1

CopyFromScreen を呼び出そうとすると、この例外がスローされると思いますか? 以前に非常によく似たコードを問題なく書いたことがありますが、いくつかの小さな違いがあります。

最初に目にするのは、Bounds プロパティはポイントを相対位置として返しますが、CopyFromScreen メソッドはポイントを絶対位置として想定していることです。CopyFromScreen を呼び出す前に、this.PointToScreen を呼び出して、ポイントの絶対スクリーン位置を取得することをお勧めします。

第二に、それは「うまくいく」はずですが、私自身の正気のために、私は通常 CopyFromScreen 呼び出しで CopyPixelOption.SourceCopy を使用します。

CopyFromScreen と Bitmap.Save の実装についてはよくわかりませんが、グラフィック オブジェクトが破棄される前に Save 呼び出しが行われるように移動することをお勧めします。これはおそらく必要ありませんが、なんらかの遅延計算が行われていると問題が発生する可能性があります。

于 2012-09-21T14:31:32.663 に答える