亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

JasperReport動態列

系統 1904 0
Java代碼 復制代碼 ? 收藏代碼
  1. import ?java.io.File; ??
  2. import ?java.io.FileOutputStream; ??
  3. import ?java.io.OutputStream; ??
  4. import ?java.util.ArrayList; ??
  5. import ?java.util.HashMap; ??
  6. import ?java.util.List; ??
  7. import ?java.util.Map; ??
  8. ? ??
  9. import ?javax.print.attribute.HashPrintRequestAttributeSet; ??
  10. import ?javax.print.attribute.HashPrintServiceAttributeSet; ??
  11. import ?javax.print.attribute.PrintRequestAttributeSet; ??
  12. import ?javax.print.attribute.PrintServiceAttributeSet; ??
  13. import ?javax.print.attribute.standard.Copies; ??
  14. import ?javax.print.attribute.standard.MediaSizeName; ??
  15. import ?javax.print.attribute.standard.PrinterName; ??
  16. ? ??
  17. import ?net.sf.jasperreports.engine.JRException; ??
  18. import ?net.sf.jasperreports.engine.JRExporterParameter; ??
  19. import ?net.sf.jasperreports.engine.JRReport; ??
  20. import ?net.sf.jasperreports.engine.JasperCompileManager; ??
  21. import ?net.sf.jasperreports.engine.JasperExportManager; ??
  22. import ?net.sf.jasperreports.engine.JasperFillManager; ??
  23. import ?net.sf.jasperreports.engine.JasperPrint; ??
  24. import ?net.sf.jasperreports.engine.JasperReport; ??
  25. import ?net.sf.jasperreports.engine.base.JRBaseLine; ??
  26. import ?net.sf.jasperreports.engine.base.JRBasePrintText; ??
  27. import ?net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; ??
  28. import ?net.sf.jasperreports.engine.design.JRDesignBand; ??
  29. import ?net.sf.jasperreports.engine.design.JRDesignExpression; ??
  30. import ?net.sf.jasperreports.engine.design.JRDesignField; ??
  31. import ?net.sf.jasperreports.engine.design.JRDesignStaticText; ??
  32. import ?net.sf.jasperreports.engine.design.JRDesignTextField; ??
  33. import ?net.sf.jasperreports.engine.design.JasperDesign; ??
  34. import ?net.sf.jasperreports.engine.export.JRPrintServiceExporter; ??
  35. import ?net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter; ??
  36. import ?net.sf.jasperreports.engine.util.JRSaver; ??
  37. ? ??
  38. import ?org.apache.commons.beanutils.BasicDynaBean; ??
  39. import ?org.apache.commons.beanutils.BasicDynaClass; ??
  40. import ?org.apache.commons.beanutils.DynaBean; ??
  41. import ?org.apache.commons.beanutils.DynaProperty; ??
  42. import ?org.apache.commons.logging.Log; ??
  43. import ?org.apache.commons.logging.LogFactory; ??
  44. ? ??
  45. import ?com.inqgen.iqlis.template.jsf.bean.TemplateDirectoryAdminBean; ??
  46. ? ??
  47. /** ?
  48. ?*?JasperReport?動態列?打印 ?
  49. ?*?@author?hxy ?
  50. ?* ?
  51. ?*/ ??
  52. public ? class ?ReportProcess?{ ??
  53. ? ??
  54. ? private ? static ?Log?logger?=?LogFactory ??
  55. ???.getLog(TemplateDirectoryAdminBean. class ); ??
  56. ? /**?設置字段寬度?*/ ??
  57. ? private ? final ? static ? int ?textWidth?=? 80 ; ??
  58. ? /**?設置字段高度?*/ ??
  59. ? private ? final ? static ? int ?textHeight?=? 20 ; ??
  60. ? /**?coulumnHeader區域字體大小?*/ ??
  61. ? private ? final ? static ? int ?columnHeaderfontSize?=? 14 ; ??
  62. ? /**?detail?區域字體大小?*/ ??
  63. ? private ? final ? static ? int ?fontSize?=? 12 ; ??
  64. ? /**?設置間距?*/ ??
  65. ? private ? final ? static ? int ?X?=? 80 ; ??
  66. ? /**?coulumnHeader區域高度?*/ ??
  67. ? private ? final ? static ? int ?columnHeaderHeight?=? 20 ; ??
  68. ? /**?detail?區域高度?*/ ??
  69. ? private ? final ? static ? int ?detailHeight?=? 20 ; ??
  70. ? /**??*/ ??
  71. ? private ? static ?String?aliasColumn?=? "column" ; ??
  72. ? ??
  73. ? public ? static ? void ?main(String?args[]){ ??
  74. ?? try ?{ ??
  75. ???String[]?columns?=?{ "字段1" ,? "字段2" ,? "字段3" ,? "字段4" }; ??
  76. ???File?f?=? new ?File( "d://test.pdf" ); ??
  77. ???List<Object[]>?list?=? new ?ArrayList<Object[]>(); ??
  78. ???Object[]?obj?=? null ; ??
  79. ??? for ( int ?j= 0 ;j< 50 ;j++){ ??
  80. ????obj?=? new ?Object[columns.length]; ??
  81. ???? for ( int ?i= 0 ;i<columns.length;i++){ ??
  82. ?????obj[i]?=?columns[i]+j+ "," +i; ??
  83. ????} ??
  84. ????list.add(obj); ??
  85. ???} ??
  86. ???OutputStream?out?=? new ?FileOutputStream(f); ??
  87. ???preview(columns,?list,?out); ??
  88. ???out.close(); ??
  89. ???logger.info( "成功~" ); ??
  90. ??}? catch ?(Exception?e)?{ ??
  91. ??? //?TODO?Auto-generated?catch?block ??
  92. ???e.printStackTrace(); ??
  93. ??} ??
  94. ?} ??
  95. ? ??
  96. ? /** ?
  97. ??*?PDF打印 ?
  98. ??*? ?
  99. ??*?@param?headers ?
  100. ??*????????????colimnHeaders ?
  101. ??*?@param?list ?
  102. ??*????????????數據來源 ?
  103. ??*?@param?out ?
  104. ??*????????????輸出流 ?
  105. ??*?@throws?Exception ?
  106. ??*/ ??
  107. ? public ? static ? void ?preview(String?headers[],?List<Object[]>?list, ??
  108. ???OutputStream?out)? throws ?Exception?{ ??
  109. ?? long ?start?=?System.currentTimeMillis(); ??
  110. ??String[]?alias?=?preaseAliasColumnHeaders(headers); ??
  111. ??JasperReport?jp?=?getJasperReport(headers,?alias); ??
  112. ??Map<String,?Object>?parameters?=? new ?HashMap<String,Object>(); ??
  113. ??JasperPrint?jasperPrint?=?JasperFillManager.fillReport(jp,?parameters, ??
  114. ???? new ?JRBeanCollectionDataSource(getBaseList(alias,?phrase(list)))); ??
  115. ??logger.info( "Filling?time?:?" ?+?(System.currentTimeMillis()?-?start)); ??
  116. ??JasperExportManager.exportReportToPdfStream(jasperPrint,?out); ??
  117. ??logger.info( "Printing?time?:?" ?+?(System.currentTimeMillis()?-?start)); ??
  118. ?} ??
  119. ? ??
  120. ? /** ?
  121. ??*?打印機打印報表 ?
  122. ??*? ?
  123. ??*?@param?headers ?
  124. ??*????????????colimnHeaders ?
  125. ??*?@param?list ?
  126. ??*????????????數據來源 ?
  127. ??*?@param?parameters ?
  128. ??*????????????Map?參數 ?
  129. ??*?@param?printerName ?
  130. ??*????????????打印機名稱 ?
  131. ??*??@param?printerName ?
  132. ??*????????????打印機份數 ?
  133. ??*?@param?tempFileName ?
  134. ??*????????????創建報表打印臨時文件的路徑 ?
  135. ??*?@throws?Exception ?
  136. ??*/ ??
  137. ? public ? static ? void ?print(String?headers[],?List<Object[]>?list, ??
  138. ???Map<String,?Object>?parameters,?String?printerName,? int ?copies, ??
  139. ???String?tempFileName)? throws ?Exception?{ ??
  140. ?? long ?start?=?System.currentTimeMillis(); ??
  141. ?? /**?獲取打印報表數據?*/ ??
  142. ??String[]?alias?=?preaseAliasColumnHeaders(headers); ??
  143. ??JasperReport?jp?=?getJasperReport(headers,?alias); ??
  144. ??JasperPrint?jasperPrint?=?JasperFillManager.fillReport(jp,?parameters, ??
  145. ???? new ?JRBeanCollectionDataSource(getBaseList(alias,?phrase(list)))); ??
  146. ?? /**?保存向打印機發送的臨時報表數據?*/ ??
  147. ??JRSaver.saveObject(jasperPrint,?tempFileName); ??
  148. ??logger.info( "Filling?time?:?" ?+?(System.currentTimeMillis()?-?start)); ??
  149. ?? /**?設置打印參數?*/ ??
  150. ??PrintRequestAttributeSet?printRequestAttributeSet?=? new ?HashPrintRequestAttributeSet(); ??
  151. ?? /**?設置A4紙張?*/ ??
  152. ??printRequestAttributeSet.add(MediaSizeName.ISO_A4); ??
  153. ?? /**?設置打印份數?*/ ??
  154. ??printRequestAttributeSet.add( new ?Copies(copies)); ??
  155. ?? /**?設置打印機?*/ ??
  156. ??PrintServiceAttributeSet?printServiceAttributeSet?=? new ?HashPrintServiceAttributeSet(); ??
  157. ?? /**?添加打印機名稱?*/ ??
  158. ?? //?"Epson?Stylus?800?ESC/P//?2" ??
  159. ??printServiceAttributeSet.add( new ?PrinterName(printerName,? null )); ??
  160. ?? /**?打印機對象?*/ ??
  161. ??JRPrintServiceExporter?exporter?=? new ?JRPrintServiceExporter(); ??
  162. ?? /**?向打印機發送的臨時報表數據?*/ ??
  163. ??exporter ??
  164. ????.setParameter(JRExporterParameter.INPUT_FILE_NAME,?tempFileName); ??
  165. ??exporter.setParameter( ??
  166. ????JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, ??
  167. ????printRequestAttributeSet); ??
  168. ??exporter.setParameter( ??
  169. ????JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, ??
  170. ????printServiceAttributeSet); ??
  171. ?? /**?是否彈出打印頁數的提示對話框?*/ ??
  172. ??exporter.setParameter( ??
  173. ????JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, ??
  174. ????Boolean.FALSE); ??
  175. ?? /**?是否彈出打印機設置屬性的提示對話框?*/ ??
  176. ??exporter.setParameter( ??
  177. ????JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, ??
  178. ????Boolean.FALSE); ??
  179. ?? /**?執行打印機打印報表?*/ ??
  180. ??exporter.exportReport(); ??
  181. ??logger.info( "Printing?time?:?" ?+?(System.currentTimeMillis()?-?start)); ??
  182. ?} ??
  183. ? ??
  184. ? public ? static ?List<String[]>?phrase(List<Object[]>?list){ ??
  185. ??List<String[]>?temps?=? new ?ArrayList<String[]>(); ??
  186. ??String?[]s=? null ; ??
  187. ?? for (Object[]?obj?:?list){ ??
  188. ???s?=? new ?String[obj.length]; ??
  189. ??? for ( int ?i?=? 0 ;i<obj.length;i++){ ??
  190. ????s[i]?=?obj[i].toString(); ??
  191. ???} ??
  192. ???temps.add(s); ??
  193. ??} ??
  194. ?? return ?temps; ??
  195. ?} ??
  196. ? ??
  197. ? /** ?
  198. ??*?產生columnHeaders的別名(Headers[]有可能為中文,所以有必要用別名來替換) ?
  199. ??*? ?
  200. ??*?@param?headers ?
  201. ??*?@return ?
  202. ??*/ ??
  203. ? private ? static ?String[]?preaseAliasColumnHeaders(String?headers[])?{ ??
  204. ?? int ?size?=?headers.length; ??
  205. ??String[]?alias?=? new ?String[size]; ??
  206. ?? for ?( int ?i?=? 0 ;?i?<?size;?i++)?{ ??
  207. ???alias[i]?=?aliasColumn?+?i; ??
  208. ??} ??
  209. ?? return ?alias; ??
  210. ?} ??
  211. ? ??
  212. ? /** ?
  213. ??*?產生Template文件 ?
  214. ??*? ?
  215. ??*?@param?headers ?
  216. ??*?@param?alias ?
  217. ??*?@return ?
  218. ??*?@throws?JRException ?
  219. ??*/ ??
  220. ? @SuppressWarnings ( "deprecation" ) ??
  221. ? private ? static ?JasperReport?getJasperReport(String[]?headers, ??
  222. ???String?alias[])? throws ?JRException?{ ??
  223. ??JasperDesign?design?=? new ?JasperDesign(); ??
  224. ? ??
  225. ?? //?name="statistics" ??
  226. ??design.setName( "statistics" ); ??
  227. ?? //?columnCount="1" ??
  228. ?? //?printOrder="Vertical" ??
  229. ??design.setPrintOrder(JRReport.PRINT_ORDER_VERTICAL); ??
  230. ?? //?orientation="Portrait" ??
  231. ??design.setOrientation(JRReport.ORIENTATION_PORTRAIT); ??
  232. ?? //?pageWidth="595" ??
  233. ??design.setPageWidth( 595 ); ??
  234. ?? //?pageHeight="842" ??
  235. ??design.setPageHeight( 842 ); ??
  236. ?? //?columnWidth="535" ??
  237. ??design.setColumnWidth( 535 ); ??
  238. ?? //?columnSpacing="0" ??
  239. ??design.setColumnSpacing( 0 ); ??
  240. ?? //?leftMargin="30" ??
  241. ??design.setLeftMargin( 30 ); ??
  242. ?? //?rightMargin="30" ??
  243. ??design.setRightMargin( 30 ); ??
  244. ?? //?topMargin="20" ??
  245. ??design.setTopMargin( 20 ); ??
  246. ?? //?bottomMargin="20" ??
  247. ??design.setBottomMargin( 20 ); ??
  248. ?? //?whenNoDataType="NoPages" ??
  249. ??design.setWhenNoDataType(JRReport.WHEN_NO_DATA_TYPE_BLANK_PAGE); ??
  250. ?? //?isTitleNewPage="false" ??
  251. ??design.setTitleNewPage( false ); ??
  252. ?? //?isSummaryNewPage="false" ??
  253. ??design.setSummaryNewPage( false ); ??
  254. ? ??
  255. ?? //?JRDesignBand?title?=?new?JRDesignBand(); ??
  256. ?? //?title.setHeight(50); ??
  257. ?? //?JRDesignStaticText?titleText?=?new?JRDesignStaticText(); ??
  258. ?? //?titleText.setText("test?report"); ??
  259. ?? //?titleText.setX(230); ??
  260. ?? //?titleText.setFontSize(20); ??
  261. ?? //?titleText.setHeight(50); ??
  262. ?? //?titleText.setWidth(100); ??
  263. ?? //?title.addElement(titleText); ??
  264. ?? //?design.setTitle(title); ??
  265. ??JRDesignBand?columnHeader?=? new ?JRDesignBand(); ??
  266. ??columnHeader.setHeight(columnHeaderHeight); ??
  267. ? ??
  268. ??JRDesignBand?detail?=? new ?JRDesignBand(); ??
  269. ??detail.setHeight(detailHeight); ??
  270. ? ??
  271. ?? for ?( int ?i?=? 0 ;?i?<?headers.length;?i++)?{ ??
  272. ??? //?add?column?headers ??
  273. ???JRDesignStaticText?staticText?=? new ?JRDesignStaticText(); ??
  274. ???staticText.setText(headers[i]); ??
  275. ???staticText.setFontSize(columnHeaderfontSize); ??
  276. ???staticText.setHeight(textHeight); ??
  277. ???staticText.setWidth(textWidth); ??
  278. ???staticText.setX(X?*?i); ??
  279. ???staticText.setPdfFontName( "MHei-Medium" ); ??
  280. ???staticText.setPdfEmbedded( true ); ??
  281. ???staticText.setPdfEncoding( "UniCNS-UCS2-H" ); ??
  282. ???staticText.setTextAlignment(JRBasePrintText.HORIZONTAL_ALIGN_CENTER); ??
  283. ???staticText.setLeftBorder(JRBaseLine.PEN_1_POINT); ??
  284. ???staticText.setTopBorder(JRBaseLine.PEN_1_POINT); ??
  285. ???staticText.setRightBorder(JRBaseLine.PEN_1_POINT); ??
  286. ???staticText.setBottomBorder(JRBaseLine.PEN_1_POINT); ??
  287. ???columnHeader.addElement(staticText); ??
  288. ? ??
  289. ??? //?define?fields ??
  290. ???JRDesignField?field?=? new ?JRDesignField(); ??
  291. ???field.setName(alias[i]); ??
  292. ???field.setValueClass(String. class ); ??
  293. ???design.addField(field); ??
  294. ? ??
  295. ??? //?add?text?fields?for?displaying?fields ??
  296. ???JRDesignTextField?textField?=? new ?JRDesignTextField(); ??
  297. ???JRDesignExpression?expression?=? new ?JRDesignExpression(); ??
  298. ???expression.setText( "$F{" ?+?alias[i]?+? "}" ); ??
  299. ???expression.setValueClass(String. class ); ??
  300. ???textField.setExpression(expression); ??
  301. ???textField.setFontSize(fontSize); ??
  302. ???textField.setHeight(textHeight); ??
  303. ???textField.setWidth(textWidth); ??
  304. ???textField.setX(X?*?i); ??
  305. ???textField.setPdfFontName( "MHei-Medium" ); ??
  306. ???textField.setPdfEmbedded( true ); ??
  307. ???textField.setPdfEncoding( "UniCNS-UCS2-H" ); ??
  308. ???textField.setTextAlignment(JRBasePrintText.HORIZONTAL_ALIGN_CENTER); ??
  309. ???textField.setLeftBorder(JRBaseLine.PEN_1_POINT); ??
  310. ???textField.setTopBorder(JRBaseLine.PEN_1_POINT); ??
  311. ???textField.setRightBorder(JRBaseLine.PEN_1_POINT); ??
  312. ???textField.setBottomBorder(JRBaseLine.PEN_1_POINT); ??
  313. ???detail.addElement(textField); ??
  314. ??} ??
  315. ??design.setColumnHeader(columnHeader); ??
  316. ??design.setDetail(detail); ??
  317. ? ??
  318. ?? return ?JasperCompileManager.compileReport(design); ??
  319. ?} ??
  320. ? ??
  321. ? /** ?
  322. ??*?利用反射機制,裝拼數據 ?
  323. ??*? ?
  324. ??*?@param?headers ?
  325. ??*?@param?list ?
  326. ??*?@return ?
  327. ??*?@throws?Exception ?
  328. ??*/ ??
  329. ? private ? static ?List<Object>?getBaseList(String[]?headers, ??
  330. ???List<String[]>?list)? throws ?Exception?{ ??
  331. ??List<Object>?result?=? new ?ArrayList<Object>(); ??
  332. ?? int ?length?=?headers.length; ??
  333. ??DynaProperty[]?dynaProps?=? new ?DynaProperty[length]; ??
  334. ?? for ?( int ?i?=? 0 ;?i?<?length;?i++)?{ ??
  335. ???dynaProps[i]?=? new ?DynaProperty(headers[i],?String. class ); ??
  336. ??} ??
  337. ??BasicDynaClass?dynaClass?=? new ?BasicDynaClass( "first" , ??
  338. ????BasicDynaBean. class ,?dynaProps); ??
  339. ?? for ?(Object[]?obj?:?list)?{ ??
  340. ???DynaBean?employee?=?dynaClass.newInstance(); ??
  341. ??? for ?( int ?i?=? 0 ;?i?<?length;?i++)?{ ??
  342. ????employee.set(headers[i],?obj[i]); ??
  343. ???} ??
  344. ???result.add(employee); ??
  345. ??} ??
  346. ?? return ?result; ??
  347. ?} ??
  348. ? ??
  349. }??
      import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.HashPrintServiceAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.PrintServiceAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.PrinterName;
 
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRReport;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.base.JRBaseLine;
import net.sf.jasperreports.engine.base.JRBasePrintText;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JRDesignBand;
import net.sf.jasperreports.engine.design.JRDesignExpression;
import net.sf.jasperreports.engine.design.JRDesignField;
import net.sf.jasperreports.engine.design.JRDesignStaticText;
import net.sf.jasperreports.engine.design.JRDesignTextField;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.export.JRPrintServiceExporter;
import net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter;
import net.sf.jasperreports.engine.util.JRSaver;
 
