【问题标题】:Primefaces generated PDF from iText is showing blank in object componentPrimefaces 从 iText 生成的 PDF 在对象组件中显示为空白
【发布时间】:2015-07-13 12:33:39
【问题描述】:

我需要您的助手在 object 组件中显示 PDF 文档的内容。目前 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"/>  

现在我收到以下错误:

]] ServletException 的根本原因。 java.lang.NoClassDefFoundError: javax/el/ValueReference 在 org.primefaces.el.InterceptingResolver.getValue(InterceptingResolver.java:51) 在 com.sun.el.parser.AstIdentifier.getValue(Unknown Source) 在 com.sun.el.parser.AstValue.getValue(Unknown Source) 在 com.sun.el.ValueExpressionImpl.getValue(Unknown Source) at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 在 org.primefaces.el.ValueExpressionAnalyzer.intercept(ValueExpressionAnalyzer.java:69) 在 org.primefaces.el.ValueExpressionAnalyzer.getExpression(ValueExpressionAnalyzer.java:45) 在 org.primefaces.util.DynamicResourceBuilder.build(DynamicResourceBuilder.java:49) 在 org.primefaces.component.media.MediaRenderer.getMediaSrc(MediaRenderer.java:125) 在 org.primefaces.component.media.MediaRenderer.encodeEnd(MediaRenderer.java:42) 在 javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:884)

【问题讨论】:

  • &lt;object data&gt; 必须代表一个 URL(与您在浏览器地址栏中输入的 URL 完全相同,以便手动下载 PDF)。你看过&lt;p:media&gt;吗?
  • 该类是自 EL 2.2 (Java EE 6) 以来的新类。您是否在 Java EE 6 兼容服务器或更新版本上运行?如果是这样,您确定 webapp 的 /WEB-INF/lib 不包含旧版本 EL 库的 JAR 文件吗?
  • @BalusC 我们正在使用最新的 weblogic 服务器。是的,他们在那里。
  • /WEB-INF/lib 不应包含任何服务器本身已提供的库,例如 Java EE、JSF、EL、Servlet 等。
  • @BalusC 我会删除并检查

标签: java jsf pdf primefaces outputstream


【解决方案1】:

iText WAR 文件保存在 /lib 文件夹下,并且运行良好。兼容版本为iText 2.1.7 请参考文档中的Dependencies

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    相关资源
    最近更新 更多