我遇到了提交PDF表单的问题,我似乎无法在线找到任何帮助,希望stackoverflow可以帮助我。
我有最终用户下载的PDF表单。单击下载链接后,我将在PDF中动态插入提交按钮。附加到按钮的URL指向我创建的名为ProcessSubmit的ActionResult。它接受2个参数,ID和版本。
用户填写表单并单击“提交”后,我从Request.InputStream中检索FDF数据并更新服务器上的PDF表单。
到目前为止,一切正常,花花公子。
当我想要返回我的MVC项目中的页面时,我的问题就出现了(索引,来自我运行ProcessSubmit的同一个控制器)。
不同的情况会发生不同的事情:
使用Chrome查看PDF:
使用Adobe PDF查看PDF:
我的代码:
/// <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");
}
答案 0 :(得分:1)
我认为你不能这样做。您的提交来自Acrobat的POST,因此这是重定向发送到的位置。 Acrobat不知道如何处理重定向。
如果在“提交”按钮的点击事件中的PDF中,在执行实际提交的代码后添加了一行,则应该起作用:
app.launchURL("http://foo.com/Index/000 (your ID)", true);
(“true”将导致Acrobat在新的浏览器窗口中打开URL,默认为“false”,它会在Acrobat中加载URL。)