私はJSF2.0(Eclipse IDE)を使用しており、Beanの1つに、ApacheFOP1.0を使用していくつかのPDFファイルを生成するメソッドがあります。JSFページの[makePDF]ボタンをクリックすると、生成されたPDFがページと同じウィンドウで開きます(PDFを表示/保存/印刷した後は[戻る]ボタンを使用する必要があります)。
「makePDF」ボタンを押すと、標準のポップアップダイアログが表示され、ファイルを保存するか、AdobeReaderで開くかを尋ねられるように変更できます。
「makePDF」ボタンをクリックすると、生成されたPDFがAdobeReaderで直接開かれる方法はありますか(JSFページはまだあり、何も確認する必要はありません)??? また(実際には必要ありませんが、知っておくと便利です)、新しいウィンドウで開いたり、プリンターに直接送信したりする方法はありますか?
これが私のコードの主要部分です(私はいくつかの無関係なものを削除しました):
public void makePDF(long contractId, int documentType) {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
String basePath = externalContext.getRealPath("/");
try {
fopFactory.setUserConfig(new File(basePath + "/pdf_transform/config/userconfig.xml"));
fopFactory.setBaseURL(basePath);
fopFactory.getFontManager().setFontBaseURL(basePath);
} catch (Exception e) {
e.printStackTrace();
}
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
foUserAgent.setBaseURL(fopFactory.getBaseURL());
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
response.reset();
response.setHeader("Content-Type", "application/pdf");
response.setHeader("Content-disposition", "attachment");
BufferedOutputStream output = null;
try {
output = new BufferedOutputStream(response.getOutputStream(), 10240);
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, output);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(new StreamSource(xsltfile));
Source src = new DOMSource(makeXML(contract)); // my method
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
} catch (Exception e) {
e.printStackTrace();
}
facesContext.responseComplete();
}`
削除するresponse.setHeader("Content-disposition", "attachment");
と同じウィンドウで開きます。それ以外の場合は、保存するか開くかを尋ねられます。
前もって感謝します。