C# 如何将Windows窗体转换为包含文本框值的PDF

C# 如何将Windows窗体转换为包含文本框值的PDF,c#,pdf,textbox,visual-studio-2005,pdfsharp,C#,Pdf,Textbox,Visual Studio 2005,Pdfsharp,我已经在VisualStudio2005中创建了一个Windows应用程序。在此应用程序中,用户可以将当前活动表单导出为PDF文件 问题是如何用文本框的值保存它?当我把它们空着的时候,没有问题。然后我在文本框中输入并获取输出,单击导出,我得到一条消息“GDI+中发生了一个一般性错误”。在Visual Studio的输出窗口中: A first chance exception of type 'System.FormatException' occurred in mscorlib.dll A

我已经在VisualStudio2005中创建了一个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,包括文本框的值

我假设在您尝试调用CopyFromScreen时引发此异常?我以前写过非常类似的代码,没有任何问题,但是有一些小的区别

我看到的第一件事是Bounds属性返回一个点作为相对位置,但是CopyFromScreen方法期望该点作为绝对位置。在调用CopyFromScreen之前,您可能需要调用this.PointToScreen以获取该点的绝对屏幕位置

其次,它应该“正常工作”,但为了我自己的理智,我通常在CopyFromScreen调用中使用CopyPixelOption.SourceCopy


我不确定CopyFromScreen和Bitmap.Save的实现,但您可能希望移动Save调用,以便在释放图形对象之前执行。这可能不是必需的,但如果有任何类型的延迟计算正在进行,可能会导致您出现问题。

我假设在您尝试调用CopyFromScreen时引发此异常?我以前写过非常类似的代码,没有任何问题,但是有一些小的区别

我看到的第一件事是Bounds属性返回一个点作为相对位置,但是CopyFromScreen方法期望该点作为绝对位置。在调用CopyFromScreen之前,您可能需要调用this.PointToScreen以获取该点的绝对屏幕位置

其次,它应该“正常工作”,但为了我自己的理智,我通常在CopyFromScreen调用中使用CopyPixelOption.SourceCopy


我不确定CopyFromScreen和Bitmap.Save的实现,但您可能希望移动Save调用,以便在释放图形对象之前执行。这可能没有必要,但如果有任何类型的计算延迟,可能会给您带来问题。

请尝试使用我描述的。@kvantt我现在必须回家,并且只能在周末后再处理它。。我会让你们知道这是否解决了这个案子!请尝试使用我描述的工具。@kvantt我现在必须回家,而且只能在周末后再进行操作。。我会让你们知道这是否解决了这个案子!我应该将此CopyPixelOption.SourceCopy放置在何处?我问题的第一块代码是captureScreen()方法我移动了Save调用,以便在释放图形对象之前执行。不再出现错误,但pdf显示为黑屏。CopyPixelOption.SourceCopy应作为CopyFromScreen方法的最后一个参数添加。这应该可以解决黑屏问题。谢谢蒂姆!添加CopyFormPixel操作解决了我的问题!我应该将此CopyPixelOption.SourceCopy放置在何处?我问题的第一块代码是captureScreen()方法我移动了Save调用,以便在释放图形对象之前执行。不再出现错误,但pdf显示为黑屏。CopyPixelOption.SourceCopy应作为CopyFromScreen方法的最后一个参数添加。这应该可以解决黑屏问题。谢谢蒂姆!添加CopyFormPixel操作解决了我的问题!