`
xxpp688
  • 浏览: 14292 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jmesa 导出Excel标题,PDF 中文乱码解决

阅读更多
    Jmesa是ExtremeTable项目重新开发一个的Html表格组件,提供过滤、排序、分页、数据导出等功能。Jmesa非常易于使用,可按自己的需求进行扩展。JMesa需要JDK1.5以上的环境。
   老外的好东西就是不支持中文尤其是java最让程序员头疼:
先看看Excal导出,Excal 导出本身没有问题(poi 本身对中文支持好),但是标题是乱码,这个问题主要是他需要展示在Web 端标题。
首先要下载jmesa 的源码包:http://code.google.com/p/jmesa/downloads/list
现在最新的是3.0。
既然的导出那就先看org.jmesa.view.excel.ExcelViewExporter 这个类
  public ExcelViewExporter(View view, CoreContext coreContext, HttpServletResponse response, String fileName) {
        super(view, coreContext, response, fileName);
    }

这句话是他处理导出文件,看来是父类处理的,OK那就改掉org.jmesa.view.AbstractViewExporter这个抽象类中的fileName,嗯他又交给了fn 响应那就直接改fn 转码:
这句话:
String fn = new String(fileName.getBytes(encoding), encoding);
改为:
String fn = new String(fileName.getBytes("GB2312"), "ISO-8859-1");

还有:
加上这句话:
response.setContentType("application/vnd.ms-excel;charset=utf-8");

如果是版本是2.3那就直接改
org.jmesa.view.excel.ExcelViewExporter这个类

response.setContentType("application/vnd.ms-excel;charset=UTF-8");
fileName = new String(fileName.getBytes(), "ISO-8859-1");//修改

这样的话所有导出的标题乱码问题解决了。

下面看看导出PDF,java 世界导出pdf 的方案常有的有两个:Jasper Report
iText ,其实Jasper Report 是对 iText 的封装,iText 比较原始,对中文支持非常差。哎,恰恰jmesa 用的就是iText 封装的pdf 导出
我们使用jmesa 的pdfp 导出,
如果是2.4之前的jmesa 版本需要修改org.jmesa.view.pdfp.PdfPView
这个类的render()方法,具体修改方式为:
public PdfPTable render() {
    //增加的代码******************
     Font cellFont = null;
     Font headerCellFont = null;
           if(fontName != null && fontEncoding != null){
               try {
                   BaseFont bfChinese = BaseFont.createFont("c:\\windows\\fonts\\simsun.ttc,1",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                   cellFont = new Font(bfChinese, 12F, Font.NORMAL);
                  headerCellFont=new Font(bfChinese, 12F, Font.NORMAL,getHeaderFontColor());                 
               } catch(Exception e) {
                   e.printStackTrace();
               }
           }
           if( null == cellFont){
               cellFont = FontFactory.getFont("Helvetica", 12F, 0);
               headerCellFont = FontFactory.getFont("Helvetica", 12, Font.NORMAL, getHeaderFontColor());
           }
      //***********增加的代码结束
        PdfPTable pdfpTable = new PdfPTable(getTable().getRow().getColumns().size());
        pdfpTable.setSpacingBefore(3);
        Row row = getTable().getRow();
        List<Column> columns = row.getColumns();
        // build table headers
        for (Iterator<Column> iter = columns.iterator(); iter.hasNext();) {
            Column column = iter.next();
	     //修改的代码
            PdfPCell cell = new PdfPCell(new Paragraph(column.getTitle(),headerCellFont));
            cell.setPadding(3.0f);
            cell.setBackgroundColor(getHeaderBackgroundColor());
            pdfpTable.addCell(cell);
        }
        // build table body
        Collection<?> items = getCoreContext().getPageItems();
        int rowcount = 0;
        for (Object item : items) {
            rowcount++;
            columns = row.getColumns();
            for (Iterator<Column> iter = columns.iterator(); iter.hasNext();) {
                Column column = iter.next();
                String property = column.getProperty();
                Object value = column.getCellRenderer().getCellEditor().getValue(item, property, rowcount);
      //修改的代码
                PdfPCell cell = new PdfPCell(new Paragraph(value == null ? "" : String.valueOf(value), cellFont));
		        cell.setPadding(3.0f);
                if (isRowEven(rowcount)) {
                    cell.setBackgroundColor(getEvenCellBackgroundColor());
                } else {
                    cell.setBackgroundColor(getOddCellBackgroundColor());
                }
                pdfpTable.addCell(cell);
            }
        }
        return pdfpTable;
    }


如果jmesa 版本是3.0 那更好了,他已经对font 进行了封装,只不过老外恶心屏蔽了乱码异常,找到getFontWithColor 这个方法,改造他:
BaseFont baseFont = createFont(fontName,fontEncoding,BaseFont.NOT_EMBEDDED);
改为
BaseFont baseFont = createFont("c:\\windows\\fonts\\simsun.ttc,1",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

这个调用的是windows 自身的字体处理机制,别的字体 iText不支持啊,没办法就这么目前就这么办把,如果你是高手那就重写jmesa 导出文件的机制吧 哈哈~。
分享到:
评论

相关推荐

    TOAD导出EXCEL文件时中文乱码解决办法.txt

    ### TOAD导出EXCEL文件时中文乱码解决办法 #### 背景介绍 在数据库管理和开发过程中,经常需要将查询结果导出为Excel文件以便进行进一步的数据分析或分享给其他团队成员。TOAD是一款非常流行的数据库管理工具,...

    解决tableExport导出到excel中文乱码

    解决tableExport导出到excel中文乱码,解决tableExport导出到excel中文乱码,解决tableExport导出到excel中文乱码,解决tableExport导出到excel中文乱码

    tableExport导出pdf 中文 乱码解决

    本文将深入探讨`tableExport`导出PDF时中文乱码的解决方案。 首先,我们要理解乱码的根源。中文字符在计算机中是以特定的编码方式存储的,如UTF-8。如果在导出过程中编码和解码不匹配,就会出现乱码。`tableExport`...

    C#导出Excel 导出PDF

    总结来说,C#通过不同的库和API提供了解决方案来导出Excel和PDF文件。这不仅增强了应用程序的功能,也提高了用户的数据管理和分享能力。在项目开发中,理解并熟练运用这些技术对于提升用户体验和增强系统功能具有...

    ARCGIS10.3属性表导出excel为汉字乱码

    仅支持arcgis10.3在windos系统下,属性表中汉字导出excel为乱码的解决方案。

    arcgis10.2属性表导出excel汉字为乱码解决

    仅支持arcgis10.2在windos系统下,属性表中汉字导出excel为乱码的解决方案。

    ASP.NET导出Excel乱码的终极解决方案

    解决ASP.NET导出Excel乱码的关键在于确保整个流程中的字符编码一致性。以下是一种被证实有效的解决方案: #### 1. 设置正确的HTTP响应编码 在生成Excel文件前,首先需要设置`Response`对象的`ContentType`属性,并...

    Toad中文导出到Excel的乱码解决办法

    本文将详细阐述如何解决Toad在导出到Excel时出现的中文乱码问题。 首先,一个简单且通常有效的解决方案是改变导出格式为文本文件。Toad允许用户将数据导出为多种格式,包括CSV(逗号分隔值)或TXT(纯文本)。这两...

    适用于openproject的PDF导出解决中文乱码的字体

    适用于openproject的PDF导出解决中文乱码的字体,配套文章:https://blog.csdn.net/syrchina/article/details/132669343

    tableExport.js excel乱码解决方法

    自从上次用bootstrap table就一直没有解决导出excel的关题,网上找到的那更改tableExport.js和jquery.base64.js的方法虽然可以正常导出,但中文依旧乱码... 解决方法终归是有的....现将文件分享给大家. 里面有table...

    D:\工作目录\2019普声微信打卡考勤系统\资料\导出excel、pdf插件\tableExport导出excel、pdf解决中文乱码问题.rar

    综上所述,解决tableExport在导出Excel和PDF时的中文乱码问题,主要涉及到正确配置插件、设置HTML页面和服务器的字符编码,以及处理数据源和字体设置。通过这些方法,我们可以确保在跨平台和跨格式的数据交换中,...

    easypoi导入导出excel表格.pdf

    在使用easypoi库进行Java项目的Excel表格导入导出时,开发者需要重视其依赖的引入,理解各注解的用途,以及能够解决使用过程中可能出现的类找不到或者依赖冲突等错误。另外,合理使用文档资源,跟进库的版本更新,也...

    PLSQL导出CSV后中文乱码解决办法

    这个问题通常是由于编码格式不匹配导致的,下面我们将详细探讨如何解决PLSQL导出CSV后中文乱码的问题。 首先,我们需要了解CSV文件本身的特点。CSV是一种通用的、简单的数据交换格式,它使用逗号分隔每一列数据,以...

    解决PD4ML导出pdf中文乱码问题

    解决PD4ML导出PDF中文乱码问题,可以从以下几个方面入手: 1. **设定正确的字符编码**:确保你的HTML文件是以UTF-8编码保存的,并在HTML头部明确指定编码,例如`&lt;meta charset="UTF-8"&gt;`。同时,在使用PD4ML时,也...

    数据导出EXCEL 解决中文名乱码 同时赠由二进制转换成文件(解决中文名乱码)

    本篇文章将详细探讨如何解决在数据导出到Excel时出现的中文乱码问题,并介绍如何通过二进制转换来正确保存和处理含有中文字符的文件。 首先,我们需要理解为什么会出现中文乱码。这通常是由于编码不一致导致的。在...

    导出 Excel 以及转化为 PDF 导出

    本篇将深入探讨如何使用 Java 库 `easypoi` 和 `Spire.XLS.Free` 实现 Excel 的导出及将其转化为 PDF 文件的过程。 首先,`easypoi` 是一个基于 Apache POI 的 Java 框架,专门用于处理 Office 文档,包括 Excel。...

    ArcGIS10.2.1/10.2.2导出dbf用Excel打开乱码的解决方案

    然而,在使用ArcGIS 10.2.1或10.2.2版本时,有时会遇到一个问题:当导出的DBF文件用Excel打开时出现乱码。这个问题主要涉及到字符编码的兼容性问题。 ArcGIS在导出DBF文件时,默认可能使用的是特定的字符集,而...

    导出excel汉字乱码以及GridView分页问题

    总结起来,解决导出Excel汉字乱码问题的关键在于正确设置字符集和编码;而处理GridView分页问题则需要在导出前临时禁用分页功能,并在完成后恢复。通过这些技巧,可以确保用户能够顺利地下载到包含所有数据且无乱码...

    解决方案_EXCEL打开Tableau导出数据存在中文乱码情况的解决方案

    解决方案_EXCEL打开Tableau导出数据存在中文乱码情况的解决方案 在日常工作中,我们经常会遇到从Tableau中导出数据到EXCEL时出现中文乱码的情况。这是因为Tableau导出数据时只能选择CSV文件,而在简体中文环境下,...

    解决fastreport3.18的exportPDF中文乱码方法

    本文将详细介绍如何在Delphi 2007环境下解决FastReport 3.18导出PDF时的中文乱码问题,确保PDF文件能够正确显示中文字符。 首先,我们需要了解FastReport的基本工作原理。FastReport是一款强大的报表设计工具,支持...

Global site tag (gtag.js) - Google Analytics