我正在尝试开发一个用户可以填写并提交给我的表单,以便我可以收集数据。表单需要有2个表,行数可变。我们使用的是MS Word,但我们想要更加平台中立。像.PDF这样的东西。有些用户没有互联网连接,因此他们需要通过电子邮件提交。我尝试过Adobe FormsCentral并喜欢他们的数据收集功能,但我使用的表单功能只能在HTML中工作,需要互联网连接。
如果我使用Adobe LiveCycle创建表单,那么我需要一种方法来从中收集数据。我不想花费80美元购买那些据说允许我收集数据的Forms Pro。有没有人找到一个产品或写一些东西从.PDF表单获取数据(XML)并将其放在SQL Server数据库中?
谢谢, 保罗
答案 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;
}