如何使报告页面方向更改为“rtl”? [英] How to make a report page direction to change to "rtl"?

查看:188
本文介绍了如何使报告页面方向更改为“rtl”?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 iReport 生成的jrxml文件,使用 JasperReports 创建报告。

I am creating a report with JasperReports, using iReport generated jrxml file.

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

My application is multilingual, (English (LTR) and Persian (RTL)). In tables generated, regarding to the direction of text I need to swap the whole page direction. Plus I use locale feature.

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

I googled a lot and finally found an attribute JRXlsAbstractExporter.PROPERTY_SHEET_DIRECTION, "RTL" but setting this attribute in excel generated formats don't have any impact on my report.

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

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

another thing I tried is setting this in exporter parameters as following:

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

但不允许设置此参数,我收到错误。

如果您有任何关于如何制作报表页面方向(或者换句话说,在特定区域设置中镜像整个报表)的经验,请更改请帮助。

but setting this parameter is not allowed and I get error.
If you have any experience for how to make a report page direction (or in other words mirror the whole report in specific locale) to change please help.

推荐答案

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

As far as I searched there is no property, you can use below util class:

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

Please consider that the JRXlsxExporter does not support RTL (seems to be a bug in version 6) and you must JRXlsExporter

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

这篇关于如何使报告页面方向更改为“rtl”?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