2016-06-07 70 views
0

我不会浪费我和你的时间来暴露我的猜测,我的推论,我的假设......
所以,“ex abrupto”(前提:我使用流以便生产与iText的PDF文件):
这是代码: 在行动使用iText的java.io.IOException

public String getPDF() { 
    PdfPratDTO dto = (PdfPratDTO) sexxion.get("pdfprdto"); 
    String numprat = dto.getNumPrat(); 
    String intest = dto.getIntest(); 
    ArrayList<PratDettAvanzDTO> avzs = dto.getDetavz(); 

    ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 

    Document document = new Document(); 
    try { 
     PdfWriter writer = PdfWriter.getInstance(document, buffer); 

     document.open(); 

      StaticElements.addMetaData(document, numprat, "P"); 

      try { 
       BodyElements.addTitle(writer, document, numprat, intest, "P"); 
      } 
      catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 

      BodyElements.addContents(document, avzs, "P"); 

      document.close(); 
     } 
     catch (DocumentException e) { 
      e.printStackTrace(); 
     } 

     setInputStream(new ByteArrayInputStream(buffer.toByteArray())); 

    return SUCCESS; 
} 

没有问题致电

StaticElements.addMetaData(document, numprat, "P"); 

,甚至没有要求

BodyElements.addTitle(writer, document, numprat, intest, "P"); 

文档打印正确地示出这些元件,但是当我添加

BodyElements.addContents(document, avzs, "P"); 

@SuppressWarnings("unchecked") 
public static void addContents(Document document, Object data, String type) throws DocumentException { 

    Paragraph header = new Paragraph(); 
    StaticElements.addEmptyLine(header, 3); 

    if (type.equals("U")) 
     createTable(header, (UserDTO) data); 
    else if (type.equals("P")) 
     createTablePrat(header, (ArrayList<PratDettAvanzDTO>) data); 
    document.add(header); 
} 

private static void createTablePrat(Paragraph header, List<PratDettAvanzDTO> avzs) throws BadElementException { 
    float[] columnWidths = {8,33,5,10,9,9,5,7,14}; 
    PdfPTable table = new PdfPTable(columnWidths); 

    PdfPCell c1 = new PdfPCell(new Phrase("Date")); 
    c1.setFixedHeight(21f); 
    c1.setBackgroundColor(new BaseColor(221, 232, 250)); 
    c1.setHorizontalAlignment(Element.ALIGN_CENTER); 
    table.addCell(c1); 

    c1 = new PdfPCell(new Phrase("Description")); 
    table.addCell(c1); 

    c1 = new PdfPCell(new Phrase("St. Pr. Code")); 
    table.addCell(c1); 

    etc.etc. 

    c1 = new PdfPCell(new Phrase("Purpose")); 
    table.addCell(c1); 
    table.setHeaderRows(1); 


    System.out.println("-> createTablePrat.size()=" + avzs.size()); 
    //TODO 

    header.add(table); 
} 

文档仍然打印,但仍像之前即没有这个新元素和,在最好的情况下(最好...只是看)控制台输出仍然挂起,在大多数情况下显示以下错误

07/06 12:35:10| ERROR [http-apr-10080-exec-9] (CommonsLogger.java:38) - Exception occurred during processing request: java.io.IOException: APR error: -730053 
org.apache.catalina.connector.ClientAbortException: java.io.IOException: APR error: -730053 
     at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:353) 
     at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:317) 
     at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:110) 
     at org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:301) 
     at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186) 
     at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:367) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:271) 
     at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) 
     at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) 
     at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:544) 
     at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
     at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
     at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) 
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) 
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668) 
     at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2463) 
     at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2452) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.io.IOException: APR error: -730053 
     at org.apache.coyote.http11.InternalAprOutputBuffer.writeToSocket(InternalAprOutputBuffer.java:291) 
     at org.apache.coyote.http11.InternalAprOutputBuffer.writeToSocket(InternalAprOutputBuffer.java:244) 
     at org.apache.coyote.http11.InternalAprOutputBuffer.flushBuffer(InternalAprOutputBuffer.java:213) 
     at org.apache.coyote.http11.AbstractOutputBuffer.flush(AbstractOutputBuffer.java:305) 
     at org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:765) 
     at org.apache.coyote.Response.action(Response.java:179) 
     at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:349) 
     ... 70 more 

我真的没有最简单的想法,即使是因为如果在addContent(...)方法中,我调用CreateTable()方法,它与第一个方法相同,除了列数,标题标签和检索数据的事实只需要一个dto而不是一个dtos列表,一切都很好用!

Thanx!

回答

0

通过完成createTablePrat(...)方法(我通过List和(奇迹般的)作品上的真循环引入了“// TODO”)解决了(有些偶然)。
谁解释了原因?
也许“有罪”是table.setHeaderRows(1);创造了一种暂停?