I have created pdf using IText library
Now I want when the user clicks on the button ,it should prompt a save dialog box to the user to allow to browse the destination location to store the file.
Now My code looks like
Document document = new Document();
try {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
response.reset();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=ABC.pdf");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setHeader("Pragma", "No-cache");
PdfWriter.getInstance(document, response.getOutputStream());
document.addTitle("Form");
document.addSubject("Form");
document.open();
Paragraph paragraph12 = new Paragraph("FORM",
FontFactory.getFont(FontFactory.HELVETICA,
18, Font.BOLD, new CMYKColor(0, 255, 255, 17)));
Chapter chapter1 = new Chapter(paragraph12, 1);
paragraph12.setSpacingAfter(25);
paragraph12.setAlignment(Element.ALIGN_CENTER);
document.add(paragraph12);
// Centered
Chunk underline = new Chunk(AppNo);
underline.setUnderline(0.2f, -2f);
Paragraph paragraph = new Paragraph("Application No:");
paragraph.add(underline);
paragraph.setAlignment(Element.ALIGN_LEFT);
paragraph.setSpacingAfter(20);
document.add(paragraph);
// Left
paragraph = new Paragraph("To,");
paragraph.setAlignment(Element.ALIGN_LEFT);
document.add(paragraph);
// Left with indentation
paragraph = new Paragraph(
"");
paragraph.setAlignment(Element.ALIGN_LEFT);
document.add(paragraph);
Paragraph paragraph2 = new Paragraph(
"Subject: ");
paragraph2.setSpacingAfter(15);
paragraph2.setSpacingBefore(15);
paragraph2.setAlignment(Element.ALIGN_LEFT);
paragraph2.setIndentationRight(50);
document.add(paragraph2);
Paragraph paragraph3 = new Paragraph("I ");
String laName=deaclarationOpr.getDeclarationDetailsobj()
.getLaName();
if(laName!=null){
Chunk name = new Chunk(laName);
name.setUnderline(0.2f, -2f);
paragraph3.add(name);
}
paragraph3.add(" request you to process the Application ");
paragraph3.add(underline);
paragraph3.add(" for product ");
String productName=deaclarationOpr
.getDeclarationDetailsobj().getProductName();
if(productName!=null){
Chunk product = new Chunk(productName);
product.setUnderline(0.2f, -2f);
paragraph3.add(product);
}
paragraph3
.add("");
paragraph3.setSpacingAfter(15);
paragraph3.setSpacingBefore(15);
paragraph3.setAlignment(Element.ALIGN_LEFT);
paragraph3.setIndentationLeft(50);
paragraph3.setIndentationRight(50);
document.add(paragraph3);
Paragraph paragraph4 = new Paragraph(
"");
String code=deaclarationOpr
.getDeclarationDetailsobj().getAdvisorCode();
if(code!=null){
Chunk advisorCode = new Chunk(code);
advisorCode.setUnderline(0.2f, -2f);
paragraph4.add(advisorCode);
}
paragraph4
.add("");
paragraph4.setSpacingAfter(15);
paragraph4.setSpacingBefore(15);
paragraph4.setAlignment(Element.ALIGN_LEFT);
paragraph4.setIndentationLeft(50);
paragraph4.setIndentationRight(50);
document.add(paragraph4);
Paragraph paragraph5 = new Paragraph(
"");
paragraph5.setSpacingAfter(15);
paragraph5.setSpacingBefore(15);
paragraph5.setAlignment(Element.ALIGN_LEFT);
paragraph5.setIndentationLeft(50);
paragraph3.setIndentationRight(50);
document.add(paragraph5);
Paragraph paragraph6 = new Paragraph(
"");
paragraph6.setSpacingAfter(15);
paragraph6.setSpacingBefore(15);
paragraph6.setAlignment(Element.ALIGN_LEFT);
paragraph6.setIndentationLeft(50);
paragraph6.setIndentationRight(50);
document.add(paragraph6);
Paragraph paragraph7 = new Paragraph("Date: ");
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
// get current date time with Date()
Date date = new Date();
paragraph7.add(dateFormat.format(date));
paragraph7.setSpacingBefore(15);
paragraph7.setIndentationLeft(50);
paragraph7.setIndentationRight(50);
paragraph7.setAlignment(Element.ALIGN_LEFT);
document.add(paragraph7);
Paragraph paragraph8 = new Paragraph("Name of the Proposer: ");
String propoer=deaclarationOpr
.getDeclarationDetailsobj().getProposerName();
if(propoer!=null){
Chunk proposerName = new Chunk(propoer);
proposerName.setUnderline(0.2f, -2f);
paragraph8.add(proposerName);
}
paragraph8.setAlignment(Element.ALIGN_LEFT);
paragraph8.setIndentationLeft(50);
paragraph8.setIndentationRight(50);
document.add(paragraph8);
Paragraph paragraph9 = new Paragraph("Place: ");
paragraph9.setIndentationLeft(50);
paragraph9.setIndentationRight(50);
paragraph9.setAlignment(Element.ALIGN_LEFT);
document.add(paragraph9);
document.close();
context.responseComplete();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Following filters are defined in web.xml
<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
<init-param>
<param-name>createTempFiles</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>maxRequestSize</param-name>
<param-value>20000000</param-value>
</init-param>
<init-param>
<param-name>enable-cache</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>richfaces</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
And the above code is written in the method of Backing Bean class
and invoked
<tr>
<td align="center"><a4j:commandButton
value="Print" styleClass="button"
action="#{declarationBB.convertToPdf}"></a4j:commandButton></td>
</tr>
I get below in the new page
%PDF-1.4 %��3 0 obj <>stream x��V����Ժ@��rs�0��m|셒F6[�T���H[��E D'��7��
Just write the PDF to the HTTP response instead of to a local file.
Replace
by
and invoke it in action method associated with download button. The
Content-Dispositionheader with value ofattachmentwill force a Save As dialogue (unless the browser is configured to automatically open PDF files in Adobe Reader!).See also:
Update: as per your update, you’re invoking the download by ajax.
This won’t work. You can’t download files by ajax. Ajax is executed by JavaScript, but it has due to obvious security reasons no facilities to programmatically force a Save As dialogue with asynchronously obtained/generated content in some variable. Make it a normal request instead. Use
<h:commandButton>instead.