捕获填充的PDF表单数据

时间:2011-09-02 13:49:46

标签: c# asp.net

我想从面向公众的网站捕获填写的PDF表单数据,并将其保存在服务器上的数据库中。有可能吗?请告诉我。

4 个答案:

答案 0 :(得分:1)

我建议您查看其中一个PDF库,例如iTextSharp。 This entry将向您展示如何遍历PDF中的所有表单字段。 this entry将向您展示如何按给定名称获取字段。

答案 1 :(得分:1)

是的,有可能。您需要表单上的提交按钮。在提交按钮的属性中,选择FDF作为数据类型。 PDF文档中的每个字段都有一个名称。 Textbox1,Textbox2等,您将收到名称 - 值对。有些库可以帮助处理返回的数据。

我在Controller(ASP.NET MVC应用程序)中收到了完整的PDF文档,如下所示:

string filename = Path.Combine(Server.MapPath(rootPath), name);
using (FileStream fs = new FileStream(filename, FileMode.CreateNew))
{
    byte[] bytes = new byte[8192];
    int bytesRead;
    while ((bytesRead = Request.InputStream.Read(bytes, 0, bytes.Length)) > 0)
    {
        fs.Write(bytes, 0, bytesRead);
    }
}

在这种情况下,filename是一个临时文件名,位于临时区域(rootPath),我有写访问权限。另一个解决方案是将文件写入MemoryStream,然后使用它发送电子邮件。

答案 2 :(得分:0)

您可以使用FDFToolkit.net将PDF表单提交保存到数据库:

http://www.fdftoolkit.net

以下是ASP.net(VB.net),ADO.net和SQL的示例:

If Not IsPostBack Then
    Dim fdfApp As New FDFApp.FDFApp_Class()
    Dim fdfDoc As New FDFApp.FDFDoc_Class()
    fdfDoc = fdfApp.FDFOpenFromStream(Request.InputStream, True, True)
    Dim dr As DataRow
    Dim ds As New DataSet
    Dim da As New System.Data.SqlClient.SqlDataAdapter("SELECT * FROM TABLENAME", "CONNECTION STRING")
    da.Fill(ds, "TABLENAME")
    dr = ds.Tables(0).NewRow
    'SET VALUES THAT MATCH NAMES IN TABLE & IN PDF
    'fdfDoc.FDFSetDataRowFromValues(dr)
    dr("FIELD_NAME1") = fdfDoc.FDFGetValue("PDF_FIELD_NAME1")
    dr("FIELD_NAME2") = fdfDoc.FDFGetValue("PDF_FIELD_NAME2")
    ' DUMP XML FILE TO FIELD
    dr("FIELD_DUMP_XML") = fdfDoc.FDFSavetoStr(FDFDoc_Class.FDFType.XML, True)
    ds.Tables(0).Rows.Add(dr)
    da.Update(ds, "TABLENAME")
    fdfDoc.FDFClose()
    fdfDoc.Dispose()
End If

答案 3 :(得分:0)

要通过电子邮件自动发送填充数据,您可以执行以下操作:

  1. 添加PDF按钮("提交")
  2. 右键单击 - > PDF选项 - >字段属性
  3. 选择"行动"标签
  4. 选择提交表单类型
  5. 在网址类型mailto:mail.recipient@anymail.com
  6. 在提交格式中选择FDF或您想要的格式
  7. DONE!

    当用户点击它时,它会自动将数据文件附加到电子邮件中。它会询问用户是否使用默认电子邮件或网络邮件。

    您需要解析收到的FDF文件或任何其他格式,以便提取数据。

    我知道这已经过时了,但有人可能正在寻找这个答案。