㈠ java 生成PDF表格
實現代碼如下:
package com.qhdstar.java.pdf;
import java.awt.Color;
import java.io.FileOutputStream;
import com.lowagie.text.Chapter;
import com.lowagie.text.Document;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Section;
import com.lowagie.text.pdf.PdfWriter;
/**
* 描述:TODO 【JAVA生成PDF】
*
*
* @title GeneratePDF
* @version V1.0
*/
public class GeneratePDF {
public static void main(String[] args) {
//調用第一個方法,向C盤生成一個名字為ITextTest.pdf 的文件
try {
writeSimplePdf();
}
catch (Exception e) { e.printStackTrace(); }
//調用第二個方法,向C盤名字為ITextTest.pdf的文件,添加章節。
try {
writeCharpter();
}
catch (Exception e) { e.printStackTrace(); }
}
public static void writeSimplePdf() throws Exception {
// 1.新建document對象
// 第一個參數是頁面大小。接下來的參數分別是左、右、上和下頁邊距。
Document document = new Document(PageSize.A4, 50, 50, 50, 50);
// 2.建立一個書寫器(Writer)與document對象關聯,通過書寫器(Writer)可以將文檔寫入到磁碟中。
// 創建 PdfWriter 對象 第一個參數是對文檔對象的引用,第二個參數是文件的實際名稱,在該名稱中還會給出其輸出路徑。
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\ITextTest.pdf"));
// 3.打開文檔
document.open();
// 4.向文檔中添加內容
// 通過 com.lowagie.text.Paragraph 來添加文本。可以用文本及其默認的字體、顏色、大小等等設置來創建一個默認段落
document.add(new Paragraph("First page of the document."));
document.add(new Paragraph("Some more text on the first page with different color and font type.", FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD, new Color(255, 150, 200))));
// 5.關閉文檔
document.close();
}
/**
* 添加含有章節的pdf文件
*
* @throws Exception
*/
public static void writeCharpter() throws Exception {
// 新建document對象 第一個參數是頁面大小。接下來的參數分別是左、右、上和下頁邊距。
Document document = new Document(PageSize.A4, 20, 20, 20, 20);
// 建立一個書寫器(Writer)與document對象關聯,通過書寫器(Writer)可以將文檔寫入到磁碟中。
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("c:\\ITextTest.pdf"));
// 打開文件
document.open();
// 標題
document.addTitle("Hello mingri example");
// 作者
document.addAuthor("wolf");
// 主題
document.addSubject("This example explains how to add metadata.");
document.addKeywords("iText, Hello mingri");
document.addCreator("My program using iText");
// document.newPage();
// 向文檔中添加內容
document.add(new Paragraph("\n"));
document.add(new Paragraph("\n"));
document.add(new Paragraph("\n"));
document.add(new Paragraph("\n"));
document.add(new Paragraph("\n"));
document.add(new Paragraph("First page of the document."));
document.add(new Paragraph("First page of the document."));
document.add(new Paragraph("First page of the document."));
document.add(new Paragraph("First page of the document."));
document.add(new Paragraph("Some more text on the first page with different color and font type.", FontFactory.getFont(FontFactory.defaultEncoding, 10, Font.BOLD, new Color(0, 0, 0))));
Paragraph title1 = new Paragraph("Chapter 1", FontFactory.getFont(FontFactory.HELVETICA, 18, Font.BOLDITALIC, new Color(0, 0, 255)));
// 新建章節
Chapter chapter1 = new Chapter(title1, 1);
chapter1.setNumberDepth(0);
Paragraph title11 = new Paragraph("This is Section 1 in Chapter 1", FontFactory.getFont(FontFactory.HELVETICA, 16, Font.BOLD, new Color(255, 0, 0)));
Section section1 = chapter1.addSection(title11);
Paragraph someSectionText = new Paragraph("This text comes as part of section 1 of chapter 1.");
section1.add(someSectionText);
someSectionText = new Paragraph("Following is a 3 X 2 table.");
section1.add(someSectionText);
document.add(chapter1);
// 關閉文檔
document.close();
}
}
㈡ 求解!JAVA 使用Apache POI將PPTX轉圖片出錯。見下圖
有時候我們需要從Excel文件中讀取數據,或者我們為了商務或者財政的目的生成Excel格式的報表.Java沒有對操作Excel文件提供內在的支持,所以我們需要尋找開源的APIs.當我開始尋找操作Excel的APIs時候,大部分人建議使用JExcel或者ApachePOI.在深入研究後,我發現由於以下主要原因ApachePOI是正確的選擇.還有些關於高級特性的原因,但是我們不深入太多細節.1)Apache基金的支持.2)JExcel不支持xlsx格式而POI既支持xls格式又支持xlsx格式.3)ApachePOI是基於流的處理,因此更適合大文件和要求更少的內存.ApachePOI對處理Excel文件提供了強大的支持,並且能處理xls和xlsx格式的電子表格.關於ApachePOI一些重要的地方:1)ApachePOI包含適合Excel97-2007(.xls文件)的HSSF實現.2)ApachePOIXSSF實現用來處理Excel2007文件(.xlsx).3)ApachePOIHSSF和XSSF提供了讀/寫/修改Excel表格的機制.4)ApachePOI提供了XSSF的一個擴展SXSSF用來處理非常大的Excel工作單元.SXSSFAPI需要更少的內存,因此當處理非常大的電子表格同時堆內存又有限時,很合適使用.5)有兩種模式可供選擇--事件模式和用戶模式.事件模式要求更少的內存,因為用tokens來讀取Excel並處理.用戶模式更加面向對象並且容易使用,因此在我們的示例中使用用戶模式.6)ApachePOI為額外的Excel特性提供了強大支持,例如處理公式,創建單元格樣式--顏色,邊框,字體,頭部,腳部,數據驗證,圖像,超鏈接等.ApachePOI的Maven依賴[java]viewplainorg.apache.poipoi3.10-FINALorg.apache.poipoi-ooxml3.10-FINALApachePOI的當前版本是3.10-FINAL.如果你使用單獨的java應用,添加jars根據下面的圖片.讀取Excel文件假設我們有一個叫Sample.xlsx的Excel文件,裡面有兩個sheet並且下面圖片中的數據.我們想要讀取這個Excel文件並且創建Countrieslist.sheet1有些額外的數據,當我們解析時會忽略它.我們的國家(Country)javabean如下:Country.java[java]viewplainpackagecom.journaldev.excel.read;publicclassCountry{privateStringname;privateStringshortCode;publicCountry(Stringn,Stringc){this.name=n;this.shortCode=c;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetShortCode(){returnshortCode;}publicvoidsetShortCode(StringshortCode){this.shortCode=shortCode;}@OverridepublicStringtoString(){returnname+"::"+shortCode;}}讀取Excel文件並創建Countrieslist代碼如下:ReadExcelFileToList.java[java]viewplainpackagecom.journaldev.excel.read;importjava.io.FileInputStream;importjava.io.IOException;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;importorg.apache.poi.ss.usermodel.Cell;importorg.apache.poi.ss.usermodel.Row;importorg.apache.poi.ss.usermodel.Sheet;importorg.apache.poi.ss.usermodel.Workbook;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;{publicstaticListreadExcelData(StringfileName){ListcountriesList=newArrayList();try{///xlsfileFileInputStreamfis=newFileInputStream(fileName);//CreateWorkbookinstanceforxlsx/=null;if(fileName.toLowerCase().endsWith("xlsx")){workbook=newXSSFWorkbook(fis);}elseif(fileName.toLowerCase().endsWith("xls")){workbook=newHSSFWorkbook(fis);}//=workbook.getNumberOfSheets();//loopthrougheachofthesheetsfor(inti=0;irowIterator=sheet.iterator();while(rowIterator.hasNext()){Stringname="";StringshortCode="";//GettherowobjectRowrow=rowIterator.next();//Everyrowhascolumns,=row.cellIterator();while(cellIterator.hasNext()){//GettheCellobjectCellcell=cellIterator.next();//(cell.getCellType()){caseCell.CELL_TYPE_STRING:if(shortCode.equalsIgnoreCase("")){shortCode=cell.getStringCellValue().trim();}elseif(name.equalsIgnoreCase("")){//2ndcolumnname=cell.getStringCellValue().trim();}else{//randomdata,leaveitSystem.out.println("Randomdata::"+cell.getStringCellValue());}break;caseCell.CELL_TYPE_NUMERIC:System.out.println("Randomdata::"+cell.getNumericCellValue());}}//endofcelliteratorCountryc=newCountry(name,shortCode);countriesList.add(c);}//endofrowsiterator}//endofsheetsforloop//closefileinputstreamfis.close();}catch(IOExceptione){e.printStackTrace();}returncountriesList;}publicstaticvoidmain(Stringargs[]){Listlist=readExcelData("Sample.xlsx");System.out.println("CountryList\n"+list);}}這個程序很容易明白,主要步驟如下:1)根據文件類型(.xls與.xlsx)創建Workbook實例,xlsx用XSSFWorkbook,xls用HSSFWorkbook.我們可以基於文件名字使用工廠模式創建一個包裝類來創建Workbook實例.2)使用WorkbookgetNumberOfSheets()來獲取sheet的數量,然後循環解析每一個sheet.使用getSheetAt(inti)方法獲取Sheet實例.3)獲取Row和Cell迭代器來獲取每一個Cell對象.ApachePOI在這里使用了迭代器模式.4)使用switch-case根據Cell的類型來處理它.
㈢ 用java將數據導出到wps表格中,怎麼實現
importjava.io.IOException;
importjava.io.OutputStream;
importjava.math.BigDecimal;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.poi.hssf.usermodel.HSSFCell;
importorg.apache.poi.hssf.usermodel.HSSFRow;
importorg.apache.poi.hssf.usermodel.HSSFSheet;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
publicclassTest{
(HttpServletResponseresponse,
java.util.ListqueryList,intflag,String[]ywName,StringfileName)
throwsIOException{
response.setContentType("application/vnd.ms-excel;charset=GBK");
response.addHeader("Content-Disposition","attachment;filename="
+newString(fileName.getBytes("GBK"),"ISO8859_1"));
OutputStreamoutput=response.getOutputStream();
//創建新的Excel工作簿
HSSFWorkbookworkbook=newHSSFWorkbook();
HSSFSheetsheet;
HSSFRowrow;
HSSFCellcell;
sheet=workbook.createSheet();
StringstrReportName="查詢結果列表";
workbook.setSheetName(0,strReportName);//新建一名為strReportName的工作表
//創建表頭
//在索引0的位置創建行(最頂端的行)
row=sheet.createRow((short)0);
for(intkk=0;kk<ywName.length;kk++){
//在索引0的位置創建單元格(左上端)
cell=row.createCell(kk);
//cell.setCellStyle(HSSFCellStyle.ALIGN_CENTER);
//定義單元格為字元串類型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
//設置字元顯示格式,以unicode格式顯示
//cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//在單元格中輸入一些內容
cell.setCellValue(ywName[kk]);
}
intline=1;
intcellWidth=ywName.length;
for(inti=0;i<queryList.size();i++){
//HashMappersonInfo=(HashMap)queryList.get(i);
Object[]personInfo=(Object[])queryList.get(i);
row=sheet.createRow((short)line);
for(intj=0;j<cellWidth;j++){
cell=row.createCell(j);
//cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
if(personInfo[j+flag]instanceofInteger){
if(personInfo[j+flag]!=null)
cell.setCellValue((Integer)personInfo[j+flag]);
else
cell.setCellValue("");
}elseif(personInfo[j+flag]instanceofBigDecimal){
if(personInfo[j+flag]!=null)
cell.setCellValue(newDouble(personInfo[j+flag]
.toString()));
else
cell.setCellValue("");
}elseif(personInfo[j+flag]instanceofDouble){
if(personInfo[j+flag]!=null)
cell.setCellValue((Double)personInfo[j+flag]);
else
cell.setCellValue("");
}else{
if(personInfo[j+flag]!=null)
cell.setCellValue(personInfo[j+flag].toString());
else
cell.setCellValue("");
}
}
line++;
}
workbook.write(output);
output.flush();
output.close();
}
}
給你個工具方法,把它放到類裡面,直接調用就可以了
我解釋下參數
/**
* @param response 獲取響應,在action中使用getResponse()
* @param 數據集(從資料庫獲得的數據,注意和ywName順序對應)
* @param flag 有行號為1,無行號為0
* @param ywName excel中每列名稱
* @param fileName excel名
*/
//導出代碼
String[] yName={"員工號","員工名稱","機構號","機構名稱","***xxx","dddd"};
ExportExcel.createDtcxEXCEL(getResponse(), pgr.getData(), 1,yName , "龍大哥_"+new Date().toString());
最後 導出,默認文件名是「龍大哥_(當天日期)」
這個代碼放心用,只要把參數傳對,就可導出EXCEL
如果覺得可行,望採納
㈣ 如何讓java利用POI導出excel表,並在Excel表中根據表格的數據生成柱形圖。要求柱形圖是動態的。
柱狀圖生成區域可以設置的大些
㈤ 怎麼用JAVA動態生成一個表格
<td><tablewidth="100%"border="0"cellpadding="0"cellspacing="1"bgcolor="#a8c7ce">
<tr>
<tdwidth="25%"height="20"bgcolor="d3eaef"class="STYLE6"><divalign="center"><spanclass="STYLE10">種類編號</span></div></td>
<tdwidth="25%"height="20"bgcolor="d3eaef"class="STYLE6"><divalign="center"><滾卜滲spanclass="STYLE10">大脊種類名稱</span></div></td>
<tdwidth="25%"height="20"bgcolor="d3eaef"class="STYLE6"><divalign="center"><spanclass="STYLE10">種類簡介<弊和/span></div></td>
<tdwidth="25%"height="20"bgcolor="d3eaef"class="STYLE6"><divalign="center"><spanclass="STYLE10">修改</span></div></td>
</tr>
<%for(inti=1;i<pageSize;i++){
//Typetype=at.get(i);
%>
<tr>
<tdheight="20"bgcolor="#FFFFFF"class="STYLE19"align="center"name="id"><%=rs.getInt("id")%></td>
<tdheight="20"bgcolor="#FFFFFF"class="STYLE19"><divalign="center"id="typeName"><%=rs.getString("TYPE_NAME")%></div></td>
<tdheight="20"bgcolor="#FFFFFF"class="STYLE19"><divalign="center"id="typeIntro"><%=rs.getString("TYPE_INTRO")%></div></td>
<tdheight="20"bgcolor="#FFFFFF"><divalign="center"><spanclass="STYLE21"><ahref="kindUpdate.jsp?id=<%=rs.getInt("id")%>">修改</a></span></div></td>
</tr>
<inputtype="hidden"name="id"value="<%=rs.getInt("id")%>%>"/>
<%
if(!rs.next()){
break;
}
}%>
</table></td>
</tr>