私の要件は、iTextを使用して実行しているデータベースからのデータを含む動的レポートpdfファイルを作成することです。今、このpdfファイルをメニュー、ヘッダー、フッターなどとともにWebページにインラインで表示したいと思います.
そのため、ユーザーが pdf ビューアーを持っている場合、この pdf は、その pdf を印刷するための印刷オプションを使用してユーザーのマシンに表示される必要があります。
これが私がやっている方法です。このアクションは、iframe 内または通常の jsp 内で呼び出すことができます
public class GeneratePdf extends ActionSupport{
private InputStream inputStream;
public String execute(){
HttpServletResponse response = ServletActionContext.getResponse();
Document document = new Document();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
try {
PdfWriter.getInstance(document, buffer);
document.open();
// do your thing
document.close();
} catch (DocumentException e) {
e.printStackTrace();
}
byte[] bytes = null;
bytes = buffer.toByteArray();
response.setContentLength(bytes.length);
if(bytes!=null){
inputStream = new ByteArrayInputStream ( bytes );
}
return SUCCESS;
}
public InputStream getInputStream() {
return inputStream;
}
}
struts.xml で
<action name="GeneratePdf" class="com.xxx.action.GeneratePdf">
<result name="success" type="stream">
<param name="contentType">application/pdf</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">filename="test.pdf"</param>
<param name="bufferSize">1024</param>
</result>
</action>