2014-01-14 2 views
0

Мое требование: нажмите кнопку «Печать» в JSF2 и откройте pdf-файл для печати с данными со страницы xhtml.Как отображать содержимое страницы xhtml в pdf, используя только JSF2 и iText, PDF не отображает данные

Приведенный ниже код открывает пустой файл PDF без данных. Я хочу PDF для отображения данных из Xhtml страницы (URL)

JSF код: JSF имеет несколько полей для отображения данных

<h:commandButton id="printButton" value="Print" actionListener="#{myBean.print}" /> 

код MyBean.Java:

public void print() 
{ 
ExternalContext externalContext =FacesContext.getCurrentInstance().getExternalContext(); 
HttpServletResponse response = (HttpServletResponse)externalContext.getResponse();  

String url = request.getRequestURL(); 

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
Document document = new Document(PageSize.LETTER); 
PdfWriter.getInstance(document, baos); 
document.open(); 
document.add(new Paragraph(" Hello")); 

response.setHeader("Expires", "0"); 
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); 
response.setHeader("Pragma", "public"); 

response.setContentType("application/pdf"); 
response.setHeader("Content-Disposition", "inline;filename=\"" + PDF_FILE_NAME + "\""); 
response.setContentLength(baos.size()); 
ServletOutputStream out = response.getOutputStream(); 

baos.writeTo(out); 
out.flush(); 
out.close(); 

document.close(); 
System.out.println("Done."); 
FacesContext.getCurrentInstance().responseComplete(); 
} 

Любая помощь будет оценили. Заранее спасибо,

ответ

0

baos заполняется только во время звонка document.close(). Итак, в основном, вы пишете пустой ответ baos.

Замените это baos на response.getOutputStream() так, чтобы iText записывал непосредственно ответ, а не через ненужный обход.

PdfWriter.getInstance(document, response.getOutputStream()); 

Не забудьте удалить следующие строки, которые стали лишними:

ServletOutputStream out = response.getOutputStream(); 
baos.writeTo(out); 
out.flush(); 
out.close(); 

Обратите внимание, что я только ответить описанную проблему симптома на основе кода, представленной до сих пор. Все это абсолютно не имеет никакого отношения к «Как отображать содержимое страницы xhtml» и «отображать данные с страницы xhtml (URL)», как вы сказали там.

Смежные вопросы