【发布时间】:2011-09-02 13:49:45
【问题描述】:
我想从面向公众的网站捕获填写的 PDF 表单数据并将其保存在服务器上的数据库中。有可能吗?请告诉我。
【问题讨论】:
我想从面向公众的网站捕获填写的 PDF 表单数据并将其保存在服务器上的数据库中。有可能吗?请告诉我。
【问题讨论】:
是的,这是可能的。您需要表单上的提交按钮。在提交按钮的属性中,选择 FDF 作为数据类型。 PDF 文档中的每个字段都有一个名称。 Textbox1、Textbox2 等,您将收到名称-值对。有一些库可以帮助处理返回的数据。
我在我的控制器(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);
}
}
在这种情况下,文件名是一个临时文件名,位于我具有写入权限的临时区域 (rootPath) 中。另一种解决方案是将文件写入 MemoryStream,然后使用它发送电子邮件。
【讨论】:
我建议您查看其中一个 PDF 库,例如 iTextSharp。 This entry 将向您展示如何遍历 PDF 中的所有表单域。 this entry 将向您展示如何按给定名称获取字段。
【讨论】:
您可以使用 FDFToolkit.net 将 PDF 表单提交保存到数据库:
以下是 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
【讨论】:
要通过电子邮件自动发送填写的数据,您可以执行以下操作:
完成!
当用户点击它时,它会自动将数据文件附加到电子邮件中。它会询问用户是使用默认电子邮件还是网络邮件。
您收到的 FDF 文件或任何其他格式都必须经过解析才能提取数据。
我知道这是旧的,但有人可能正在寻找这个答案。
【讨论】: