2016-09-21 59 views
0

我想使用POJO创建pdf文件并使用spring下载它mvc.i获得了Document对象但无法下载该文件。它会给出错误“无法找到转换器”。下载使用spring mvc不使用jsp的文档对象

@RequestMapping(value = "/downloadPDF", method = RequestMethod.GET) 
public Document downloadPDF() throws FileNotFoundException, DocumentException { 
    // create some sample data 
    List<EmployeeInfo> employeeList = new ArrayList<EmployeeInfo>(); 
    employeeList.add(new EmployeeInfo("1", "Anish", "surat")); 
    return downloadPDFService.createPDF(employeeList); 

我该如何下载此文件。 请提供答案

public Document createPDF(List<EmployeeInfo> employeeList) throws FileNotFoundException, DocumentException { 

    Document document = new Document(); 
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("AddTableExample.pdf")); 
     document.open(); 
     PdfPTable table = new PdfPTable(3); 
     table.setWidthPercentage(100); //Width 100% 
     table.setSpacingBefore(10f); //Space before table 
     table.setSpacingAfter(10f); //Space after table 
     PdfPCell cell = new PdfPCell(); 
     cell.setBackgroundColor(BaseColor.BLUE); 
     cell.setPadding(5); 
     Font font = FontFactory.getFont(FontFactory.HELVETICA); 
     font.setColor(BaseColor.WHITE); 
     cell.setPhrase(new Phrase("Id", font)); 
     table.addCell(cell); 

     cell.setPhrase(new Phrase("Name", font)); 
     table.addCell(cell); 

     cell.setPhrase(new Phrase("Address", font)); 
     table.addCell(cell); 
     for (EmployeeInfo aBook : employeeList) { 
      table.addCell(aBook.getEmpId()); 
      table.addCell(aBook.getEmpName()); 
      table.addCell(aBook.getEmpAddress()); 
     } 
     document.add(table); 
     document.close(); 
     writer.close(); 
     return document; 
} 

这是一个观点creator.next的堆栈跟踪

HTTP Status 500 - Request processing failed; nested exception is   java.lang.IllegalArgumentException: 
No converter found for return value of  type: class com.itextpdf.text.Document 
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: No converter found for return value of type: class com.itextpdf.text.Document 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

根源

java.lang.IllegalArgumentException: No converter found for return value of type: class com.itextpdf.text.Document 
org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:178) 
org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:153) 
org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:165) 
org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:80) 
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:126) 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814) 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737) 
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
+0

你能分享完整的堆栈跟踪吗? –

+0

您是否定义了任何PDF视图?下面是[spring mvc pdf](http://www.kswaughs.com/2016/04/spring-mvc-pdf-view-example.html)的完整示例。 – kswaughs

+0

是的,我定义了pdf视图。我将分享完整的代码和堆栈跟踪 –

回答

1

虽然你不想JSP,你仍然可以使用的ModelAndView 。

  1. 更改您的DownloadPDFService如下。

    @Component 
    public class DownloadPDFService extends AbstractPdfView { 
    
    @Override 
    protected void buildPdfDocument(Map<String, Object> model, Document doc, 
        PdfWriter writer, HttpServletRequest req, HttpServletResponse resp) 
        throws Exception { 
    
        // Retrieve your model as below 
        List<EmployeeInfo> employeeList = (List<EmployeeInfo>) model.get("employeeList"); 
    
        // continue your document build logic 
    
        } 
        } 
    
  2. 更改您的控制器,如下

    @RequestMapping(value = "/downloadPDF", method = RequestMethod.GET) 
    public Document downloadPDF() throws FileNotFoundException, DocumentException { 
        // create some sample data 
        List<EmployeeInfo> employeeList = new ArrayList<EmployeeInfo>(); 
        employeeList.add(new EmployeeInfo("1", "Anish", "surat")); 
        return new ModelAndView("pdfView", "employeeList", employeeList); 
    } 
    
  3. 添加以下views.properties

    pdfView.(class)= YourpackageName.DownloadPDFService 
    
  4. 配置为上述 “意见” 属性的新ResourceBundleViewResolver的视图配置。

+0

谢谢@kswaughs它工作。只需将downloadPDF Document的返回类型更改为ModelAndView即可 –