2

我遇到了提交 PDF 表单的问题,我似乎在网上找不到任何帮助,希望 stackoverflow 可以帮助我。

我有一个最终用户将下载的 PDF 表单。单击下载链接后,我将在 PDF 中动态插入一个提交按钮。附加到按钮的 URL 指向我创建的名为 ProcessSubmit 的 ActionResult。它接受 2 个参数,ID 和版本。

用户填写表单并单击提交后,我从 Request.InputStream 检索 FDF 数据并更新服务器上的 PDF 表单。

到目前为止,一切正常,花花公子。

当我想返回到我的 MVC 项目中的页面(索引,来自我运行 ProcessSubmit 的同一控制器)时,我的问题就出现了。

不同的场景会发生不同的事情:

使用 Chrome 查看 PDF:

  • 什么都没发生

使用 Adob​​e 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");
    }
4

1 回答 1

1

我不认为你能做到这一点。您的提交来自 Acrobat 的 POST,因此重定向被发送到该位置。Acrobat 不知道如何处理重定向。

如果在您的 PDF 中的“提交”按钮的单击事件中,您应该在执行实际提交的代码之后添加一个附加行:

app.launchURL("http://foo.com/Index/000 (your ID)", true);

(“true”将导致 Acrobat 在新的浏览器窗口中打开 URL,默认为“false”,即在 Acrobat 中加载 URL)。

于 2014-07-23T18:41:23.770 回答