我们正在使用jasper版本6.我们可以导出到EXCEL(XLS和XLSX)。
以下代码适用于XLS并创建RTL表:
exporter = new JRXlsExporter();
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(out));
SimpleXlsReportConfiguration xlsReportConfig = new SimpleXlsReportConfiguration();
xlsReportConfig.setSheetDirection(RunDirectionEnum.RTL);
exporter.setConfiguration(xlsReportConfig);
但是,当我尝试使用相同的代码制作XLSX文件时,工作表方向不会更改为RTL:
exporter = new JRXlsxExporter();
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(out));
SimpleXlsxReportConfiguration xlsxReportConfiguration = new SimpleXlsxReportConfiguration();
xlsxReportConfiguration.setSheetDirection(RunDirectionEnum.RTL);
exporter.setConfiguration(xlsxReportConfiguration);
答案 0 :(得分:1)
使用 v 6.1.1 测试的 jasper报告库中的错误,在导出后添加以下代码,它将正常工作(poi库包含在jasper报告中,因此POI中没有错误......)。
ng-include
答案 1 :(得分:0)
我在最新版本的JasperReports 6.1中在XLSX中生成报告时出现问题,但此代码适用于我:
首先,我配置了jasper print
<thing_list>
之后,我为生成的报告配置输出,在我的情况下,报告将由ByteArrayOutputStream在内存中管理:
JRSwapFile swapFile = new JRSwapFile(".", 1024, 1024);
JRVirtualizer virtualizer = new JRSwapFileVirtualizer(100, swapFile, true);
parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);
JasperPrint print = JasperFillManager.fillReport(stream, parameters, dbConnection);
List<JasperPrint> prints = new ArrayList<JasperPrint>();
prints.add(print);
我创建一个JRXlsxExporter实例,用于生成扩展名为.xslx的文件,并放置打印机和输出:
ByteArrayOutputStream output = new ByteArrayOutputStream();
下一步是为导出器创建报告配置,当我把这段代码放到我的报告中时!所以你必须使用它!:
JRXlsxExporter exporter = new JRXlsxExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(prints));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(output));
最后,生成报告并关闭outputStream:
SimpleXlsxReportConfiguration xlsxReportConfiguration = new SimpleXlsxReportConfiguration();
xlsxReportConfiguration.setSheetDirection(RunDirectionEnum.RTL);
exporter.setConfiguration(xlsxReportConfiguration);
我希望这对你有用
答案 2 :(得分:0)
我最终使用了下面的代码(它很昂贵但有效),在 https://community.jaspersoft.com/questions/523041/right-left-arabic-reports
中提到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());
}
}
}
}
像这样使用:
Exporter exporter;
ByteArrayOutputStream out = new ByteArrayOutputStream();
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(out));
JasperPrint jasperPrint = JasperFillManager.fillReport(report,
params, dataSource != null ? new JRMapArrayDataSource(
dataSource) : new JREmptyDataSource());
ReportUtils.mirrorLayout(jasperPrint);
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.exportReport();
return out.toByteArray();