【问题标题】:Capture filled PDF form data捕获填充的 PDF 表单数据
【发布时间】:2011-09-02 13:49:45
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    是的,这是可能的。您需要表单上的提交按钮。在提交按钮的属性中,选择 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 上的“提交”按钮后,是否可以直接通过电子邮件发送填写的表格。现在,当我单击“电子邮件表单”提交按钮时,它正在尝试打开 Outlook 以发送电子邮件。我想绕过并直接发送到指定的电子邮件地址。
    • 我认为这是不可能的。属性的最后一个选项卡作为您可以执行的所有操作。我发现唯一可用的是“提交表格”。所以我选择将填写好的表格提交到服务器,然后我可以通过电子邮件发送。提交表单操作有几个用于接收不同内容的设置。我使用 PDF,但您也可以获得 FDF、HTML 或 XFDF。使用最适合您的。
    • Leons,您能否解释一下有关将填写好的表格提交到服务器然后发送电子邮件的更多信息?我必须写一些脚本吗?
    • @nav100 - 我在 IIS 7 上编写 C# 代码来接收 PDF,然后使用 System.Net.Mail.MailMessage 和 SmtpClient 通过电子邮件发送。我将编辑我的答案以显示我是如何收到文件的。
    【解决方案2】:

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

    【讨论】:

    • 克里斯,是否可以将填写的表格通过电子邮件发送到指定的电子邮件地址而不提示 Outlook?谢谢。
    • 我猜您只是在谈论 Adob​​e Acrobat 和/或 Reader,因此电子邮件的答案是否定的。每个人都害怕在他们的程序中加入 SMTP 引擎,所以他们总是依赖其他人,这就是 Outlook、OE、Entourage 等被调用的原因。您可以让该人手动上传 PDF,也可以按照 @Leons 的说明进行操作。
    【解决方案3】:

    您可以使用 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
    

    【讨论】:

    • 请在帖子中提及您推荐自己的产品,否则您的帖子可能会被标记为垃圾邮件。
    【解决方案4】:

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

    1. 添加 PDF 按钮(“提交”)
    2. 右键单击 -> PDF 选项 -> 字段属性
    3. 选择“操作”选项卡
    4. 选择提交表单类型
    5. 在 url 中输入 mailto:mail.recipient@anymail.com
    6. 在提交格式中选择 FDF 或您想要的格式

    完成!

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

    您收到的 FDF 文件或任何其他格式都必须经过解析才能提取数据。

    我知道这是旧的,但有人可能正在寻找这个答案。

    【讨论】:

      猜你喜欢
      • 2011-12-16
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 2011-02-06
      • 2013-12-25
      • 2018-02-27
      • 2013-02-20
      • 1970-01-01
      相关资源
      最近更新 更多