我的要求是使用 iText 生成 PDF 文件,我使用以下代码创建示例 PDF
Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter.getInstance(document, baos);
document.open();
document.add(new Paragraph("success PDF FROM STRUTS"));
document.close();
ServletOutputStream outputStream = response.getOutputStream() ;
baos.writeTo(outputStream);
response.setHeader("Content-Disposition", "attachment; filename=\"stuReport.pdf\"");
response.setContentType("application/pdf");
outputStream.flush();
outputStream.close();
如果您在上面的代码中看到,iText 没有使用任何 inputStream 参数,而是直接写入响应的输出流。而 struts-2 要求我们使用 InputStream 参数(见下面的配置)
<action name="exportReport" class="com.export.ExportReportAction">
<result name="pdf" type="stream">
<param name="inputName">inputStream</param>
<param name="contentType">application/pdf</param>
<param name="contentDisposition">attachment;filename="sample.pdf"</param>
<param name="bufferSize">1024</param>
</result>
</action>
我知道我的类应该有 inputStream 的 getter 和 setter,我在 struts-configuration 中提到的类中也有
private InputStream inputStream;
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
但是由于 iText 并不真正需要输入流,而是直接写入响应的输出流,因此我得到了异常,因为我没有为 inputStream 参数设置任何内容。
请让我知道如何在 struts-2 中使用 iText 代码,并将 resultType 作为流
谢谢