JasperReport4.6生成PDF中文

Web项目中PDF显示中文

本人无奈使用JasperReport4.6,因为这本书(好像也是唯一的一本国内的介绍JasperReport的书),

选择"文件"→New命令,弹出一个新建打印有关资源的向导

在这里选择Report中的B

lank A4,含义是创建一个A4幅面纸张大小的模板文件,

1.2.1  创建模板文件(2)

选中后单击右下角的 按钮,即打开这个模板,并且设置保存模板文件的路径,效果如图1.6所示。

模板文件的扩展名为jrxml,单击"下一步"按钮出现成功配置界面,效果如图1.7所示。

Title(标题):Title Band只在整个报表的第1页的最上面部分显示,除了第1页以外,不管报表中共有多少个页面也不会再出现Title Band中的内容。

Page Header(页头):Page Header Band中的内容将会在整个报表中的每一个页面中出现,显示的位置在页面的上部,如果是报表的第1页,Page Header中的内容将显示在Title Band的下面,除了第1页以外的其他所有页面中Page Header中的内容将显示在页面的最上端。

Page Footer(页脚):显示在当前页面的最下端。

Detail 1(详细):报表内容段,在这个Band中将要显示重复出现的内容,Detail中的内容每页都会出现。

Column Header(列头):Detail 1 Band打印的是一张表,而Column Header Band就是表中列的列头。

Column Footer(列脚):Detail 1 Band打印的是一张表,而Column Footer Band就是表中列的列脚。

Summary(统计):表格的合计段,出现在整个报表的最后一页中,在Detail 1栏的后面,一般用来统计报表中某一个或某几个字段的合计值。

1.2.1  创建模板文件(3)

本示例主要实现的功能就是打印一个静态的文本,所以就像使用.NET中的WinForm一样,找到那个文本控件就可以了,在右侧的"组件面板"中可以找到显示静态文本的Static Text控件,效果如图1.10所示。

把它拖动到Detail 1 Band中,并且设置它的Text属性为"Hello World-你好 世界",效果如图1.11所示。

将Static Text控件的宽高加大,可以发现文本默认是显示在控件的左上角,效果如图1.12所示。

可以设置属性,将文本进行水平和垂直居中对齐,效果如图1.13所示。

虽然文本在控件Static Text内垂直水平居中对齐了,但控件Static Text并没有在Detail 1栏垂直水平居中对齐,因此选中Static Text控件继续设置,选择"窗口"→Formatting Tools命令,效果如图1.14所示。

在面板中设置Static Text控件垂直和水平都居中对齐,效果如图1.15所示。

单击Center Horizontally和Center Vertically按钮后,控件Static Text设置了理想的对齐方式,效果如图1.16所示。

设置完成后,单击左上角的"保存"按钮 保存这个模板文件。

至此报表的模板文件就创建完成了。

1.2.2  在Web项目中以PDF文件显示出来(1)

虽然模板文件report1.jrxml创建结束了,但此时的模板文件并不能使用,必须编译成report1.jasper文件才可以,所以单击Preview预览按钮生成.jasper文件,预览的效果如图1.17所示。

然后在桌面上即可创建出文件。

虽然创建出了.jasper,但还是有一个非常重要的遗留问题,即:刚才是在iReport中进行预览,并且正确显示出中文,那如果用Adobe Reader软件预览PDF文件呢,是否还能正确显示出中文呢?

选择Preview→PDF Preview命令,效果如图1.18所示。

然后再单击Preview按钮进行预览,如图1.19所示。

利用Adobe Reader软件显示出来后,可以发现中文并没有正确显示,效果如图1.20所示。

那如何解决呢?很简单,让iReport软件支持亚洲字体就可以了。首先是设置Static Text控件的字体属性,效果如图1.21所示。

1.2.2  在Web项目中以PDF文件显示出来(2)

