Java 将jasper报告导出为XLS格式时未进行单元格扩展
我有一个包含静态字段和文本字段的ireport。数据库由大部分数据组成,对于数据库中的单行数据,有多行数据。因此,当我通过java代码将jasper报表导出为PDF格式时,它会拉伸、细化和打印整个数据,不会丢失任何行,但在导出时对于XLS,它丢失了数据,而且没有发生细胞拉伸。为了更好地理解,我将展示一幅图像 正如您在上面看到的,数据以PDF格式打印得非常清晰。 在上面,即XLS格式的数据被隐藏或在某种意义上丢失。因此,我的问题是当报表导出为XLS格式时,如何在单元格中显示整个数据。我在下面发布java代码Java 将jasper报告导出为XLS格式时未进行单元格扩展,java,jasper-reports,export-to-excel,apache-poi,Java,Jasper Reports,Export To Excel,Apache Poi,我有一个包含静态字段和文本字段的ireport。数据库由大部分数据组成,对于数据库中的单行数据,有多行数据。因此,当我通过java代码将jasper报表导出为PDF格式时,它会拉伸、细化和打印整个数据,不会丢失任何行,但在导出时对于XLS,它丢失了数据,而且没有发生细胞拉伸。为了更好地理解,我将展示一幅图像 正如您在上面看到的,数据以PDF格式打印得非常清晰。 在上面,即XLS格式的数据被隐藏或在某种意义上丢失。因此,我的问题是当报表导出为XLS格式时,如何在单元格中显示整个数据。我在下面发布
ServletContext context = request.getServletContext();
String fullPath = context.getRealPath("/WEB-INF/reports/report5.jrxml");
InputStream input = new FileInputStream(new File(fullPath));
JasperDesign jasperDesign = JRXmlLoader.load(input);
System.out.println("Compiling Report Designs");
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
System.out.println("Creating JasperPrint Object");
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("sql",sql);
JasperPrint jasperPrint = JasperFillManager.fillReport (jasperReport,map,conn);
byte bytes[] = new byte[10000];
//String result = JasperRunManager.runReportToHtmlFile("./usertemplates/test.jasper" , parameters, conn);
JRXlsxExporter exporter = new JRXlsxExporter();
ByteArrayOutputStream xlsReport = new ByteArrayOutputStream();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(xlsReport));
SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
configuration.setWhitePageBackground(true);
configuration.setDetectCellType(true);
configuration.setFontSizeFixEnabled(true);
exporter.setConfiguration(configuration);
exporter.exportReport();
//System.out.println("Size of byte array:"+xlsReport.size());
//bytes = xlsReport.toByteArray();
String fileName = "InvoiceReport.xls";
response.setHeader("Content-Disposition", "inline; filename="
+ fileName);
response.setContentType("application/vnd.ms-excel");
//System.out.println("After JasperPrint = 1");
response.setContentLength(xlsReport.size());
//System.out.println("After JasperPrint = 2");
//xlsReport.close();
//System.out.println("After JasperPrint = 3");
OutputStream outputStream = response.getOutputStream();
System.out.println("After JasperPrint = 4");
xlsReport.writeTo(outputStream);
outputStream.flush();
//outputStream.close();
}
catch(Exception e)
{e.printStackTrace();}
%>
ServletContext=request.getServletContext();
字符串fullPath=context.getRealPath(“/WEB-INF/reports/report5.jrxml”);
InputStream输入=新文件InputStream(新文件(完整路径));
JasperDesign JasperDesign=JRXmlLoader.load(输入);
System.out.println(“编制报告设计”);
JasperReport-JasperReport=JasperCompileManager.compileReport(jasperDesign);
System.out.println(“创建JasperPrint对象”);
HashMap=newHashMap();
map.put(“sql”,sql);
JasperPrint JasperPrint=JasperFillManager.fillReport(康涅狄格州地图jasperReport);
字节字节[]=新字节[10000];
//字符串结果=JasperUnmanager.runReportToHtmlFile(“./usertemplates/test.jasper”,参数,conn);
JRXlsxExporter=新的JRXlsxExporter();
ByteArrayOutputStream xlsReport=新建ByteArrayOutputStream();
exporter.setExporterInput(新的SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(新的SimpleOutputStreamExporterOutput(xlsReport));
SimpleXlsxReportConfiguration=新的SimpleXlsxReportConfiguration();
setWhitePageBackground(true);
configuration.setDetectCellType(true);
setFontSizeFixEnabled(true);
exporter.setConfiguration(配置);
出口商。出口报告();
//System.out.println(“字节数组的大小:+xlsReport.Size());
//bytes=xlsReport.toByteArray();
字符串fileName=“InvoiceReport.xls”;
setHeader(“内容处置”,“内联;文件名=”
+文件名);
response.setContentType(“application/vnd.ms excel”);
//System.out.println(“JasperPrint=1之后”);
response.setContentLength(xlsReport.size());
//System.out.println(“JasperPrint=2之后”);
//xlsReport.close();
//System.out.println(“JasperPrint=3之后”);
OutputStream OutputStream=response.getOutputStream();
System.out.println(“JasperPrint=4之后”);
xlsReport.writeTo(outputStream);
outputStream.flush();
//outputStream.close();
}
捕获(例外e)
{e.printStackTrace();}
%>
下面是jrxml代码
report5.jrxml
<detail>
<band height="20" splitType="Prevent">
<textField isStretchWithOverflow="true">
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="0" y="0" width="13" height="20" isPrintWhenDetailOverflows="true" uuid="24b49d3f-5c78-4a19-a4d2-e2cbff95a40d">
<property name="net.sf.jasperreports.export.xls.auto.fit.row" value="true"/>
<property name="net.sf.jasperreports.export.xls.auto.fit.column" value="true"/>
</reportElement>
<box>
<topPen lineWidth="0.5"/>
<leftPen lineWidth="0.5"/>
<bottomPen lineWidth="0.5"/>
<rightPen lineWidth="0.5"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="Times New Roman" pdfFontName="Times-Roman" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$V{serial number}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true">
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="13" y="0" width="242" height="20" isPrintWhenDetailOverflows="true" uuid="4332ae75-6371-4879-b805-9d07254f0784">
<property name="net.sf.jasperreports.export.xls.auto.fit.row" value="true"/>
<property name="net.sf.jasperreports.export.xls.auto.fit.column" value="true"/>
</reportElement>
<box>
<topPen lineWidth="0.5"/>
<leftPen lineWidth="0.5"/>
<bottomPen lineWidth="0.5"/>
<rightPen lineWidth="0.5"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="Times New Roman" pdfFontName="Times-Roman" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{DescriptionOfGoods}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true">
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="309" y="0" width="86" height="20" isPrintWhenDetailOverflows="true" uuid="54828e8d-bae0-4669-873e-36de8bf54446">
<property name="net.sf.jasperreports.export.xls.auto.fit.row" value="true"/>
<property name="net.sf.jasperreports.export.xls.auto.fit.column" value="true"/>
</reportElement>
<box>
<topPen lineWidth="0.5"/>
<leftPen lineWidth="0.5"/>
<bottomPen lineWidth="0.5"/>
<rightPen lineWidth="0.5"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="Times New Roman" pdfFontName="Times-Roman" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{PerUnitPrice}]]></textFieldExpression>
</textField>
<staticText>
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="395" y="0" width="64" height="20" isPrintWhenDetailOverflows="true" uuid="e02408a1-2bcd-4fb9-94d3-ed0c0c1d8ff6">
<property name="net.sf.jasperreports.export.xls.auto.fit.row" value="true"/>
<property name="net.sf.jasperreports.export.xls.auto.fit.column" value="true"/>
</reportElement>
<box>
<topPen lineWidth="0.5"/>
<leftPen lineWidth="0.5"/>
<bottomPen lineWidth="0.5"/>
<rightPen lineWidth="0.5"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle" markup="none">
<font fontName="Times New Roman" pdfFontName="Times-Roman" isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[Nos]]></text>
</staticText>
<textField isStretchWithOverflow="true">
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="459" y="0" width="96" height="20" isPrintWhenDetailOverflows="true" uuid="00ba44d4-b287-4a29-8bf3-1ad07da760e8">
<property name="net.sf.jasperreports.export.xls.auto.fit.row" value="true"/>
<property name="net.sf.jasperreports.export.xls.auto.fit.column" value="true"/>
</reportElement>
<box>
<topPen lineWidth="0.5"/>
<leftPen lineWidth="0.5"/>
<bottomPen lineWidth="0.5"/>
<rightPen lineWidth="0.5"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="Times New Roman" pdfFontName="Times-Roman" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{Quantity} *$F{PerUnitPrice}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true">
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="255" y="0" width="54" height="20" isPrintWhenDetailOverflows="true" uuid="d74b9bd4-9608-44a7-b46e-55f39ed0c852">
<property name="net.sf.jasperreports.export.xls.auto.fit.row" value="true"/>
<property name="net.sf.jasperreports.export.xls.auto.fit.column" value="true"/>
</reportElement>
<box>
<topPen lineWidth="0.5"/>
<leftPen lineWidth="0.5"/>
<bottomPen lineWidth="0.5"/>
<rightPen lineWidth="0.5"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="Times New Roman" pdfFontName="Times-Roman" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{Quantity}]]></textFieldExpression>
</textField>
</band>
</detail>
> > p>首先,在JaspRead中使用<代码> DestRead < /Cord>方法,考虑更新代码:
JRXlsxExporter exporter = new JRXlsxExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
xporter.setExporterOutput(new SimpleOutputStreamExporterOutput(xlsReport));
SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
configuration.setWhitePageBackground(true);
configuration.setDetectCellType(true);
\\... set all your configuration like above
exporter.setConfiguration(configuration);
exporter.exportReport();
您需要在textField
中的reportElement
上设置属性,其中包含需要位匹配的文本
<property name="net.sf.jasperreports.export.xls.auto.fit.row" value="true"/>
<property name="net.sf.jasperreports.export.xls.auto.fit.column" value="true"/>
用于减小字体大小以使文本适合指定单元格高度的标志
在excel中手动设置列宽
net.sf.jasperreports.export.xls.column.width
,属性的整数值以像素为单位
如果您仍然不满意,请加载工作簿并根据您的喜好进行修改。…我将这两个文件放进去,但它不起作用。我已经按照你说的做了,但还是一样。没有扩展单元格。你可以看到上面的代码,它是编辑的excel中发生了什么?有什么变化吗?没有。在PDF格式中,它正在扩展,正如你可以看到的那样,在XLS格式中,有些正在打印,有些正在隐藏。我无法复制你的示例,通常,您甚至不需要它自己拉伸的属性(如果setFontSizeFixeEnabled不够,请修复它)。。我可以给你一个测试jrxml,看看你是否有同样的问题。我还看到您正在对字体使用不推荐的方法,但我认为这与此没有直接关系。
configuration.setFontSizeFixEnabled(true)