0

我已经按照书中给出的说明成功地提交了一个 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

谢谢你的帮助 ;)

4

1 回答 1

0

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

而不是调用response.sendRedirect我的 servlet:

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);
于 2015-06-01T12:51:13.447 回答