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 中时?的主要内容,如果未能解决你的问题,请参考以下文章