我遇到了提交 PDF 表单的问题,我似乎在网上找不到任何帮助,希望 stackoverflow 可以帮助我。
我有一个最终用户将下载的 PDF 表单。单击下载链接后,我将在 PDF 中动态插入一个提交按钮。附加到按钮的 URL 指向我创建的名为 ProcessSubmit 的 ActionResult。它接受 2 个参数,ID 和版本。
用户填写表单并单击提交后,我从 Request.InputStream 检索 FDF 数据并更新服务器上的 PDF 表单。
到目前为止,一切正常,花花公子。
当我想返回到我的 MVC 项目中的页面(索引,来自我运行 ProcessSubmit 的同一控制器)时,我的问题就出现了。
不同的场景会发生不同的事情:
使用 Chrome 查看 PDF:
- 什么都没发生
使用 Adobe PDF 查看 PDF:
- 打开位于 %APPDATA% (file:///C:/Users/USERNAME/AppData/Local/Temp/acrord32_sbx/A9RD9D8.htm) 的文件 - 这个文件似乎是我的登录页面的损坏版本。
我的代码:
/// <summary>
/// Requests the form.
/// </summary>
/// <param name="id">The identifier.</param>
/// <param name="version">The version.</param>
/// <returns></returns>
public ActionResult RequestForm(Guid id, int version)
{
if (ControllerContext.HttpContext.Request.Url != null)
{
var processSubmitUriString =
Url.Action("ProcessSubmit", "Forms", null, ControllerContext.HttpContext.Request.Url.Scheme);
var processSubmitUrl = String.Format("{0}?id={1}&version={2}", processSubmitUriString, id, version);
var source = _FormsProxy.GetPatientClinicalOrderStream(id, version, processSubmitUrl);
if (source != null)
{
return File(source, "application/pdf", string.Format("YourForm_{0}.pdf", DateTime.Now.ToString("MMddyyyy-HHmmss")));
}
}
return null;
}
/// <summary>
/// Processes the submit.
/// </summary>
/// <param name="id">The identifier.</param>
/// <param name="version">The version.</param>
/// <returns></returns>
public ActionResult ProcessSubmit(string id, int version)
{
using (var sr = new StreamReader(Request.InputStream))
{
var fdfStream = sr.ReadToEnd();
var fields = FDFParser.Parse(fdfStream.Replace(">>", ">>\r\n"));
_FormsProxy.UpdatePatientClinicalOrderFromSubmittedData(new Guid(id), version, fields.Fields);
}
return RedirectToAction("Index");
}