iText:如何在提交 Pdf 表单后重定向到 url,当它显示在 iframe 中时?

Posted

技术标签:

【中文标题】iText:如何在提交 Pdf 表单后重定向到 url,当它显示在 iframe 中时?【英文标题】:iText : How to redirect to a url after submitting a Pdf Form when it is displayed in an iframe? 【发布时间】:2015-06-01 10:53:54 【问题描述】:

我已经成功地按照书中给出的说明提交了一个 Pdf 表单(9.2.1 向现有表单添加提交按钮)。

在提交时调用一个 Java servlet:

submitButtonField.setAction(PdfAction.createSubmitForm(SERVLET_URL, null, PdfAction.SUBMIT_html_FORMAT));

处理接收到的数据后,servlet 重定向到特定的 url:

response.sendRedirect(REDIRECT_URL);

当 Pdf 不在 iframe 中显示时,这很有效。

我的问题是我的 Pdf 显示在 iframe 中,并且仅重定向 iframe 而不是父窗口。

一个解决方案是让我的 servlet 返回 REDIRECT_URL,然后调用一些 javascript 来重定向父窗口:

function redirectAfterFormSubmit(redirectUrl) 
    window.top.location.href = redirectUrl;

但我不知道如何在表单提交后调用这个 javascript 函数。

如何使用 iText 做到这一点?

编辑:

我设法在提交后通过这样做调用 javascript:

String javascript = "function redirectAfterFormSubmit(redirectUrl) window.top.location.href = redirectUrl;";
pdfStamper.addJavaScript(javascript);

PdfAction action = PdfAction.createSubmitForm(SERVLET_URL, null, PdfAction.SUBMIT_HTML_FORMAT);
action.next(PdfAction.javaScript(String.format("redirectAfterFormSubmit('%s')", REDIRECT_URL), pdfStamper.getWriter()));

但它不起作用。 如果我显示控制台,我可以看到错误消息:

ReferenceError: window is not defined

感谢您的帮助;)

【问题讨论】:

【参考方案1】:

我发现这种解决方法效果很好。 它不是很优雅,但我找不到其他解决方案。 如果有人有更优雅的解决方案,请随时发布。

而不是在我的 servlet 中调用 response.sendRedirect

response.sendRedirect(REDIRECT_URL);

我在响应中写了一个 html 页面,其中包含调用 javascript 中的重定向:

String redirectPage = "<script language=javascript>\n" + 
                    "function redirect()\n" + 
                    "  window.top.location.href = \"" + redirectUrl + "\";\n" + 
                    "\n" + 
                    "</script>\n" + 
                    "\n" + 
                    "<body onload=\"redirect()\">\n" + 
                    "\n" + 
                    "</body>";

response.getWriter().println(redirectPage);

【讨论】:

以上是关于iText:如何在提交 Pdf 表单后重定向到 url,当它显示在 iframe 中时?的主要内容,如果未能解决你的问题,请参考以下文章

下载pdf后重定向查看

提交表单后重定向到另一个页面?

以 HTML 格式提交表单后重定向到页面

表单提交后重定向

表单提交后重定向的正确方法

使用纯javascript提交表单后重定向