问题描述
我使用 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”?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!