Como fazer uma direção da página de relatório para mudar para “rtl”?

Estou criando um relatório com o JasperReports , usando o arquivo jrxml gerado pelo iReport .

Meu aplicativo é multilíngüe (inglês (LTR) e persa (RTL)). Nas tabelas geradas, quanto à direção do texto, preciso trocar a direção da página inteira. Além disso, uso o recurso de localidade .

Eu pesquisei muito e finalmente encontrei um atributo JRXlsAbstractExporter.PROPERTY_SHEET_DIRECTION, "RTL" mas definir esse atributo em formatos gerados pelo Excel não tem nenhum impacto no meu relatório.

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

Outra coisa que eu tentei é definir isso em parâmetros exportador da seguinte forma:

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

mas definir esse parâmetro não é permitido e recebo erro.
Se você tiver alguma experiência sobre como fazer uma direção de página de relatório (ou em outras palavras espelhar todo o relatório em um local específico) para alterar, por favor, ajude.

Tanto quanto eu procurei não há nenhuma propriedade, você pode usar abaixo da class 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()); } } } } 

Por favor, considere que o JRXlsxExporter não suporta RTL (parece ser um bug na versão 6) e você deve JRXlsExporter

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