﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-charlielogic-最新评论</title><link>http://www.blogjava.net/charlielogic/CommentsRSS.aspx</link><description>charlielogic</description><language>zh-cn</language><pubDate>Mon, 03 Dec 2007 07:34:50 GMT</pubDate><lastBuildDate>Mon, 03 Dec 2007 07:34:50 GMT</lastBuildDate><generator>cnblogs</generator><item><title>re: null和字符串的恩怨</title><link>http://www.blogjava.net/charlielogic/archive/2007/11/28/163169.html#163704</link><dc:creator>charlie</dc:creator><author>charlie</author><pubDate>Wed, 28 Nov 2007 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/charlielogic/archive/2007/11/28/163169.html#163704</guid><description><![CDATA[//method  for pdf <br>	<br>	 private void generatePDF(<br>			    HttpSession session, String fileName, DbHandler dh)<br>			    throws SQLException, ClassNotFoundException{<br><br>		 //得到pdf文件名<br>		 <br>		 <br>			    try{<br>			    	//设置响应<br>			      HttpServletResponse response = getResponse();<br>			      response.setContentType(&quot;application/pdf&quot;);<br>			      response.setHeader(&quot;Content-Disposition&quot;, &quot;attachment; filename=&quot; + fileName);<br>			     <br>			      //新建pdf文档 ,添加许可<br>			      Document document = new Document();<br>			      document.addLicense(GeneralConstants.PDF_LICENSE_KEY);<br><br>			      //调用方法得到页面宽度<br>			      int pageWidth = this.getPDFPageWidth(session);<br>			    //调用方法得到页面实例 <br>			      Page page = this.getPDFPageInstance(pageWidth);<br><br>			      <br>			      //设置相关作者 标题等信息<br>			      HashMap navBarAccessMap = (HashMap)session.getAttribute(UserCompanyWorker.NAV_ACCESS_BEAN);<br>			      String programName = &quot;L5M Internal&quot; + &quot;\n&quot;;<br>			      programName += this.getPDFNavBarTitle(navBarAccessMap, CATEGORY_KEY) + &quot; - &quot;;<br>			      programName += this.getPDFNavBarTitle(navBarAccessMap, PROGRAM_KEY);<br>			      String userName = DataUtil.getUserFullName(dh, getUserBean().getUserId());<br>			      document.setAuthor(userName);<br>			      document.setTitle(programName);<br>			      <br>			      <br>                  //新建模板  <br>			      Template template = new Template();<br>			      this.setupPDFDocumentTemplate(template, page);<br>			      document.setTemplate(template);<br><br>			      this.setupPDFHeader(session, page, programName, userName);<br>			     <br>			      //是否设置了页脚 Footer<br>			      boolean hasSetupFooter = false;<br><br>			      <br>			      <br>			      Table table = this.getPDFTable(session, page);<br>			      page.getElements().add(table);<br>			      document.getPages().add(page);<br>			      Table tableOF = table.getOverflowRows();<br>			      while (tableOF != null){<br>			        Page pageOF = this.getPDFPageInstance(pageWidth);<br>			        pageOF.getElements().add(tableOF);<br>			        float offsetY = tableOF.getVisibleHeight() + 65; // last table +<br>																		// table start (used<br>																		// for footer)<br>			        document.getPages().add(pageOF);<br>			        tableOF = tableOF.getOverflowRows();<br>			        if (tableOF == null){<br>			          this.setupPDFFooter(session, pageOF, offsetY);<br>			          hasSetupFooter = true;<br>			        }<br>			      }<br><br>			      if (!hasSetupFooter){<br>			        float offsetY = table.getVisibleHeight() + 65; // last table + table<br>																	// start<br>			        this.setupPDFFooter(session, page, offsetY);<br>			      }<br>			      document.draw(response.getOutputStream());<br>			    }<br>			    catch (Exception e){<br>			      e.printStackTrace();<br>			    }<br>			  }<br><br>///ok bar title<br>	  private String getPDFNavBarTitle(HashMap navBarAccessMap, String code){<br>	    String title = &quot;No Title&quot;;<br>	    if (navBarAccessMap.containsKey(code)){<br>	      NavigationItemBean itemBean = (NavigationItemBean)navBarAccessMap.get(code);<br>	      if (itemBean.getDisplayName() != null) title = itemBean.getDisplayName();<br>	    }<br>	    return title;<br>	  }<br><br>	  <br>	  // ok  返回页面宽度<br>	  // normal ~50; large ~150<br>	  private int getPDFPageWidth(HttpSession session){<br>	    int pageWidth = 0;<br>	    DataTable dataTable = (DataTable)session.getAttribute(&quot;dataTable&quot;);<br>	    if (dataTable == null) return 0;<br><br>	    DataNode[][] headerNodes = dataTable.getHeaderNodes();<br><br>	    pageWidth += 150;<br>	    pageWidth += 20;<br>	    pageWidth += 50;<br><br>	    int levelCount = headerNodes.length;<br>	    int lastLevelIndex = levelCount - 1;<br>	    for (int i = 0; i &lt; headerNodes[lastLevelIndex].length; i++){<br>	      pageWidth += 50;<br>	    }<br><br>	    return pageWidth + 100;<br>	  }<br><br>	 // ok 返回page<br>	  private Page getPDFPageInstance(int pageWidth){<br>	    Page page = new Page(PageSize.LETTER, PageOrientation.LANDSCAPE);<br>	    if (pageWidth &gt; page.getDimensions().getWidth()){<br>	      page.getDimensions().setWidth(pageWidth);<br>	    }<br>	    return page;<br>	  }<br>///ok 新建模板<br>	  private void setupPDFDocumentTemplate(Template template, Page page)<br>	    throws FileNotFoundException{<br>	    float x, y, w, h;<br><br>	    String token = &quot;%%CP(1)%% of %%TP(1)%%&quot;;<br>	    x = page.getDimensions().body.getWidth() - 100;<br>	    y = page.getDimensions().body.getHeight() - 25;<br>	    w = 100;<br>	    h = 25;<br>	    PageNumberingLabel labelPN = new PageNumberingLabel(<br>	      token, x, y, w, h,<br>	      com.cete.dynamicpdf.Font.getHelvetica(), 12, TextAlign.RIGHT);<br>	    template.getElements().add(labelPN);<br>	  }<br><br>	  <br>	  ///ok 设置pdf 头<br>	  private void setupPDFHeader(HttpSession session, Page page, String programName, String userName)<br>	    throws FileNotFoundException{<br><br>	    Label labelProgram = new Label(<br>	      programName, 0, 0, page.getDimensions().body.getWidth() / 2, 100,<br>	      com.cete.dynamicpdf.Font.getHelveticaBold(), 12, TextAlign.LEFT);<br><br>	    String imgPath = getAppHomeDir() + &quot;/image/&quot;;<br>	    Image imageLogo = new Image(<br>	      imgPath + &quot;Inter-ViewButton_01.PNG&quot;,<br>	      page.getDimensions().body.getWidth(), 0);<br>	    imageLogo.setAlign(Align.RIGHT);<br><br>	    Calendar cal = Calendar.getInstance();<br>	    java.util.Date date = cal.getTime();<br>	    SimpleDateFormat sdf = new SimpleDateFormat(&quot;M/d/yyyy&quot;);<br><br>	    String strRunningInfo = this.getRunningTimeInfo(session);<br><br>	    String strUserDate = &quot;  &quot; + userName + &quot;\n  &quot; + sdf.format(date) + &quot;\t\t\t&quot; + strRunningInfo;<br>	    Label labelUserDate = new Label(<br>	      strUserDate, 0, 28, page.getDimensions().body.getWidth(), 100,<br>	      com.cete.dynamicpdf.Font.getHelvetica(), 10, TextAlign.LEFT);<br><br>	    page.getElements().add(labelProgram);<br>	    page.getElements().add(imageLogo);<br>	    page.getElements().add(labelUserDate);<br>	  }<br><br>	  <br>	  // ok  设置页脚<br>	  private void setupPDFFooter(HttpSession session, Page page, float offsetY){<br><br>	    String strDB = &quot;DB Provider: DB106  Equipment&quot;;<br>	    Label labelDB = new Label(<br>	      strDB, 0, offsetY, 400, 100,<br>	      com.cete.dynamicpdf.Font.getHelvetica(), 10, TextAlign.LEFT);<br><br><br>	    page.getElements().add(labelDB);<br>	   <br>	  }<br><br>	  private Table getPDFTable(HttpSession session, Page page){<br>		    Table table = new Table(<br>		      0, 55, page.getDimensions().body.getWidth(),<br>		      page.getDimensions().body.getHeight() - 80,<br>		      com.cete.dynamicpdf.Font.getHelvetica(), 12);<br>		    table.setBorderWidth(1);<br>		    table.setRepeatColumnHeaderCount(4);<br><br>		    this.setupPDFTableColumns(session, table);<br>		    this.setupPDFTableHeader(session, table);<br>		    this.setupPDFTableBody(session, table);<br>		    return table;<br>		  }<br><br>		  private void setupPDFTableColumns(HttpSession session, Table table){<br>		    boolean[] isDisplayingHeader = (boolean[])session.getAttribute(&quot;invoiceHeaderColumnControl&quot;);<br>		    if (isDisplayingHeader == null) return;<br><br>		    ColumnList colList = table.getColumns();<br>		    for (int i = 0; i &lt; isDisplayingHeader.length; i++){<br>		      if (isDisplayingHeader[i]){<br>		        if (i == 2) colList.add(80);<br>		        else if (i == 4) colList.add(65);<br>		        else if (i == 14) colList.add(65);<br>		        else if (i == 15) colList.add(65);<br>		        else colList.add(65);<br>		      }<br>		    }<br>		  }<br><br>		  private void setupPDFTableHeader(HttpSession session, Table table){<br>		    boolean[] isDisplayingHeader = (boolean[])session.getAttribute(&quot;invoiceHeaderColumnControl&quot;);<br><br>		    RowList rowList = table.getRows();<br>		    Row row1 = rowList.add(com.cete.dynamicpdf.Font.getHelveticaBold(), PDF_FONT_SIZE);<br>		    CellList cellList1 = row1.getCellList();<br><br>		    for(int i=0; i&lt;INVOICE_HEADER_COLUMNS.length; i++){<br>		      if (isDisplayingHeader[i]) cellList1.add(INVOICE_HEADER_COLUMNS[i]);<br>		    }<br><br>		    for (int i = 0; i &lt; cellList1.getCount(); i++){<br>		      Cell cell = cellList1.getCell(i);<br>		      cell.setAlign(CellAlign.CENTER);<br>		      cell.setVAlign(CellVAlign.CENTER);<br>		    }<br>		  }<br><br>		  private void setupPDFTableBody(HttpSession session, Table table){<br>		    boolean[] isDisplayingHeader = (boolean[])session.getAttribute(&quot;invoiceHeaderColumnControl&quot;);<br>		    List resultList = (List)session.getAttribute(&quot;displayList&quot;);<br>		    if (isDisplayingHeader == null) return;<br>		    if (resultList == null) return;<br><br>		    RowList rowList = table.getRows();<br>		    for (int i = 0; i &lt; resultList.size(); i++){<br>		      DataGroupBean bean = (DataGroupBean)resultList.get(i);<br><br>		      Row row  = rowList.add(com.cete.dynamicpdf.Font.getHelvetica(), PDF_FONT_SIZE);<br>		      CellList cellList = row.getCellList();<br>		      RgbColor rowBackground = null;<br>		      if ((i % 2) == 0) rowBackground = new RgbColor(245, 245, 220);<br>		      else rowBackground = new RgbColor(255, 255, 255);<br>		      row.setBackgroundcolor(rowBackground);<br><br>		      for (int j = 0; j &lt; bean.getNumFields(); j++){<br>		        if (isDisplayingHeader[j]){<br>		          Object obj = bean.getField(j);<br>		          String strValue = (obj != null) ? (bean.getField(j)).toString() : &quot;&quot;;<br>		          Cell cell = cellList.add(strValue);<br>		          cell.setFontSize(PDF_FONT_SIZE);<br>		        }<br>		      }<br><br>		      for (int k = 0; k &lt; cellList.getCount(); k++){<br>		        Cell cell = cellList.getCell(k);<br>		        cell.setAlign(CellAlign.CENTER);<br>		        cell.setVAlign(CellVAlign.CENTER);<br>		      }<br>		    }<br>		  }<br><br>		  private String getRunningTimeInfo(HttpSession session){<br>		    Long longStart = (Long)session.getAttribute(CountInfoUtil.RUNNING_START_TIME);<br>		    long valueStart = (longStart != null) ? longStart.longValue() : 0;<br>		    Long longEnd = (Long)session.getAttribute(CountInfoUtil.RUNNING_END_TIME);<br>		    long valueEnd = (longEnd != null) ? longEnd.longValue() : 0;<br><br>		    Calendar cal = Calendar.getInstance();<br>		    cal.setTimeInMillis(valueStart);<br>		    SimpleDateFormat formatter2 = new SimpleDateFormat(&quot;HH:mm:ss a&quot;);<br>		    long timeDiff = (valueEnd - valueStart) / 1000;<br>		    long hour = timeDiff / 3600;<br>		    long minute = timeDiff % 3600 / 60;<br>		    long second = timeDiff % 60;<br><br>		    StringBuffer sb = new StringBuffer();<br>		    sb.append(&quot;Running Starts at &quot;).append(formatter2.format(cal.getTime()));<br>		    sb.append(&quot; Duration: &quot;);<br>		    sb.append(hour).append(&quot;h:&quot;);<br>		    sb.append(minute).append(&quot;m:&quot;);<br>		    sb.append(second).append(&quot;s&quot;);<br>		    return sb.toString();<br>		  }<br>	<br>}// class<img src ="http://www.blogjava.net/charlielogic/aggbug/163704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/charlielogic/" target="_blank">charlie</a> 2007-11-28 15:19 <a href="http://www.blogjava.net/charlielogic/archive/2007/11/28/163169.html#163704#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>