Primefaces 从 iText 生成的 PDF 在对象组件中显示为空白
Primefaces generated PDF from iText is showing blank in object component
我需要你的助手在 object
中显示 PDF 文档的内容 component.Currently PDF 显示为空白。
bean代码为:
public void CreatePDF() throws IOException {
try{
Document doc = new Document(PageSize.A4, 50, 50, 50, 50);
OutputStream out = new ByteArrayOutputStream();
PdfWriter writer = PdfWriter.getInstance(doc, out);
doc.open();
PdfPTable table = new PdfPTable(1);
PdfPCell cell = new PdfPCell(new Phrase("First PDF"));
cell.setBorder(Rectangle.NO_BORDER);
cell.setRunDirection(PdfWriter.RUN_DIRECTION_LTR);
table.addCell(cell);
doc.add(table);
doc.close();
out.close();
InputStream in =new ByteArrayInputStream(((ByteArrayOutputStream)out).toByteArray());
streamedContent = new DefaultStreamedContent(in, "application/pdf");
Map<String, Object> session = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
byte[] b = (byte[]) session.get("reportBytes");
if (b != null) {
streamedContent = new DefaultStreamedContent(new ByteArrayInputStream(b), "application/pdf");
}
}
catch (Exception e) {
e.printStackTrace();
}
}
和jsf代码:
<p:commandButton value="Show PDF" actionListener="#{pdf.CreatePDF}" icon="ui-icon-disk" update=":request:testpdf" />
<p:media id="testpdf" value="#{pdf.streamedContent}" width="190" height="250" player="pdf"/>
现在我得到以下错误:
]] Root cause of ServletException. java.lang.NoClassDefFoundError:
javax/el/ValueReference at
org.primefaces.el.InterceptingResolver.getValue(InterceptingResolver.java:51)
at com.sun.el.parser.AstIdentifier.getValue(Unknown Source) at
com.sun.el.parser.AstValue.getValue(Unknown Source) at
com.sun.el.ValueExpressionImpl.getValue(Unknown Source) at
com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
at
org.primefaces.el.ValueExpressionAnalyzer.intercept(ValueExpressionAnalyzer.java:69)
at
org.primefaces.el.ValueExpressionAnalyzer.getExpression(ValueExpressionAnalyzer.java:45)
at
org.primefaces.util.DynamicResourceBuilder.build(DynamicResourceBuilder.java:49)
at
org.primefaces.component.media.MediaRenderer.getMediaSrc(MediaRenderer.java:125)
at
org.primefaces.component.media.MediaRenderer.encodeEnd(MediaRenderer.java:42)
at
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:884)
iText WAR 文件保存在 /lib 文件夹下并且运行良好。兼容版本为iText 2.1.7 请参考文档中的Dependencies
我需要你的助手在 object
中显示 PDF 文档的内容 component.Currently PDF 显示为空白。
bean代码为:
public void CreatePDF() throws IOException {
try{
Document doc = new Document(PageSize.A4, 50, 50, 50, 50);
OutputStream out = new ByteArrayOutputStream();
PdfWriter writer = PdfWriter.getInstance(doc, out);
doc.open();
PdfPTable table = new PdfPTable(1);
PdfPCell cell = new PdfPCell(new Phrase("First PDF"));
cell.setBorder(Rectangle.NO_BORDER);
cell.setRunDirection(PdfWriter.RUN_DIRECTION_LTR);
table.addCell(cell);
doc.add(table);
doc.close();
out.close();
InputStream in =new ByteArrayInputStream(((ByteArrayOutputStream)out).toByteArray());
streamedContent = new DefaultStreamedContent(in, "application/pdf");
Map<String, Object> session = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
byte[] b = (byte[]) session.get("reportBytes");
if (b != null) {
streamedContent = new DefaultStreamedContent(new ByteArrayInputStream(b), "application/pdf");
}
}
catch (Exception e) {
e.printStackTrace();
}
}
和jsf代码:
<p:commandButton value="Show PDF" actionListener="#{pdf.CreatePDF}" icon="ui-icon-disk" update=":request:testpdf" />
<p:media id="testpdf" value="#{pdf.streamedContent}" width="190" height="250" player="pdf"/>
现在我得到以下错误:
]] Root cause of ServletException. java.lang.NoClassDefFoundError: javax/el/ValueReference at org.primefaces.el.InterceptingResolver.getValue(InterceptingResolver.java:51) at com.sun.el.parser.AstIdentifier.getValue(Unknown Source) at com.sun.el.parser.AstValue.getValue(Unknown Source) at com.sun.el.ValueExpressionImpl.getValue(Unknown Source) at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) at org.primefaces.el.ValueExpressionAnalyzer.intercept(ValueExpressionAnalyzer.java:69) at org.primefaces.el.ValueExpressionAnalyzer.getExpression(ValueExpressionAnalyzer.java:45) at org.primefaces.util.DynamicResourceBuilder.build(DynamicResourceBuilder.java:49) at org.primefaces.component.media.MediaRenderer.getMediaSrc(MediaRenderer.java:125) at org.primefaces.component.media.MediaRenderer.encodeEnd(MediaRenderer.java:42) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:884)
iText WAR 文件保存在 /lib 文件夹下并且运行良好。兼容版本为iText 2.1.7 请参考文档中的Dependencies