import org.apache.commons.beanutils.BasicDynaBean;
import org.apache.commons.beanutils.BasicDynaClass;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
import com.inqgen.iqlis.template.jsf.bean.TemplateDirectoryAdminBean;
 
/**
 * JasperReport 動態列 打印
 * @author hxy
 *
 */
public class ReportProcess {
 
 private static Log logger = LogFactory
   .getLog(TemplateDirectoryAdminBean.class);
 /** 設置字段寬度 */
 private final static int textWidth = 80;
 /** 設置字段高度 */
 private final static int textHeight = 20;
 /** coulumnHeader區域字體大小 */
 private final static int columnHeaderfontSize = 14;
 /** detail 區域字體大小 */
 private final static int fontSize = 12;
 /** 設置間距 */
 private final static int X = 80;
 /** coulumnHeader區域高度 */
 private final static int columnHeaderHeight = 20;
 /** detail 區域高度 */
 private final static int detailHeight = 20;
 /**  */
 private static String aliasColumn = "column";
 
 public static void main(String args[]){
  try {
   String[] columns = {"字段1", "字段2", "字段3", "字段4"};
   File f = new File("d://test.pdf");
   List<Object[]> list = new ArrayList<Object[]>();
   Object[] obj = null;
   for(int j=0;j<50;j++){
    obj = new Object[columns.length];
    for(int i=0;i<columns.length;i++){
     obj[i] = columns[i]+j+","+i;
    }
    list.add(obj);
   }
   OutputStream out = new FileOutputStream(f);
   preview(columns, list, out);
   out.close();
   logger.info("成功~");
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 /**
  * PDF打印
  * 
  * @param headers
  *            colimnHeaders
  * @param list
  *            數據來源
  * @param out
  *            輸出流
  * @throws Exception
  */
 public static void preview(String headers[], List<Object[]> list,
   OutputStream out) throws Exception {
  long start = System.currentTimeMillis();
  String[] alias = preaseAliasColumnHeaders(headers);
  JasperReport jp = getJasperReport(headers, alias);
  Map<String, Object> parameters = new HashMap<String,Object>();
  JasperPrint jasperPrint = JasperFillManager.fillReport(jp, parameters,
    new JRBeanCollectionDataSource(getBaseList(alias, phrase(list))));
  logger.info("Filling time : " + (System.currentTimeMillis() - start));
  JasperExportManager.exportReportToPdfStream(jasperPrint, out);
  logger.info("Printing time : " + (System.currentTimeMillis() - start));
 }
 
 /**
  * 打印機打印報表
  * 
  * @param headers
  *            colimnHeaders
  * @param list
  *            數據來源
  * @param parameters
  *            Map 參數
  * @param printerName
  *            打印機名稱
  *  @param printerName
  *            打印機份數
  * @param tempFileName
  *            創建報表打印臨時文件的路徑
  * @throws Exception
  */
 public static void print(String headers[], List<Object[]> list,
   Map<String, Object> parameters, String printerName, int copies,
   String tempFileName) throws Exception {
  long start = System.currentTimeMillis();
  /** 獲取打印報表數據 */
  String[] alias = preaseAliasColumnHeaders(headers);
  JasperReport jp = getJasperReport(headers, alias);
  JasperPrint jasperPrint = JasperFillManager.fillReport(jp, parameters,
    new JRBeanCollectionDataSource(getBaseList(alias, phrase(list))));
  /** 保存向打印機發送的臨時報表數據 */
  JRSaver.saveObject(jasperPrint, tempFileName);
  logger.info("Filling time : " + (System.currentTimeMillis() - start));
  /** 設置打印參數 */
  PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
  /** 設置A4紙張 */
  printRequestAttributeSet.add(MediaSizeName.ISO_A4);
  /** 設置打印份數 */
  printRequestAttributeSet.add(new Copies(copies));
  /** 設置打印機 */
  PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
  /** 添加打印機名稱 */
  // "Epson Stylus 800 ESC/P// 2"
  printServiceAttributeSet.add(new PrinterName(printerName, null));
  /** 打印機對象 */
  JRPrintServiceExporter exporter = new JRPrintServiceExporter();
  /** 向打印機發送的臨時報表數據 */
  exporter
    .setParameter(JRExporterParameter.INPUT_FILE_NAME, tempFileName);
  exporter.setParameter(
    JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET,
    printRequestAttributeSet);
  exporter.setParameter(
    JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET,
    printServiceAttributeSet);
  /** 是否彈出打印頁數的提示對話框 */
  exporter.setParameter(
    JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG,
    Boolean.FALSE);
  /** 是否彈出打印機設置屬性的提示對話框 */
  exporter.setParameter(
    JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG,
    Boolean.FALSE);
  /** 執行打印機打印報表 */
  exporter.exportReport();
  logger.info("Printing time : " + (System.currentTimeMillis() - start));
 }
 
 public static List<String[]> phrase(List<Object[]> list){
  List<String[]> temps = new ArrayList<String[]>();
  String []s= null;
  for(Object[] obj : list){
   s = new String[obj.length];
   for(int i = 0;i<obj.length;i++){
    s[i] = obj[i].toString();
   }
   temps.add(s);
  }
  return temps;
 }
 
 /**
  * 產生columnHeaders的別名(Headers[]有可能為中文,所以有必要用別名來替換)
  * 
  * @param headers
  * @return
  */
 private static String[] preaseAliasColumnHeaders(String headers[]) {
  int size = headers.length;
  String[] alias = new String[size];
  for (int i = 0; i < size; i++) {
   alias[i] = aliasColumn + i;
  }
  return alias;
 }
 
 /**
  * 產生Template文件
  * 
  * @param headers
  * @param alias
  * @return
  * @throws JRException
  */
 @SuppressWarnings("deprecation")
 private static JasperReport getJasperReport(String[] headers,
   String alias[]) throws JRException {
  JasperDesign design = new JasperDesign();
 
  // name="statistics"
  design.setName("statistics");
  // columnCount="1"
  // printOrder="Vertical"
  design.setPrintOrder(JRReport.PRINT_ORDER_VERTICAL);
  // orientation="Portrait"
  design.setOrientation(JRReport.ORIENTATION_PORTRAIT);
  // pageWidth="595"
  design.setPageWidth(595);
  // pageHeight="842"
  design.setPageHeight(842);
  // columnWidth="535"
  design.setColumnWidth(535);
  // columnSpacing="0"
  design.setColumnSpacing(0);
  // leftMargin="30"
  design.setLeftMargin(30);
  // rightMargin="30"
  design.setRightMargin(30);
  // topMargin="20"
  design.setTopMargin(20);
  // bottomMargin="20"
  design.setBottomMargin(20);
  // whenNoDataType="NoPages"
  design.setWhenNoDataType(JRReport.WHEN_NO_DATA_TYPE_BLANK_PAGE);
  // isTitleNewPage="false"
  design.setTitleNewPage(false);
  // isSummaryNewPage="false"
  design.setSummaryNewPage(false);
 
  // JRDesignBand title = new JRDesignBand();
  // title.setHeight(50);
  // JRDesignStaticText titleText = new JRDesignStaticText();
  // titleText.setText("test report");
  // titleText.setX(230);
  // titleText.setFontSize(20);
  // titleText.setHeight(50);
  // titleText.setWidth(100);
  // title.addElement(titleText);
  // design.setTitle(title);
  JRDesignBand columnHeader = new JRDesignBand();
  columnHeader.setHeight(columnHeaderHeight);
 
  JRDesignBand detail = new JRDesignBand();
  detail.setHeight(detailHeight);
 
  for (int i = 0; i < headers.length; i++) {
   // add column headers
   JRDesignStaticText staticText = new JRDesignStaticText();
   staticText.setText(headers[i]);
   staticText.setFontSize(columnHeaderfontSize);
   staticText.setHeight(textHeight);
   staticText.setWidth(textWidth);
   staticText.setX(X * i);
   staticText.setPdfFontName("MHei-Medium");
   staticText.setPdfEmbedded(true);
   staticText.setPdfEncoding("UniCNS-UCS2-H");
   staticText.setTextAlignment(JRBasePrintText.HORIZONTAL_ALIGN_CENTER);
   staticText.setLeftBorder(JRBaseLine.PEN_1_POINT);
   staticText.setTopBorder(JRBaseLine.PEN_1_POINT);
   staticText.setRightBorder(JRBaseLine.PEN_1_POINT);
   staticText.setBottomBorder(JRBaseLine.PEN_1_POINT);
   columnHeader.addElement(staticText);
 
   // define fields
   JRDesignField field = new JRDesignField();
   field.setName(alias[i]);
   field.setValueClass(String.class);
   design.addField(field);
 
   // add text fields for displaying fields
   JRDesignTextField textField = new JRDesignTextField();
   JRDesignExpression expression = new JRDesignExpression();
   expression.setText("$F{" + alias[i] + "}");
   expression.setValueClass(String.class);
   textField.setExpression(expression);
   textField.setFontSize(fontSize);
   textField.setHeight(textHeight);
   textField.setWidth(textWidth);
   textField.setX(X * i);
   textField.setPdfFontName("MHei-Medium");
   textField.setPdfEmbedded(true);
   textField.setPdfEncoding("UniCNS-UCS2-H");
   textField.setTextAlignment(JRBasePrintText.HORIZONTAL_ALIGN_CENTER);
   textField.setLeftBorder(JRBaseLine.PEN_1_POINT);
   textField.setTopBorder(JRBaseLine.PEN_1_POINT);
   textField.setRightBorder(JRBaseLine.PEN_1_POINT);
   textField.setBottomBorder(JRBaseLine.PEN_1_POINT);
   detail.addElement(textField);
  }
  design.setColumnHeader(columnHeader);
  design.setDetail(detail);
 
  return JasperCompileManager.compileReport(design);
 }
 
 /**
  * 利用反射機制,裝拼數據
  * 
  * @param headers
  * @param list
  * @return
  * @throws Exception
  */
 private static List<Object> getBaseList(String[] headers,
   List<String[]> list) throws Exception {
  List<Object> result = new ArrayList<Object>();
  int length = headers.length;
  DynaProperty[] dynaProps = new DynaProperty[length];
  for (int i = 0; i < length; i++) {
   dynaProps[i] = new DynaProperty(headers[i], String.class);
  }
  BasicDynaClass dynaClass = new BasicDynaClass("first",
    BasicDynaBean.class, dynaProps);
  for (Object[] obj : list) {
   DynaBean employee = dynaClass.newInstance();
   for (int i = 0; i < length; i++) {
    employee.set(headers[i], obj[i]);
   }
   result.add(employee);
  }
  return result;
 }
 
}

    

JasperReport動態列


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产成人综合在线视频 | 狠狠操综合 | 激情五月色婷婷在线观看 | 亚洲综合五月天婷 | 日本大臿亚洲香蕉大片 | 91午夜精品亚洲一区二区三区 | 色老头成人免费视频天天综合 | 国产一级毛片外aaaa | 国产精品久久久久亚洲 | 视频国产91 | 丝袜亚洲精品中文字幕一区 | 国产一级毛片免 | 欧美爱爱小视频 | 精品久久久久久久久免费影院 | 97在线免费视频 | 欧美影院一区二区三区 | 天天久久狠狠伊人第一麻豆 | 午夜在线精品不卡国产 | 亚洲国产综合在线 | 久久精品一区二区影院 | 日日干日日干 | 在线观看色| 黄色片网站在线 | 欧美午夜性春 | 欧美日韩理论 | 色综合久久88中文字幕 | 亚洲精品国产自在久久出水 | 色老头网站久久网 | 奇米影视888狠狠狠777九色 | 国产一二三区在线观看 | 自拍偷拍一区 | 成人伊人青草久久综合网 | 99热免费 | 国产精久久一区二区三区 | 天天操夜夜爽 | 中文字幕福利视频 | 欧美一级爱爱视频 | 中文字幕热久久久久久久 | 欧美日韩亚洲无线码在线观看 | 四虎免费在线观看 | 成人免费视频一区二区 |