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 回答