Jasper Reports + PDF生成问题

时间:2010-07-10 10:08:21

标签: fonts pdf-generation jasper-reports

我有一个我正在展示的碧玉报道。现在我有了一个图标来获取PDF格式的相同报告。

现在,当我使用Tomcat在操作系统中部署代码时,它工作正常,但我现在面临的问题是,我们创建了一个没有UI的Ubuntu虚拟机映像。

当我尝试以PDF格式下载报告时,我在网上进行了大量搜索后发现错误,在这里,我发现字体丢失了,因此出现了这个问题。

现在我已经对字体的路径进行了硬编码,并将真实字体也放在报告文件夹的同一路径中。但我仍然收到错误。

以下是我在JRXML文件中添加的代码

<font size="20" isBold="false" fontName="Verdana" pdfFontName="/var/lib/tomcat6/webapps/WallCloud/jsp/dashboard/reports/Helvetica.ttf" isBold="false" isPdfEmbedded ="true"/>

这是我得到的错误

javax.servlet.ServletException: org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)

这是在

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, conn);

这是我的pdf生成代码

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.sql.Connection" %>
<%@page import="net.sf.jasperreports.view.JasperViewer" %>
<%@page import="net.sf.jasperreports.engine.xml.JRXmlLoader" %>
<%@page import="net.sf.jasperreports.engine.JasperCompileManager" %>
<%@page import="net.sf.jasperreports.engine.JasperFillManager" %>
<%@page import="net.sf.jasperreports.engine.JasperPrint" %>
<%@page import="net.sf.jasperreports.engine.design.JasperDesign" %>
<%@page import="net.sf.jasperreports.engine.JasperReport" %>
<%@page import="java.io.ByteArrayOutputStream" %>
<%@page import="com.abc.xyz.utils.DBConnection" %>
<%@page import="org.apache.commons.collections.*" %>
<%@page import="org.apache.jasper.JasperException" %>

<form name='frmReport' method='POST'>
    <%
    try {
        Connection conn = null;
        DBConnection dbConn = new DBConnection();
        conn = dbConn.getSimpleConnection();
        String path = getServletContext().getRealPath("/")+"/jsp/reports/Report.jrxml";


      JasperDesign jasperD = JRXmlLoader.load(path);
            JasperReport jasperReport = JasperCompileManager.compileReport(jasperD);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", "inline; filename=\"Report.pdf\"");   
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, conn);
                    net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfStream(jasperPrint, baos);

                response.setContentLength(baos.size());
            ServletOutputStream out1 = response.getOutputStream();
            baos.writeTo(out1);

            out1.flush();
            conn.close();
        } catch (Exception se) {

        }
    %>

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

在目标应用程序need to use the font extensions中部署所需字体时,使用报告模板发送所需字体。

此致

吉尔伯托

答案 1 :(得分:0)

我找到了解决这个问题的方法。我们需要以下内容:

  1. 编辑/ etc / apt / sources / list

  2. 添加以下行

    deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse

    deb-src http://us.archive.ubuntu.com/ubuntu/ hardy multiverse

    deb http://us.archive.ubuntu.com/ubuntu/ hardy-updates multiverse

    deb-src http://us.archive.ubuntu.com/ubuntu/ hardy-updates multiverse

  3. sudo apt-get update

  4. sudo apt-get install msttcorefonts

  5. 这解决了问题,PDF也在生成。