从.PDF表单收集数据

时间:2013-08-01 18:49:39

标签: c# pdf livecycle xfa

我正在尝试开发一个用户可以填写并提交给我的表单,以便我可以收集数据。表单需要有2个表,行数可变。我们使用的是MS Word,但我们想要更加平台中立。像.PDF这样的东西。有些用户没有互联网连接,因此他们需要通过电子邮件提交。我尝试过Adobe FormsCentral并喜欢他们的数据收集功能,但我使用的表单功能只能在HTML中工作,需要互联网连接。

如果我使用Adobe LiveCycle创建表单,那么我需要一种方法来从中收集数据。我不想花费80美元购买那些据说允许我收集数据的Forms Pro。有没有人找到一个产品或写一些东西从.PDF表单获取数据(XML)并将其放在SQL Server数据库中?

谢谢, 保罗

2 个答案:

答案 0 :(得分:2)

您在一个问题中遇到了很多问题。我建议你学习PDF和Adobe,并了解你能做什么,不能用你所描述的做什么。

有几种类型的PDF表单 - Acroforms(静态),静态XFA表单和动态XFA表单。根据您的描述,您需要动态XFA(您说可变行数)。

您还请求离线处理,这意味着表单必须为“Reader Enabled”,以允许远程用户将数据实际保存到表单中。

因此,您需要一个可以创建“Adobe Reader Enabled Dynamic XFA Form”的工具 - 只有Adobe Lifecycle Designer可以创建它,但您需要阅读他们的许可证,了解如何将该表单分发给用户。

对于处理动态XFA表单服务器端以提取数据,您可以查看iText。它可以从PDF中提取XML,您可以使用该XML执行所需的操作(解析/放入数据库/无论如何)。

答案 1 :(得分:0)

C#我最终创建了一个提交XML数据的LiveCycle XFA表单,然后使用以下代码阅读此电子邮件

        XDocument xDoc = XDocument.Load(xml.FullName);


        IEnumerable<XElement> monthlyReportElements = from el in xDoc.Descendants("MonthlyReportForm") select el;

        foreach (XElement el in monthlyReportElements)
        {
            teamName = Helper.GetElement("TeamName", el, true);
            reportingDate = string.Format("{0}-{1}", Helper.GetElement("ReportingYear", el, true), Helper.GetElement("ReportingMonth", el, true));
            pdfVersion = Helper.GetElement("FileVersionField", el, true);
            supervisorEmail = Helper.GetElement("SupervisorEmail", el, true);

            return true;
        }

 internal static string GetElement(string elementName, XElement xElement, bool required)
{
    if (xElement == null
        || string.IsNullOrEmpty(elementName)
        || xElement.Element(elementName) == null
        || xElement.Element(elementName).Value == null)
    {
        if (required)
            throw new Exception(string.Format("Required element '{0}' is missing", elementName));
        else
            return string.Empty;
    }
    return xElement.Element(elementName).Value;
}
相关问题