将整个界面导出为PDF

时间:2018-11-11 14:17:41

标签: vb.net winforms

我创建了一个包含Labels和TextBoxes的简单程序。我添加了一个按钮,将带有标签和文本框的整个界面导出到PDF,但出现以下错误消息:

  

无法将类型为'System.Windows.Forms.Panel'的对象强制转换为类型   'iTextSharp.text.IElement'。,

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim pdfDoc As New Document()
    Dim pdfWrite As PdfWriter = PdfWriter.GetInstance(pdfDoc, New FileStream("C:\Users\Win 10\Desktop\simple.pdf", FileMode.Create))

    pdfDoc.open()
    pdfDoc.Add(Panel1)
    pdfDoc.Add(Panel2)
    pdfDoc.Add(TextBox1)
    pdfDoc.Add(TextBox2)
    pdfDoc.Close()
End Sub

1 个答案:

答案 0 :(得分:2)

您需要将控件转换为位图图像,然后将其放入PDF

我编写了此函数,它将使用WinForms控件,将其转换为Bitmap,然后转换为iTextSharp.text.Image格式,然后可以将其放置在PDF内。

Function ControlToPDFImage(ControlToConvert As Windows.Forms.Control)

    Dim Bmp As Bitmap = New Bitmap(ControlToConvert.Width, ControlToConvert.Height)
    ControlToConvert.DrawToBitmap(Bmp, New Drawing.Rectangle(0, 0, Panel1.Width, Panel1.Height))
    Dim PDFImg As Image = iTextSharp.text.Image.GetInstance(Bmp, System.Drawing.Imaging.ImageFormat.Png)

    Return PDFImg

End Function

因此,如果您将代码更改为此,它应该可以工作:

pdfDoc.Add(ControlToPDFImage(Panel1))
pdfDoc.Add(ControlToPDFImage(Panel2))
pdfDoc.Add(ControlToPDFImage(TextBox1))
pdfDoc.Add(ControlToPDFImage(TextBox2))