如何将生成的 pdf 保存在 Web 应用程序目录 [xdocreport] 中?

How to save generated pdf in the web app directory [xdocreport]?

我正在使用 xdocreport[= 生成 pdf 文档13=] 个文件。我使用 struts2 来实现。我关注了这个https://github.com/opensagres/xdocreport/wiki/DocxReportingStruts2

我让它正常工作,它确实生成 pdf 并填写 docx 文件java 中的所有内容。

我的问题是:一旦循环完成,它直接将生成的文件扔给用户下载。因此,一旦 xdocreport 生成了所有内容,用户的浏览器就会开始下载它。

相反,我希望将生成的 pdf 保存在 Web 应用程序 [ 或同一驱动器单独的文件夹中] 目录,然后从那里我想询问用户是否要下载它,如果他单击是,则下载它。此外,我必须备份生成的 pdf 文档,因此我必须先以某种方式生成并将其保存在 Web 应用程序 [ 或同一驱动器单独的文件夹] 文件夹,然后将其提供给用户。

我怎样才能改变它的行为?

EDIT1 [基于以下答案]:

所以现在它抛出这个异常,但即使它抛出它我可以看到浏览器上显示的转换后的 pdf 但我无法打开文件系统中生成的 pdf 文档本身。

* ERROR 2016-08-04 09:33:16,079 ExceptionConverter: org.eclipse.jetty.io.EofException (XWPF2PDFViaITextConverter.java [qtp559888791-19])
* ERROR 2016-08-04 09:33:16,096 Error while executing action (ExceptionInterceptor.java [qtp559888791-19])
fr.opensagres.xdocreport.converter.XDocConverterException: org.apache.poi.xwpf.converter.core.XWPFConverterException: ExceptionConverter: org.eclipse.jetty.io.EofException
at     fr.opensagres.xdocreport.converter.docx.poi.itext.XWPF2PDFViaITextConverter.convert(XWPF2PDFViaITextConverter.java:72)
at fr.opensagres.xdocreport.document.AbstractXDocReport.convert(AbstractXDocReport.java:713)
at org.apache.struts2.views.xdocreport.AbstractXDocReportResult.doProcessReportWithConverter(AbstractXDocReportResult.java:561)
at org.apache.struts2.views.xdocreport.AbstractXDocReportResult.doExecute(AbstractXDocReportResult.java:284)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:191)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:369)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:273)

正如您在给定 link 的页面上看到的那样,您可以将参数下载设置为 false,这将禁用下载。

<action name="DisplayProject" class="example.DisplayProject">
  <result name="success" type="xdocreport">
  <param name="location">/docx/DocxProjectWithVelocityList.docx</param>
  <param name="templateEngine">Velocity</param>
  <param name="fieldAsList">developers.Name,developers.LastName</param>
  <param name="download">false</param>
</result>

并将文件保存在 web 应用程序文件夹中,我想你可以

public void populateContext(IXDocReport report, IContext context)
        throws Exception {
context.put("project", getProject());
context.put("developers", getDevelopers());

try (FileOutputStream fOut = new FileOutputStream(servletContext.getRealPath("/") + "filename")) {
    report.process(context, fOut);
} catch (Exception e) {
     // Handle exception
}

}

只是假设,未经测试。