pom.xml文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.rocket.jasper</groupId>
    <artifactId>jasperreport</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <dependencies>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>4.6.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>1.7.5</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.1.5.v20140505</version>
                <configuration>
                    <scanIntervalSeconds>15</scanIntervalSeconds>
                    <defaultsDescriptor>src/main/resources/webdefault.xml</defaultsDescriptor>
                    <webApp>
                        <contextPath>/jsperdemo</contextPath>
                    </webApp>
                    <reload>manual</reload>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

文件目录结构:

需要设置3个属性:Pdf Font name、Pdf Embedded、Pdf Encoding。

设置完成后再添加亚洲字体支持,这里需要两个.jar文件,如图1.22所示。

然后选择"工具"→"选项"命令,打开Classpath选项卡,单击Add JAR按钮添加亚洲字体.jar文件的支持,效果如图1.23所示。

选择两个字体支持.jar文件,效果如图1.24所示。

选择font选项卡然后按图示点击,最后选择需要支持的字体

单击"确定"按钮应用设置。

设置完毕后一定要重启iReport软件,以加载最新的配置,再重新运行PDF即可正确显示出中文,效果如图1.25所示。

以上步骤说明在PDF文件中已正确显示了中文字体,下一步就是创建一个Web项目,然后引入这个.jasper文件,将生成的PDF在IE上显示出来就可以了。

