首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jasper生成word格式的报告

使用jasper生成word格式的报告
EN

Stack Overflow用户
提问于 2012-06-07 15:30:43
回答 3查看 23.1K关注 0票数 4

我正在使用jasper-reports 4.5.0,春季3.0.5RELEASE集成来生成现在我在html,csv,pdf formats.But生成的reports.Till我的客户想要word格式的报告也( .doc格式).How我可以生成这种.doc格式的报告。

EN

回答 3

Stack Overflow用户

发布于 2015-05-27 23:21:16

对于将来的读者,setParameter将被弃用,您应该像这样使用导出器:

代码语言:javascript
复制
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();
票数 4
EN

Stack Overflow用户

发布于 2012-06-07 22:13:28

仅提供基于Alex建议的示例代码:

要使用JRRtfExporter:

代码语言:javascript
复制
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类似:

代码语言:javascript
复制
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();
}

基于注释进行编辑:

Here是Sprig提供的JaperReport视图的列表。

他们似乎没有专门针对doc格式的文档。您可能需要通过扩展AbstractJasperReportsSingleFormatView来编写自己的代码。看起来你只需要实现createExporter()方法。

代码语言:javascript
复制
protected JRExporter createExporter(){
     return new JRDocxExporter();
}
票数 3
EN

Stack Overflow用户

发布于 2012-11-16 20:47:40

基于JRDocxExporter,您可以扩展AbstractJasperReportsSingleFormatView

代码语言:javascript
复制
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;
}

}

在您的@Controller中,使用HttpServletResponseWrapper包装响应,以获得jasper报告生成的字节数组:

代码语言:javascript
复制
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文档的字节数组。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10927483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档