ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 如何使报表页面方向更改为“rtl”?

2019-07-08 22:02:20  阅读:230  来源: 互联网

标签:java internationalization jasper-reports


我正在使用iReport生成的jrxml文件创建JasperReports报告.

我的应用程序是多语言的(英语(LTR)和波斯语(RTL)).在生成的表格中,关于文本的方向,我需要交换整个页面方向.另外我使用区域设置功能.

我google了很多,最后找到了一个属性JRXlsAbstractExporter.PROPERTY_SHEET_DIRECTION,“RTL”但是以excel生成的格式设置这个属性对我的报告没有任何影响.

    params.put(JRXlsAbstractExporter.PROPERTY_SHEET_DIRECTION, "RTL");
    JasperPrint jasperPrint = JasperFillManager.fillReport(report,params, 
           dataSource != null ? new JRMapArrayDataSource(dataSource) : new JREmptyDataSource());    

我尝试的另一件事是在导出器参数中设置如下:

    JRExporter exporter = new JRXlsxExporter();
    exporter.setParameter(JRXlsAbstractExporter.PROPERTY_SHEET_DIRECTION, "RTL");
    exporter.exportReport();

但是不允许设置此参数,我收到错误.
如果您有任何关于如何制作报告页面方向的经验(或者换句话说,在特定区域设置中镜像整个报告),请改变请帮助.

解决方法:

据我搜索没有属性,你可以使用下面的util类:

package foo.bar.utils.export;

import java.util.Iterator;
import java.util.List;

import net.sf.jasperreports.engine.JRPrintElement;
import net.sf.jasperreports.engine.JRPrintFrame;
import net.sf.jasperreports.engine.JRPrintPage;
import net.sf.jasperreports.engine.JasperPrint;

/**
 * Report utilities
 * Please refer to: http://community.jaspersoft.com/questions/523041/right-left-arabic-reports
 * There is another solution at: http://jaspermirror.sourceforge.net/
 * which is not used here
 * @author AFattahi
 *
 */
public class ReportUtils {

    private ReportUtils(){

    }
    /**
     * mirror each page layout
     * @param print
     */
    public static void mirrorLayout(JasperPrint print) {
        int pageWidth = print.getPageWidth();
        for (Object element : print.getPages()) {
            JRPrintPage page = (JRPrintPage) element;
            mirrorLayout(page.getElements(), pageWidth);
        }
    }

    /**
     * mirror a list of elements
     * @param print
     */
    protected static void mirrorLayout(List<?> elements, int totalWidth) {
        for (Iterator<?> it = elements.iterator(); it.hasNext();) {
            JRPrintElement element = (JRPrintElement) it.next();
            int mirrorX = totalWidth - element.getX() - element.getWidth();
            element.setX(mirrorX);

            if (element instanceof JRPrintFrame) {
                JRPrintFrame frame = (JRPrintFrame) element;
                mirrorLayout(frame.getElements(), frame.getWidth());
            }
        }
    }
}

请考虑JRXlsxExporter不支持RTL(似乎是版本6中的错误),您必须使用JRXlsExporter

exporter = new JRXlsExporter();
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(out));
SimpleXlsReportConfiguration xlsReportConfig = new SimpleXlsReportConfiguration();
xlsReportConfig.setSheetDirection(RunDirectionEnum.RTL);
exporter.setConfiguration(xlsReportConfig);

标签:java,internationalization,jasper-reports
来源: https://codeday.me/bug/20190708/1406295.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有