私は jasper-reports 4.5.0,spring 3.0.5RELEASE 統合を使用してレポートを生成しています。今までは html、csv、pdf 形式で生成されていましたが、クライアントはワード形式 (.doc 形式) のレポートも望んでいます。この .doc 形式でレポートを生成します。
質問する
23215 次
3 に答える
4
将来の読者のために setParameter は非推奨であり、次のようなエクスポーターを使用する必要があります。
JasperReports 6.1.0
import java.io.File;
//import net.sf.jasperreports.engine.export.JRRtfExporter;
//import net.sf.jasperreports.engine.export.ooxml.JRDocxExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleWriterExporterOutput;
File sourceFile = new File("*.jasper");
JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".docx|.rtf");
//JRDocxExporter exporter = new JRDocxExporter();
//JRRtfExporter exporter = new JRRtfExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
exporter.exportReport();
于 2015-05-27T15:21:15.863 に答える
3
JRDocxExporter に基づいて、AbstractJasperReportsSingleFormatViewを拡張できます。
public class CustomJasperWordReportsSingleFormatView extends AbstractJasperReportsSingleFormatView {
@Override
protected void renderReport(JasperPrint populatedReport, Map<String, Object> model, HttpServletResponse response) throws Exception {
super.renderReport(populatedReport, model, response);
}
@Override
protected JRExporter createExporter() {
return new JRDocxExporter();
}
@Override
protected boolean useWriter() {
// TODO Auto-generated method stub
return false;
}
}
そしてあなたはHttpServletResponseWrapper@Controller
で応答をラップして、ジャスパーレポートによって生成されたバイト配列を取得します:
public byte[] getByteArrayWordReport(String jasperViewName, ModelMap model, HttpServletResponse httpServletResponse,HttpServletRequest httpServletRequest) throws Exception{
View view=xmlViewResolver.resolveViewName(jasperViewName, null);
if(view==null){
log.error("Report not found:"+jasperViewName);
}
final ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
HttpServletResponseWrapper httpServletResponseWrapper=new HttpServletResponseWrapper(httpServletResponse){
@Override
public PrintWriter getWriter() throws IOException {
return new PrintWriter(byteArrayOutputStream);
}
public ServletOutputStream getOutputStream() throws IOException {
return new ServletOutputStream() {
@Override
public void write(int b) throws IOException {
byteArrayOutputStream.write(b);
}
};
}
@Override
public void addCookie(Cookie cookie) {
}
@Override
public void addDateHeader(String name, long date) {
}
@Override
public void setHeader(String name, String value) {
}
@Override
public void addHeader(String name, String value) {
}
@Override
public void setIntHeader(String name, int value) {
}
@Override
public void addIntHeader(String name, int value) {
}
@Override
public void setContentLength(int len) {
}
@Override
public void setContentType(String type) {
}
};
view.render(model, httpServletRequest, httpServletResponseWrapper);
return byteArrayOutputStream.toByteArray();
}
その後、Word ドキュメントを表すバイト配列が得られます。
于 2012-11-16T12:47:39.670 に答える
3
アレックスの提案に基づいてコード例を提供するだけです:
JRRtfExporter を使用するには:
protected byte[] exportReportToRtf(JasperPrint jasperPrint) throws JRException{
JRRtfExporter exporter = new JRRtfExporter();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
exporter.exportReport();
return baos.toByteArray();
}
私たちJRDocxExporterと同様に:
protected byte[] exportReportToRtf(JasperPrint jasperPrint) throws JRException{
JRDocxExporter exporter = new JRDocxExporter();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
exporter.exportReport();
return baos.toByteArray();
}
コメントに基づいて編集:
以下は、Sprig Fraework が提供する JaperReport ビューのリストです。
doc 形式専用のものはないようです。おそらく、 AbstractJasperReportsSingleFormatViewを拡張して独自に作成する必要があります。メソッドを実装するだけでよいようですcreateExporter()
。
protected JRExporter createExporter(){
return new JRDocxExporter();
}
于 2012-06-07T14:13:28.243 に答える