| 
			
	
	
		
		
				    
  package
						 net.isone.vm.comm.util; 
  
  import
						 java.awt.Color; 
  import
						 java.awt.font.TextAttribute; 
  import
						 java.io.BufferedOutputStream; 
  import
						 java.io.ByteArrayInputStream; 
  import
						 java.io.FileInputStream; 
  import
						 java.io.IOException; 
  import
						 java.io.InputStream; 
  import
						 java.io.OutputStream; 
  import
						 java.util.ArrayList; 
  import
						 java.util.Collection; 
  import
						 java.util.HashMap; 
  import
						 java.util.Iterator; 
  import
						 java.util.Map; 
  import
						 javax.servlet.http.HttpServletRequest; 
  import
						 javax.servlet.http.HttpServletResponse; 
  import
						 net.sf.jasperreports.engine.JRAbstractExporter; 
  import
						 net.sf.jasperreports.engine.JRBox; 
  import
						 net.sf.jasperreports.engine.JRDataSource; 
  import
						 net.sf.jasperreports.engine.JRElement; 
  import
						 net.sf.jasperreports.engine.JREmptyDataSource; 
  import
						 net.sf.jasperreports.engine.JRException; 
  import
						 net.sf.jasperreports.engine.JRExporterParameter; 
  import
						 net.sf.jasperreports.engine.JRField; 
  import
						 net.sf.jasperreports.engine.JRFont; 
  import
						 net.sf.jasperreports.engine.JRGraphicElement; 
  import
						 net.sf.jasperreports.engine.JRPrintGraphicElement; 
  import
						 net.sf.jasperreports.engine.JRPrintImage; 
  import
						 net.sf.jasperreports.engine.JRRenderable; 
  import
						 net.sf.jasperreports.engine.JasperCompileManager; 
  import
						 net.sf.jasperreports.engine.JasperFillManager; 
  import
						 net.sf.jasperreports.engine.JasperPrint; 
  import
						 net.sf.jasperreports.engine.JasperReport; 
  import
						 net.sf.jasperreports.engine.base.JRBaseFont; 
  import
						 net.sf.jasperreports.engine.base.JRBaseReport; 
  import
						 net.sf.jasperreports.engine.export.FontKey; 
  import
						 net.sf.jasperreports.engine.export.JRCsvExporter; 
  import
						 net.sf.jasperreports.engine.export.JRExporterGridCell; 
  import
						 net.sf.jasperreports.engine.export.JRGridLayout; 
  import
						 net.sf.jasperreports.engine.export.JRHtmlExporter; 
  import
						 net.sf.jasperreports.engine.export.JRPdfExporter; 
  import
						 net.sf.jasperreports.engine.export.JRRtfExporter; 
  import
						 net.sf.jasperreports.engine.export.JRXlsExporter; 
  import
						 net.sf.jasperreports.engine.export.JRXlsExporterParameter; 
  import
						 net.sf.jasperreports.engine.export.JRXmlExporter; 
  import
						 net.sf.jasperreports.engine.export.JRXmlExporterParameter; 
  import
						 net.sf.jasperreports.engine.export.PdfFont; 
  import
						 net.sf.jasperreports.engine.export.JRGridLayout.ExporterElements; 
  import
						 net.sf.jasperreports.engine.util.JRLoader; 
  import
						 org.apache.poi.hssf.usermodel.HSSFClientAnchor; 
  import
						 org.apache.poi.hssf.usermodel.HSSFPatriarch; 
  import
						 org.apache.poi.hssf.usermodel.HSSFWorkbook; 
  import
						 com.lowagie.text.Chunk; 
  import
						 com.lowagie.text.DocumentException; 
  import
						 com.lowagie.text.Font; 
  import
						 com.lowagie.text.FontFactory; 
  import
						 com.lowagie.text.pdf.BaseFont; 
  
   /** */
						
								/** 
  * for using chinese in pdf ,in the jrxml,set 
  * pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true" 
  * 
								@author
								 shen 
  */ 
    public
						 
						class
						 JasperUtil  { 
  static
								 
								private
								 Map reportMap 
								=
								 
								new
								 HashMap(); 
   /** */
								
										/** 
  * using a tempMap to cache the report 
  * 
										@param
										 filePath 
  * 
										@return 
  * 
										@throws
										 JRException 
  */ 
    private
								 
								static
								 JasperReport getReport(String filePath) 
								throws
								 JRException  { 
  JasperReport report 
										=
										 (JasperReport) reportMap.get(filePath); 
   if
										 ((
										true
										) 
										||
										 (report 
										==
										 
										null
										))  { 
  //
												System.setProperty("jasper.reports.compile.class.path", "/WEB-INF/lib/jasperreports-1.2.3.jar"); 
  System.out.println(
												"
												compile
												"
												); 
   /**/
												
														/* 
  String resourceFile = "/report/" + filePath + ".xml"; 
  InputStream input = JasperUtil.class 
  .getResourceAsStream(resourceFile); 
  */ 
  String resourceFile 
												=
												 
												"
												D:/eclipse/workspace/vm/src/report/
												" 
  +
												 filePath 
												+
												 
												"
												.xml
												"
												; 
  InputStream input 
												=
												 
												null
												; 
   try  { 
  input 
														=
														 
														new
														 FileInputStream(resourceFile); 
   }
												
												 
												catch
												 (Exception e)  { 
  e.printStackTrace(); 
  } 
  if
												 (input 
												==
												 
												null
												) 
  System.out.println(resourceFile 
												+
												 
												"
												 not found 
												"
												); 
  report 
												=
												 JasperCompileManager.compileReport(input); 
  reportMap.put(filePath, report); 
  } 
  return
										 report; 
  } 
    /** */
								
										/**
										Convenient exporting generated reports 
  * 
										@param
										 reportFile filepath of the report 
  * 
										@param
										 type pdf|rtf|htm|xml|csv|xls 
  * 
										@param
										 dataSource  Collection of Map 
  * 
										@param
										 param a map include parameters using in report. 
  * 
										@param
										 out the outputStream to output,set null if saving to file. 
  * 
										@param
										 fileName set null if using outputStream 
  * 
										@throws
										 JRException 
  */ 
  public
								 
								static
								 
								void
								 export(String reportFile, String type, 
  Collection dataCol, Map param, OutputStream out, String fileName) 
   throws
								 JRException  { 
  JasperReport report 
										=
										 getReport(reportFile); 
  JRDataSource dataSource 
										=
										 
										new
										 ColDataSource(dataCol); 
  export(report, type, dataSource, param, out, fileName); 
  } 
   
    /** */
								
										/** 
  * for exporting generated reports 
  * example: JasperUtil.export(jasperReport, "pdf", new ColDataSource(col), param, null, "reports/1.pdf"); 
  * 
										@param
										 report 
  * 
										@param
										 type pdf|rtf|htm|xml|csv|xls 
  * 
										@param
										 dataSource  if null auto set JREmptyDataSource 
  * 
										@param
										 param 
  * 
										@param
										 out set null if save to file. 
  * 
										@param
										 fileName set null if using outputStream 
  * 
										@throws
										 JRException 
  */ 
  public
								 
								static
								 
								void
								 export(JasperReport report, String type, 
  JRDataSource dataSource, Map param, OutputStream out, 
   String fileName) 
								throws
								 JRException  { 
  if
										 (dataSource 
										==
										 
										null
										) 
  dataSource 
										=
										 
										new
										 JREmptyDataSource(); 
  JasperPrint jasperPrint 
										=
										 JasperFillManager.fillReport(report, param, 
  dataSource); 
  JRAbstractExporter exporter 
										=
										 
										null
										; 
   if
										 (type.equals(
										"
										pdf
										"
										))  { 
  exporter 
												=
												 
												new
												 AdvPdfExporter(); 
   }
										
										 
										else
										 
										if
										 (type.equals(
										"
										rtf
										"
										))  { 
  exporter 
												=
												 
												new
												 AdvRtfExporter(); 
   }
										
										 
										else
										 
										if
										 (type.equals(
										"
										htm
										"
										))  { 
  exporter 
												=
												 
												new
												 JRHtmlExporter(); 
   }
										
										 
										else
										 
										if
										 (type.equals(
										"
										xml
										"
										))  { 
  exporter 
												=
												 
												new
												 JRXmlExporter(); 
  exporter.setParameter(JRXmlExporterParameter.IS_EMBEDDING_IMAGES, 
  Boolean.TRUE); 
   }
										
										 
										else
										 
										if
										 (type.equals(
										"
										csv
										"
										))  { 
  exporter 
												=
												 
												new
												 JRCsvExporter(); 
  exporter 
  .setParameter(JRExporterParameter.CHARACTER_ENCODING, 
												"
												GBK
												"
												); 
   }
										
										 
										else
										 
										if
										 (type.equals(
										"
										xls
										"
										))  { 
  exporter 
												=
												 
												new
												 AdvXlsExporter(); 
  exporter.setParameter( 
  JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, 
  Boolean.TRUE); 
  exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, 
  Boolean.FALSE); 
  exporter.setParameter( 
  JRXlsExporterParameter.IS_AUTO_DETECT_CELL_TYPE, 
  Boolean.TRUE); 
  exporter.setParameter( 
  JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, 
  Boolean.FALSE); 
  exporter.setParameter( 
  JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, 
  Boolean.TRUE); 
   try  {
														//
														把页数设的非常大,防止分页 
  java.lang.reflect.Field pageHeight; 
  pageHeight 
														=
														 JRBaseReport.
														class
														.getDeclaredField(
														"
														pageHeight
														"
														); 
  pageHeight.setAccessible(
														true
														); 
  pageHeight.setInt(report, Integer.MAX_VALUE); 
   }
												
												 
												catch
												 (Exception e)  { 
  e.printStackTrace(); 
  } 
  } 
    if
										 (exporter 
										!=
										 
										null
										)  { 
  exporter 
  .setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
  if
												 (out 
												!=
												 
												null
												) 
  exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out); 
  else 
  exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, 
  fileName); 
  exporter.exportReport(); 
  } 
  } 
   
   
  
   /** */
								
										/** 
  * help to add Param ,build parameter as t1,t2,t3  
  * 
										@param
										 paramMap the origin map 
  * 
										@param
										 prefix 
  * 
										@param
										 values 
  */ 
    public
								 
								static
								 
								void
								 setParam(Map paramMap, String prefix, String[] values)  { 
   for
										 (
										int
										 i 
										=
										 
										0
										; i 
										<
										 values.length; i
										++
										)  { 
  paramMap.put(prefix 
												+
												 (i 
												+
												 
												1
												), values[i]); 
  } 
  } 
    /** */
								
										/** 
  * build Collection as t1,t2,t3  
  * 
										@param
										 paramMap the origin map 
  * 
										@param
										 prefix 
  * 
										@param
										 values 
  */ 
    public
								 
								static
								 Collection setCol(Collection col, String prefix, String[] keys)  { 
  if
										 (col 
										==
										 
										null
										) 
  return
										 
										null
										; 
  Collection result 
										=
										 
										new
										 ArrayList(); 
   for
										 (Iterator iter 
										=
										 col.iterator(); iter.hasNext();)  { 
  Map line 
												=
												 (Map) iter.next(); 
  Map newLine 
												=
												 
												new
												 HashMap(); 
   for
												 (
												int
												 i 
												=
												 
												0
												; i 
												<
												 keys.length; i
												++
												)  { 
  newLine.put(prefix 
														+
														 (i 
														+
														 
														1
														), line.get(keys[i])); 
  } 
  result.add(newLine); 
  } 
  return
										 result; 
  } 
   
    /** */
								
										/** 
  * 为我们常用的Map in collection的形式所作的adapter 
  * 
										@author
										 shen 
  */ 
    private
								 
								static
								 
								class
								 ColDataSource 
								implements
								 JRDataSource  { 
  Collection col; 
  Iterator   iter; 
  Map        line; 
  
   public
										 ColDataSource(Collection col)  { 
  this
												.col 
												=
												 col; 
  iter 
												=
												 col.iterator(); 
  } 
   
    public
										 Object getFieldValue(JRField jrField) 
										throws
										 JRException  { 
  return
												 line.get(jrField.getName()); 
  } 
   
    public
										 
										boolean
										 next() 
										throws
										 JRException  { 
  boolean
												 hasNext 
												=
												 iter.hasNext(); 
  if
												 (hasNext) 
  line 
												=
												 (Map) iter.next(); 
  return
												 hasNext; 
  } 
  } 
   
    public
								 
								static
								 ColDataSource convertDataSource(Collection col)  { 
  return
										 
										new
										 ColDataSource(col); 
  } 
    /** */
								
										/** 
  * handle httpRequest,using parameter(reportType)=pdf|rtf|htm|xml|csv|xls 
  * 
										@param
										 reportName 
  * 
										@param
										 col 
  * 
										@param
										 param 
  * 
										@param
										 request 
  * 
										@param
										 response 
  * 
										@return 
  * 
										@throws
										 IOException 
  * 
										@throws
										 JRException 
  */ 
  public
								 
								static
								 
								boolean
								 exportInHttp(String reportName, Collection col, 
  Map param, HttpServletRequest request, HttpServletResponse response) 
   throws
								 IOException, JRException  { 
  String reportType 
										=
										 request.getParameter(
										"
										reportType
										"
										); 
  response.reset(); 
  if
										 (reportType 
										==
										 
										null
										) 
  return
										 
										false
										; 
   if
										 (reportType.equals(
										"
										pdf
										"
										))  { 
  response.setContentType(
												"
												application/pdf
												"
												); 
  response.setHeader(
												"
												Content-Disposition
												"
												, 
												"
												attachment;filename=\
												"" 
  +
												 reportName 
												+
												 
												"
												.PDF\
												""
												); 
    }
										
										 
										else
										 
										if
										 (reportType.equals(
										"
										rtf
										"
										))  { 
  response.setContentType(
												"
												application/x-download
												"
												); 
  response.setHeader(
												"
												Content-Disposition
												"
												, 
												"
												attachment;filename=\
												"" 
  +
												 reportName 
												+
												 
												"
												.RTF\
												""
												); 
    }
										
										 
										else
										 
										if
										 (reportType.equals(
										"
										htm
										"
										))  { 
  response.setContentType(
												"
												text/html
												"
												); 
   }
										
										 
										else
										 
										if
										 (reportType.equals(
										"
										xls
										"
										))  { 
  response.setContentType(
												"
												application/vnd.ms-excel
												"
												); 
  response.setHeader(
												"
												Content-Disposition
												"
												, 
												"
												attachment;filename=\
												"" 
  +
												 reportName 
												+
												 
												"
												.XLS\
												""
												); 
    }
										
										 
										else
										 
										if
										 (reportType.equals(
										"
										xml
										"
										))  { 
  response.setContentType(
												"
												application/x-download
												"
												); 
  response.setHeader(
												"
												Content-Disposition
												"
												, 
												"
												attachment;filename=\
												"" 
  +
												 reportName 
												+
												 
												"
												.xml\
												""
												); 
    }
										
										 
										else
										 
										if
										 (reportType.equals(
										"
										csv
										"
										))  { 
  response.setContentType(
												"
												application/x-download
												"
												); 
  response.setHeader(
												"
												Content-Disposition
												"
												, 
												"
												attachment;filename=\
												"" 
  +
												 reportName 
												+
												 
												"
												.csv\
												""
												); 
  }
										
										 
										else 
  return
										 
										false
										; 
  OutputStream out 
										=
										 
										new
										 BufferedOutputStream(response.getOutputStream()); 
  JasperUtil.export(reportName, reportType, col, param, out, 
										null
										); 
  out.flush(); 
  out.close(); 
  return
										 
										true
										; 
  } 
    private
								 
								static
								 
								class
								 AdvPdfExporter 
								extends
								 JRPdfExporter  { 
   protected
										 Chunk getChunk(Map attributes, String text) 
										throws
										 JRException, DocumentException, IOException  { 
  JRFont jrFont 
												=
												 
												new
												 JRBaseFont(attributes); 
  jrFont.setPdfFontName(
												"
												STSong-Light
												"
												); 
  jrFont.setPdfEncoding(
												"
												UniGB-UCS2-H
												"
												); 
  jrFont.setPdfEmbedded(
												true
												); 
  Exception initialException 
												=
												 
												null
												; 
  Color forecolor 
												=
												 (Color) attributes.get(TextAttribute.FOREGROUND); 
  Color backcolor 
												=
												 (Color) attributes.get(TextAttribute.BACKGROUND); 
  Font font 
												=
												 
												null
												; 
  PdfFont pdfFont 
												=
												 
												null
												; 
  FontKey key 
												=
												 
												new
												 FontKey(jrFont.getFontName(), jrFont.isBold(), jrFont.isItalic()); 
  Map fontMap 
												=
												 (Map) parameters.get(JRExporterParameter.FONT_MAP); 
   if
												 (fontMap 
												!=
												 
												null
												 
												&&
												 fontMap.containsKey(key))  { 
  pdfFont 
														=
														 (PdfFont) fontMap.get(key); 
   }
												
												 
												else  { 
  pdfFont 
														=
														 
														new
														 PdfFont(jrFont.getPdfFontName(), jrFont.getPdfEncoding(), jrFont.isPdfEmbedded()); 
  } 
    try  { 
  font 
														=
														 FontFactory.getFont(pdfFont.getPdfFontName(), pdfFont.getPdfEncoding(), pdfFont.isPdfEmbedded(), jrFont.getFontSize(), 
  (pdfFont.isPdfSimulatedBold() 
														?
														 Font.BOLD : 
														0
														) 
														|
														 (pdfFont.isPdfSimulatedItalic() 
														?
														 Font.ITALIC : 
														0
														) 
														|
														 (jrFont.isUnderline() 
														?
														 Font.UNDERLINE : 
														0
														) 
  |
														 (jrFont.isStrikeThrough() 
														?
														 Font.STRIKETHRU : 
														0
														), forecolor); 
   if
														 (font.getBaseFont() 
														==
														 
														null
														 
														&&
														 font.family() 
														==
														 Font.UNDEFINED)  { 
  font 
																=
																 
																null
																; 
  } 
    }
												
												 
												catch
												 (Exception e)  { 
  initialException 
														=
														 e; 
  } 
    if
												 (font 
												==
												 
												null
												)  { 
  byte
														[] bytes 
														=
														 
														null
														; 
   try  { 
  bytes 
																=
																 JRLoader.loadBytesFromLocation(pdfFont.getPdfFontName(), classLoader, urlHandlerFactory); 
   }
														
														 
														catch
														 (JRException e)  { 
  throw
																 
																new
																 JRException(
																"
																Could not load the following font : 
																"
																 
																+
																 
																"
																\npdfFontName   : 
																"
																 
																+
																 pdfFont.getPdfFontName() 
																+
																 
																"
																\npdfEncoding   : 
																" 
  +
																 pdfFont.getPdfEncoding() 
																+
																 
																"
																\nisPdfEmbedded : 
																"
																 
																+
																 pdfFont.isPdfEmbedded(), initialException); 
  } 
  BaseFont baseFont 
														=
														 BaseFont.createFont(pdfFont.getPdfFontName(), pdfFont.getPdfEncoding(), pdfFont.isPdfEmbedded(), 
														true
														, bytes, 
														null
														); 
  font 
														=
														 
														new
														 Font(baseFont, jrFont.getFontSize(), ((pdfFont.isPdfSimulatedBold()) 
														?
														 Font.BOLD : 
														0
														) 
														|
														 ((pdfFont.isPdfSimulatedItalic()) 
														?
														 Font.ITALIC : 
														0
														) 
  |
														 (jrFont.isUnderline() 
														?
														 Font.UNDERLINE : 
														0
														) 
														|
														 (jrFont.isStrikeThrough() 
														?
														 Font.STRIKETHRU : 
														0
														), forecolor); 
  } 
  Chunk chunk 
												=
												 
												new
												 Chunk(text, font); 
   if
												 (backcolor 
												!=
												 
												null
												)  { 
  chunk.setBackground(backcolor); 
  } 
  return
												 chunk; 
  } 
  } 
    /** */
								
										/** 
  * advanced XlsExporter to support image 
  * 
										@author
										 shen 
  * 
  */ 
    private
								 
								static
								 
								class
								 AdvXlsExporter 
								extends
								 JRXlsExporter  { 
  private
										 HSSFPatriarch patriarch
										=
										 
										null
										; 
   protected
										 ExporterElements getExporterElements()  { 
  return
												 JRGridLayout.UNIVERSAL_EXPORTER; 
  } 
    protected
										 
										void
										 exportImage(JRPrintImage printImage, JRExporterGridCell gridCell, 
										int
										 colIndex, 
										int
										 rowIndex)  { 
   try  { 
  int
														 x1 
														=
														 
														0
														; 
  int
														 x2 
														=
														 
														0
														; 
  int
														 y1 
														=
														 
														0
														; 
  int
														 y2 
														=
														 
														0
														; 
  int
														 col1 
														=
														 colIndex; 
  int
														 col2 
														=
														 col1 
														+
														 gridCell.colSpan; 
  int
														 row1 
														=
														 rowIndex; 
  int
														 row2 
														=
														 row1 
														+
														 gridCell.rowSpan; 
  if
														 (patriarch 
														==
														null
														)   patriarch 
														=
														 sheet.createDrawingPatriarch(); 
  HSSFClientAnchor Anchor 
														=
														 
														new
														 HSSFClientAnchor(x1, y1, x2, y2, (
														short
														) col1, row1, (
														short
														) col2, row2); 
  Anchor.setAnchorType(
														0
														); 
  int
														 imageIndex 
														=
														 workbook.addPicture(printImage.getRenderer().getImageData(), HSSFWorkbook.PICTURE_TYPE_JPEG); 
  //
														System.out.println("image set "+imageIndex); 
  patriarch.createPicture(Anchor, imageIndex); 
   
   }
												
												 
												catch
												 (Exception e)  { 
  e.printStackTrace(); 
  } 
   
  } 
  } 
    /** */
								
										/** 
  * advanced XlsExporter to support image 
  * 
										@author
										 shen 
  * 
  */ 
    private
								 
								static
								 
								class
								 AdvRtfExporter 
								extends
								 JRRtfExporter  { 
  private
										 
										int
										 zorder 
										=
										 
										1
										; 
  
   protected
										 
										void
										 exportImage(JRPrintImage printImage, 
										int
										 offsetx, 
										int
										 offsety) 
										throws
										 JRException, IOException  { 
  int
												 x 
												=
												 twip(printImage.getX() 
												+
												 globalOffsetX); 
  int
												 y 
												=
												 twip(printImage.getY() 
												+
												 globalOffsetY); 
  int
												 width 
												=
												 twip(printImage.getWidth()); 
  int
												 height 
												=
												 twip(printImage.getHeight()); 
   if
												 (printImage.getMode() 
												==
												 JRElement.MODE_OPAQUE)  { 
  startGraphic(
														"
														dprect
														"
														, x, y, width, height); 
  finishGraphic(JRGraphicElement.PEN_NONE, printImage.getForecolor(), printImage.getBackcolor(), 
														1
														); 
  } 
  int
												 leftPadding 
												=
												 printImage.getLeftPadding(); 
  int
												 topPadding 
												=
												 printImage.getTopPadding(); 
  int
												 rightPadding 
												=
												 printImage.getRightPadding(); 
  int
												 bottomPadding 
												=
												 printImage.getBottomPadding(); 
  int
												 availableImageWidth 
												=
												 printImage.getWidth() 
												-
												 leftPadding 
												-
												 rightPadding; 
  availableImageWidth 
												=
												 availableImageWidth 
												<
												 
												0
												 
												?
												 
												0
												 : availableImageWidth; 
  int
												 availableImageHeight 
												=
												 printImage.getHeight() 
												-
												 topPadding 
												-
												 bottomPadding; 
  availableImageHeight 
												=
												 availableImageHeight 
												<
												 
												0
												 
												?
												 
												0
												 : availableImageHeight; 
  JRRenderable renderer 
												=
												 printImage.getRenderer(); 
   if
												 (availableImageWidth 
												>
												 
												0
												 
												&&
												 availableImageHeight 
												>
												 
												0
												 
												&&
												 renderer 
												!=
												 
												null
												)  { 
  writer.write(
														"
														{\\*\\do\\dobxpage\\dobypage
														"
														); 
  writer.write(
														"
														\\dodhgt
														"
														 
														+
														 (zorder
														++
														)); 
  writer.write(
														"
														\\dptxbx
														"
														); 
  writer.write(
														"
														\\dpx
														"
														 
														+
														 twip(printImage.getX() 
														+
														 leftPadding 
														+
														 globalOffsetX 
														+
														 offsetx)); 
  writer.write(
														"
														\\dpxsize
														"
														 
														+
														 twip(availableImageWidth)); 
  writer.write(
														"
														\\dpy
														"
														 
														+
														 twip(printImage.getY() 
														+
														 topPadding 
														+
														 globalOffsetY 
														+
														 offsety)); 
  writer.write(
														"
														\\dpysize
														"
														 
														+
														 twip(availableImageHeight)); 
  writer.write(
														"
														\\dpfillpat0
														"
														); 
  writer.write(
														"
														\\dplinehollow
														"
														); 
  writer.write(
														"
														{\\dptxbxtext 
														"
														); 
  writer.write(
														"
														{\\pict\\jpegblip
														"
														); 
  writer.write(
														"
														\\picwgoal
														"
														); 
  writer.write(twip(availableImageWidth) 
														+
														 
														""
														); 
  writer.write(
														"
														\\pichgoal
														"
														); 
  writer.write(twip(availableImageHeight) 
														+
														 
														""
														); 
  writer.write(
														"
														\n
														"
														); 
  //
														 ByteArrayInputStream bais = new 
  //
														 ByteArrayInputStream(JRImageLoader.loadImageDataFromAWTImage(bi)); 
  ByteArrayInputStream bais 
														=
														 
														new
														 ByteArrayInputStream(printImage.getRenderer().getImageData()); 
  int
														 count 
														=
														 
														0
														; 
  int
														 current 
														=
														 
														0
														; 
   while
														 ((current 
														=
														 bais.read()) 
														!=
														 
														-
														1
														)  { 
  String helperStr 
																=
																 Integer.toHexString(current); 
   if
																 (helperStr.length() 
																<
																 
																2
																)  { 
  helperStr 
																		=
																		 
																		"
																		0
																		"
																		 
																		+
																		 helperStr; 
  } 
  writer.write(helperStr); 
  count
																++
																; 
   if
																 (count 
																==
																 
																64
																)  { 
  writer.write(
																		"
																		\n
																		"
																		); 
  count 
																		=
																		 
																		0
																		; 
  } 
  } 
  writer.write(
														"
														\n}}}\n
														"
														); 
  } 
  if
												 (printImage.getTopBorder() 
												==
												 JRGraphicElement.PEN_NONE 
												&&
												 printImage.getLeftBorder() 
												==
												 JRGraphicElement.PEN_NONE 
   &&
												 printImage.getBottomBorder() 
												==
												 JRGraphicElement.PEN_NONE 
												&&
												 printImage.getRightBorder() 
												==
												 JRGraphicElement.PEN_NONE)  { 
   if
														 (printImage.getPen() 
														!=
														 JRGraphicElement.PEN_NONE)  { 
  startGraphic(
																"
																dprect
																"
																, x, y, width, height); 
  finishGraphic(printImage); 
  } 
    }
												
												 
												else  { 
  exportBox(printImage, x, y, width, height, printImage.getForecolor(), printImage.getBackcolor()); 
  } 
  } 
    private
										 
										int
										 twip(
										int
										 points)  { 
  return
												 points 
												*
												 
												20
												; 
  } 
    private
										 
										void
										 startGraphic(String type, 
										int
										 x, 
										int
										 y, 
										int
										 w, 
										int
										 h) 
										throws
										 IOException  { 
  writer.write(
												"
												{\\*\\do\\dobxpage\\dobypage
												"
												); 
  writer.write(
												"
												\\dodhgt
												"
												 
												+
												 (zorder
												++
												)); 
  writer.write(
												"
												\\
												"
												 
												+
												 type); 
  writer.write(
												"
												\\dpx
												"
												 
												+
												 x); 
  writer.write(
												"
												\\dpy
												"
												 
												+
												 y); 
  writer.write(
												"
												\\dpxsize
												"
												 
												+
												 w); 
  writer.write(
												"
												\\dpysize
												"
												 
												+
												 h); 
  } 
    private
										 
										void
										 finishGraphic(JRPrintGraphicElement element) 
										throws
										 IOException  { 
  int
												 mode 
												=
												 
												0
												; 
   if
												 (element.getMode() 
												==
												 JRElement.MODE_OPAQUE)  { 
  mode 
														=
														 
														1
														; 
  } 
  finishGraphic(element.getPen(), element.getForecolor(), element.getBackcolor(), mode); 
  } 
    private
										 
										void
										 finishGraphic(
										byte
										 pen, Color fg, Color bg, 
										int
										 fillPattern) 
										throws
										 IOException  { 
   switch
												 (pen)  { 
  case
														 JRGraphicElement.PEN_THIN: 
  writer.write(
														"
														\\dplinew10
														"
														); 
  break
														; 
  case
														 JRGraphicElement.PEN_1_POINT: 
  writer.write(
														"
														\\dplinew20
														"
														); 
  break
														; 
  case
														 JRGraphicElement.PEN_2_POINT: 
  writer.write(
														"
														\\dplinew40
														"
														); 
  break
														; 
  case
														 JRGraphicElement.PEN_4_POINT: 
  writer.write(
														"
														\\dplinew80
														"
														); 
  break
														; 
  case
														 JRGraphicElement.PEN_DOTTED: 
  writer.write(
														"
														\\dplinedash
														"
														); 
  break
														; 
  case
														 JRGraphicElement.PEN_NONE: 
  writer.write(
														"
														\\dplinehollow
														"
														); 
  break
														; 
  default
														: 
  writer.write(
														"
														\\dplinew20
														"
														); 
  break
														; 
  } 
  writer.write(
												"
												\\dplinecor
												"
												 
												+
												 fg.getRed()); 
  writer.write(
												"
												\\dplinecob
												"
												 
												+
												 fg.getBlue()); 
  writer.write(
												"
												\\dplinecog
												"
												 
												+
												 fg.getGreen()); 
  writer.write(
												"
												\\dpfillfgcr
												"
												 
												+
												 fg.getRed()); 
  writer.write(
												"
												\\dplinefgcb
												"
												 
												+
												 fg.getBlue()); 
  writer.write(
												"
												\\dpfillfgcg
												"
												 
												+
												 fg.getGreen()); 
  writer.write(
												"
												\\dpfillbgcr
												"
												 
												+
												 bg.getRed()); 
  writer.write(
												"
												\\dpfillbgcg
												"
												 
												+
												 bg.getGreen()); 
  writer.write(
												"
												\\dpfillbgcb
												"
												 
												+
												 bg.getBlue()); 
  writer.write(
												"
												\\dpfillpat
												"
												 
												+
												 fillPattern); 
  writer.write(
												"
												}\n
												"
												); 
  } 
    private
										 
										void
										 exportBox(JRBox box, 
										int
										 x, 
										int
										 y, 
										int
										 width, 
										int
										 height, Color fg, Color bg) 
										throws
										 IOException  { 
   if
												 (box.getTopBorder() 
												!=
												 JRGraphicElement.PEN_NONE)  { 
  Color bc 
														=
														 box.getTopBorderColor(); 
  byte
														 pen 
														=
														 box.getTopBorder(); 
  int
														 a 
														=
														 getAdjustment(box.getTopBorder()); 
   if
														 (bc 
														==
														 
														null
														)  { 
  bc 
																=
																 fg; 
  } 
  startGraphic(
														"
														dpline
														"
														, x, y 
														+
														 a, width, 
														0
														); 
  finishGraphic(pen, bc, bg, 
														1
														); 
  } 
    if
												 (box.getLeftBorder() 
												!=
												 JRGraphicElement.PEN_NONE)  { 
  Color bc 
														=
														 box.getLeftBorderColor(); 
  byte
														 pen 
														=
														 box.getLeftBorder(); 
  int
														 a 
														=
														 getAdjustment(pen); 
  if
														 (bc 
														==
														 
														null
														) 
  bc 
														=
														 fg; 
  startGraphic(
														"
														dpline
														"
														, x 
														+
														 a, y, 
														0
														, height); 
  finishGraphic(pen, bc, bg, 
														1
														); 
  } 
    if
												 (box.getBottomBorder() 
												!=
												 JRGraphicElement.PEN_NONE)  { 
  Color bc 
														=
														 box.getBottomBorderColor(); 
  byte
														 pen 
														=
														 box.getBottomBorder(); 
  int
														 a 
														=
														 getAdjustment(pen); 
  if
														 (bc 
														==
														 
														null
														) 
  bc 
														=
														 fg; 
  startGraphic(
														"
														dpline
														"
														, x, y 
														+
														 height 
														-
														 a, width, 
														0
														); 
  finishGraphic(pen, bc, bg, 
														1
														); 
  } 
    if
												 (box.getRightBorder() 
												!=
												 JRGraphicElement.PEN_NONE)  { 
  Color bc 
														=
														 box.getRightBorderColor(); 
  byte
														 pen 
														=
														 box.getRightBorder(); 
  int
														 a 
														=
														 getAdjustment(pen); 
  if
														 (bc 
														==
														 
														null
														) 
  bc 
														=
														 fg; 
  startGraphic(
														"
														dpline
														"
														, x 
														+
														 width 
														-
														 a, y, 
														0
														, height); 
  finishGraphic(pen, bc, bg, 
														1
														); 
  } 
  } 
  } 
   
    public
								 
								static
								 
								void
								 main(String[] args) 
								throws
								 Exception  { 
  System.out.println(
										"
										go
										"
										); 
  Map param 
										=
										 
										new
										 HashMap(); 
   JasperUtil.setParam(param, 
										"
										t
										"
										, 
										new
										 String[]  { 
												"
												第一
												"
												, 
												"
												aa
												"
												, 
												"
												害虫
												"
												 }
										
										); 
  Collection col 
										=
										 
										new
										 ArrayList(); 
     { 
  Map map 
												=
												 
												new
												 HashMap(); 
  map.put(
												"
												f1
												"
												, 
												"
												123
												"
												); 
  map.put(
												"
												f2
												"
												, 
												"
												345
												"
												); 
  map.put(
												"
												f3
												"
												, 
												"
												最后
												"
												); 
  col.add(map); 
  } 
      { 
  Map map 
												=
												 
												new
												 HashMap(); 
  map.put(
												"
												f1
												"
												, 
												"
												111
												"
												); 
  map.put(
												"
												f2
												"
												, 
												"
												222
												"
												); 
  map.put(
												"
												f3
												"
												, 
												"
												333
												"
												); 
  col.add(map); 
  } 
      { 
  Map map 
												=
												 
												new
												 HashMap(); 
  map.put(
												"
												f1
												"
												, 
												"
												123123
												"
												); 
  map.put(
												"
												f2
												"
												, 
												"
												123213
												"
												); 
  map.put(
												"
												f3
												"
												, 
												"
												最后
												"
												); 
  col.add(map); 
  } 
  String reportFile 
										=
										 
										"
										report1
										"
										; 
  export(reportFile,  
										"
										pdf
										"
										, col, param, 
										null
										, 
										"
										d:/1.pdf
										"
										); 
  export(reportFile, 
										"
										htm
										"
										, col, param, 
										null
										, 
										"
										d:/2.htm
										"
										); 
  export(reportFile, 
										"
										rtf
										"
										, col, param, 
										null
										, 
										"
										d:/3.rtf
										"
										); 
  export(reportFile, 
										"
										csv
										"
										, col, param, 
										null
										, 
										"
										d:/4.csv
										"
										); 
  export(reportFile, 
										"
										xls
										"
										, col, param, 
										null
										, 
										"
										d:/5.xls
										"
										); 
  System.out.println(
										"
										ok
										"
										); 
  } 
  } 
   
   这个星期研究了一下jasper,为了一些具体问题,比如编译,比如中文问题和图像输出,忙活了一阵子 在j2ee下,需要 jasperreports-1.2.3.jar commons-javaflow.jar itext-1.3.1.jar iTextAsian.jar jdt-compiler-3.1.1.jar poi-3.0-alpha1-20050704.jar jdt那个包,如果用jrxml就需要否则会乱报错,如果直接用jasper可能是不要的 解决问题后,成果代码见上,相信对同志们很有用。 之中getReport这个方法,务必重写。 主要特性: pdf中文,不用特意指定字体,统一在代码中指定 excel支持图形输出 rtf(word)原图形输出非常模糊,改进
	   |