public void doGet(HttpServletRequest request, HttpServletResponse response)  

    throws ServletException, IOException   

    {   try   

        {   ServletOutputStream servletOutputStream=response.getOutputStream();  

            InputStream reportStream = getServletConfig().getServletContext()  

                .getResourceAsStream("report1.jasper");  

            JasperRunManager.runReportToPdfStream(reportStream,  

                servletOutputStream,new HashMap(), new JREmptyDataSource());  

            response.setContentType("application/pdf");  

            servletOutputStream.flush();  

            servletOutputStream.close();  

        }   

        catch (JRException e)   

        {   // TODO Auto-generated catch block  

            e.printStackTrace();  

        }  
 

页面上并没有出现应该显示的"Hello World-你好 世界"文本,而是出现如下异常:

net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font :

pdfFontName   : STSong-Light

pdfEncoding   : UniGB-UCS2-H

isPdfEmbedded : true

为什么呢?因为缺少亚洲字体.jar包文件,将iTextAsian.jar和iTextAsianCmaps.jar文件复制到Web项目的lib文件夹下,重启Tomcat并刷新IE,显示出正确的中文效果,

然后在lib文件夹下面添加ttf字体文件即可.

时间: 2024-10-11 22:04:02

JasperReport4.6生成PDF中文的相关文章

Gitbook 生成 pdf 中文字体错乱问题解决办法

Gitbook 生成 pdf 中文字体错乱问题解决办法 用过 Gitbook 的都知道, Gitbook 会自动生成 pdf 以提供下载, 但十分遗憾的是自动生成的 pdf 对中文的支持并不好, 经常出现字体不一致的现象, 影响阅读, 强迫症更是难以忍受. 示例: 下面针对这一问题提供简单的解决办法: 本地命令行生成 pdf 文件. 当然这种方法有一定局限性, 你需要找到托管在 github 对应的源码仓库且转换过程中不出错. (由于水平有限未能解决在线生成的pdf中文字体错乱问题, 见谅. 也

iText生成pdf中文字体解决方案

相信用过itext的朋友都知道,中文显示一直都是个问题(最新版5.5.7官方也没直接集成中文字体). 当然这样的问题,早就有高手解决了,那就是使用iTextAsian.jar. 但是本文介绍的,不是使用iTextAsian.jar,而是另一种解决方法. 在此之前,需要准备的仅仅为itextpdf-5.x.jar 和一个 ttf格式的中文字体.比如我们常用的宋体simsun.ttf. 我们首先要做的,就是将simsun.ttf集成到我们的项目中: 测试例子: package com.example

使用TCPDF插件生成pdf以及pdf的中文处理

目录(?)[+] 多种多样的pdf开发库 WKHTMLTOPDF 2FPDF 3TCPDF 中文问题 做了这么多年项目,以前只是在别人的项目中了解过PHP生成pdf文件,知道并不难,但是涉及到了pdf开发库,首先介绍pdf库. 多种多样的pdf开发库 1.WKHTMLTOPDF wkhtmltopdf是一个很好的解决方案,基本上可以原样输出html页面中的内容,包括:图片/代码高亮部分css/页头/页尾等.有php和命令行方式,大概思路如下: 1) 先获取所有的远程html,然后生成wkhtml

生成PDF,中文失踪问题

使用itext生成pdf,在linux环境下,中文全部失踪,因为itext要在linux下支持中文字体需要引入itext-asian,并添加一个字体类. 字体类 1 import com.itextpdf.text.Font; 2 import com.itextpdf.text.pdf.BaseFont; 3 import com.itextpdf.tool.xml.XMLWorkerFontProvider; 4 5 public class PdfFont extends XMLWorke

利用ItextPdf、core-renderer-R8 来生成PDF

近期因为工作上的须要,须要做一个简历产品的下载功能,而下载的形式要去为PDF,内容要求为整个简历的内容,并且格式上要求和简历的格式排版时一致的!前期调研.开发,最后測试上线.差点儿相同花了7天的时间.当然,期间主要完毕了主体功能.如今的话,该功能已经相当完好. 以下,我主要是总结下我在这个开发的过程中遇到的问题和总结的心得.希望能帮组有这方面须要的人. 原创文章,转载请注明出处:http://blog.csdn.net/jessonlv 前期调研 前期调研的时候,在网上看了非常多关于转pdf的相

itextsharp利用模板生成pdf文件笔记

iTextSharp是一款开源的PDF操作类库,使用它可以快速的创建PDF文件. 中文参考网站:http://hardrock.cnblogs.com/ http://pdfhome.hope.com.cn/Article.aspx?CID=bf51a5b6-78a5-4fa3-9310-16e04aee8c78&AID=f5fe52dd-8419-4baa-ab1c-ea3f26952132 英文参考网站:http://itext.ugent.be/library/ ·  技术文章(http:

使用ITextSharp生成PDF文件心得

最近公司在做一个项目,需要把数据导出成PDF格式的文件,然后再网上搜了一下发现开源的组件还挺多的,用的比较多的就是itextsharp,itextsharp由java的itext演变而来,并且提供的丰富的功能,能够制作表格.插入图片等,这是官网的下载地址:http://sourceforge.net/projects/itextsharp/,下面就来简单介绍一下使用itextsharp的心得. 首先创建一个winform应用程序,并且添加itextsharp的引用,在按钮的单击事件写上生成pdf

使用PHP生成PDF文档

原文:使用PHP生成PDF文档 实际工作中,我们要使用PHP动态的创建PDF文档,目前有许多开源的PHP创建PDF的类库,今天我给大家来介绍一款优秀的PDF库,它就是TCPDF,TCPDF是一个用于快速生成PDF文件的PHP5函数包.TCPDF基于FPDF进行扩展和改进,增强了实用功能. 使用PHP生成PDF文档 实际工作中,我们要使用PHP动态的创建PDF文档,目前有许多开源的PHP创建PDF的类库,今天我给大家来介绍一款优秀的PDF库,它就是TCPDF,TCPDF是一个用于快速生成PDF文件

使用rst2pdf拓展sphinx生成PDF

当初项目文档是用sphinx写的,一套rst下来make html得到一整个漂亮的在线文档.现在想要将文档导出为离线的handbook pdf,于是找到了rst2pdf这个项目,作为sphinx的拓展,然后加上少量配置即可输出中文PDF.rst2pdf简介rst2pdf是一个将 reStructuredText 转换为 PDF 的工具,具有下列特性:自定义页面布局支持层叠样式表支持内嵌TTF和Type1字体支持几乎所有语言的语法高亮使用reStructuredText作为源文件支持字间距调整安装