Java:Java的jar包之POI的简介、安装、使用方法(基于POI将Word、Excel、PPT转换为html)之详细攻略
Java:Java的jar包之POI的簡介、安裝、使用方法(基于POI的轉換—Word、Excel、Ppt等轉html)之詳細攻略
?
?
?
目錄
POI的簡介
1、基本功能
POI的安裝
POI的使用方法(基于POI的轉換—Word、Excel、Ppt等轉html)
1、基礎案例
1.1、創建Excel 文檔—利用Jakarta POI API 創建Excel 文檔
1.2、讀取Excel文檔中的數據
1.3、處理WORD文檔
2、進階案例應用
2.1、word轉html
2.2、excel轉html
2.3、ppt轉html
?
?
?
?
POI的簡介
? ? ? ? ?Apache POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。Poor Obfuscation Implementation即 簡潔版的模糊實現。
?
1、基本功能
- HSSF - 提供讀寫Microsoft Excel格式檔案的功能。
- XSSF - 提供讀寫Microsoft?Excel?OOXML格式檔案的功能。
- HWPF - 提供讀寫Microsoft Word格式檔案的功能。
- HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。
- HDGF - 提供讀寫Microsoft Visio格式檔案的功能。
?
?
?
?
POI的安裝
下載地址:https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-4.0.0-20180907.tar.gz
% gpg --import KEYS % gpg --verify downloaded_file.asc downloaded_file or% pgpk -a KEYS % pgpv downloaded_file.asc or% pgp -ka KEYS % pgp downloaded_file.asc?
?
POI的使用方法(基于POI的轉換—Word、Excel、Ppt等轉html)
1、基礎案例
1.1、創建Excel 文檔—利用Jakarta POI API 創建Excel 文檔
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFCell; import java.io.FileOutputStream; public class CreateXL {/** Excel 文件要存放的位置,假定在D盤下*/public static String outputFile = "D:\\test.xls";public static void main(String argv[]) {try {// 創建新的Excel 工作簿HSSFWorkbook workbook = new HSSFWorkbook();// 在Excel工作簿中建一工作表,其名為缺省值// 如要新建一名為"效益指標"的工作表,其語句為:// HSSFSheet sheet = workbook.createSheet("效益指標");HSSFSheet sheet = workbook.createSheet();// 在索引0的位置創建行(最頂端的行)HSSFRow row = sheet.createRow((short)0);//在索引0的位置創建單元格(左上端)HSSFCell cell = row.createCell((short)0);// 定義單元格為字符串類型cell.setCellType(HSSFCell.CELL_TYPE_STRING);//已過時// 在單元格中輸入一些內容cell.setCellValue("增加值");// 新建一輸出文件流FileOutputStream fOut = new FileOutputStream(outputFile);// 把相應的Excel 工作簿存盤workbook.write(fOut);fOut.flush();// 操作結束,關閉文件fOut.close();System.out.println("文件生成...");} catch (Exception e) {System.out.println("已運行 xlCreate() : " + e);}} }1.2、讀取Excel文檔中的數據
讀取Excel文檔中的數據。假定在D盤JTest目錄下有一個文件名為test1.xls的Excel文件。
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFCell; import java.io.FileInputStream; public class ReadXL {/** Excel文件的存放位置。注意是反斜線*/public static String fileToBeRead = "D:\\test1.xls";public static void main(String argv[]) {try {// 創建對Excel工作簿文件的引用HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead));// 創建對工作表的引用。// 本例是按名引用(讓我們假定那張表有著缺省名"Sheet1")HSSFSheet sheet = workbook.getSheet("Sheet1");// 也可用getSheetAt(int index)按索引引用,// 在Excel文檔中,第一張工作表的缺省索引是0,// 其語句為:HSSFSheet sheet = workbook.getSheetAt(0);// 讀取左上端單元HSSFRow row = sheet.getRow(0);HSSFCell cell = row.getCell((short)0);// 輸出單元內容,cell.getStringCellValue()就是取所在單元的值System.out.println("左上端單元是: " + cell.getStringCellValue());} catch (Exception e) {System.out.println("已運行xlRead() : " + e);}} }1.3、處理WORD文檔
import java.io. * ; import org.apache.poi.hwpf.extractor.WordExtractor; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFCell; public class TestPoi {public TestPoi() {}public static void main(String args[])throws Exception{FileInputStream in = new FileInputStream("D:\\a.doc");WordExtractor extractor = new WordExtractor();String str = extractor.extractText(in);//System.out.println("the result length is"+str.length());System.out.println(str);} }?
2、進階案例應用
文章參考:
https://blog.csdn.net/yjclsx/article/details/51441632
http://blog.csdn.net/z69183787/article/details/17468039
? ? ? ? ? 在現在這個互聯網在線時代,java實現在線預覽的這個需求,或許是大家都想要的。當然,如果公司有錢,直接使用付費的第三方軟件或者云在線預覽服務就可以了,比如永中office、office web 365(http://www.officeweb365.com/)等公司,都有云端在線預覽服務,可想而知,這些擴展功能,肯定是需要錢了。
? ? ? ? ? 但是,對于我們學生黨,如果想要免費或者DIY,則可以用openoffice,還需要借助其他的工具(例如swfTools、FlexPaper等)才行。實現原理就是:
- 1.通過第三方工具openoffice,將word、excel、ppt、txt等文件轉換為pdf文件;
- 2.通過swfTools將pdf文件轉換成swf格式的文件;
- 3.通過FlexPaper文檔組件在頁面上進行展示。
? ? ? ? ? 當然如果裝了Adobe Reader XI,那把pdf直接拖到瀏覽器頁面就可以直接打開預覽,這樣就不需要步驟2、3了,前提就是客戶裝了Adobe Reader XI這個pdf閱讀器。
? ? ? ? ? 當然,本篇文章主要介紹的POI,所以,可以通過POI實現word、excel、ppt轉html,這樣就可以放在頁面上了。
2.1、word轉html
package wordToHtml;import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.util.List; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.commons.io.FileUtils; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.converter.PicturesManager; import org.apache.poi.hwpf.converter.WordToHtmlConverter; import org.apache.poi.hwpf.usermodel.Picture; import org.apache.poi.hwpf.usermodel.PictureType; import org.w3c.dom.Document; public class PoiWordToHtml {public static void main(String[] args) throws Throwable {final String path = "D:\\poi-test\\wordToHtml\\";final String file = "人員選擇系分.doc";InputStream input = new FileInputStream(path + file);HWPFDocument wordDocument = new HWPFDocument(input);WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());wordToHtmlConverter.setPicturesManager(new PicturesManager() {public String savePicture(byte[] content, PictureType pictureType,String suggestedName, float widthInches, float heightInches) {return suggestedName;}});wordToHtmlConverter.processDocument(wordDocument);List pics = wordDocument.getPicturesTable().getAllPictures();if (pics != null) {for (int i = 0; i < pics.size(); i++) {Picture pic = (Picture) pics.get(i);try {pic.writeImageContent(new FileOutputStream(path+ pic.suggestFullFileName()));} catch (FileNotFoundException e) {e.printStackTrace();}}}Document htmlDocument = wordToHtmlConverter.getDocument();ByteArrayOutputStream outStream = new ByteArrayOutputStream();DOMSource domSource = new DOMSource(htmlDocument);StreamResult streamResult = new StreamResult(outStream);TransformerFactory tf = TransformerFactory.newInstance();Transformer serializer = tf.newTransformer();serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");serializer.setOutputProperty(OutputKeys.INDENT, "yes");serializer.setOutputProperty(OutputKeys.METHOD, "html");serializer.transform(domSource, streamResult);outStream.close();String content = new String(outStream.toByteArray());FileUtils.writeStringToFile(new File(path, "人員選擇系分.html"), content, "utf-8");} }2.2、excel轉html
package excelToHtml;import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List;import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult;import org.apache.commons.io.FileUtils; import org.apache.poi.hssf.converter.ExcelToHtmlConverter; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hwpf.converter.PicturesManager; import org.apache.poi.hwpf.converter.WordToHtmlConverter; import org.apache.poi.hwpf.usermodel.Picture; import org.apache.poi.hwpf.usermodel.PictureType; import org.w3c.dom.Document;public class PoiExcelToHtml {final static String path = "D:\\poi-test\\excelToHtml\\";final static String file = "exportExcel.xls";public static void main(String args[]) throws Exception {InputStream input=new FileInputStream(path+file);HSSFWorkbook excelBook=new HSSFWorkbook(input);ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter (DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument() );excelToHtmlConverter.processWorkbook(excelBook);List pics = excelBook.getAllPictures();if (pics != null) {for (int i = 0; i < pics.size(); i++) {Picture pic = (Picture) pics.get (i);try {pic.writeImageContent (new FileOutputStream (path + pic.suggestFullFileName() ) );} catch (FileNotFoundException e) {e.printStackTrace();}}}Document htmlDocument =excelToHtmlConverter.getDocument();ByteArrayOutputStream outStream = new ByteArrayOutputStream();DOMSource domSource = new DOMSource (htmlDocument);StreamResult streamResult = new StreamResult (outStream);TransformerFactory tf = TransformerFactory.newInstance();Transformer serializer = tf.newTransformer();serializer.setOutputProperty (OutputKeys.ENCODING, "utf-8");serializer.setOutputProperty (OutputKeys.INDENT, "yes");serializer.setOutputProperty (OutputKeys.METHOD, "html");serializer.transform (domSource, streamResult);outStream.close();String content = new String (outStream.toByteArray() );FileUtils.writeStringToFile(new File (path, "exportExcel.html"), content, "utf-8");} }2.3、ppt轉html
? ? ? ? ?其實只是ppt轉圖片,有了圖片后放到頁面上去,點擊下一頁就一張張顯示就可以了。這里只介紹ppt轉圖片的過程。ppt轉圖片有個缺陷,就是ppt里不是宋體的字有些可能會變成框框。以上都需要引入poi的jar包。要實現在線預覽,只需把轉換得到的html在新標簽頁打開或者鑲嵌到某塊區域就可以展現了。
package pptToImg;import java.awt.Dimension; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import org.apache.poi.hslf.model.TextRun; import org.apache.poi.hslf.record.Slide; import org.apache.poi.hslf.usermodel.RichTextRun; import org.apache.poi.hslf.usermodel.SlideShow; public class PPTtoImage { public static void main(String[] args) { // 讀入PPT文件 File file = new File("D:/poi-test/pptToImg/test.ppt"); doPPTtoImage(file); } public static boolean doPPTtoImage(File file) { boolean isppt = checkFile(file); if (!isppt) { System.out.println("The image you specify don't exit!"); return false; } try { FileInputStream is = new FileInputStream(file); SlideShow ppt = new SlideShow(is); is.close(); Dimension pgsize = ppt.getPageSize(); org.apache.poi.hslf.model.Slide[] slide = ppt.getSlides(); for (int i = 0; i < slide.length; i++) { System.out.print("第" + i + "頁。"); TextRun[] truns = slide[i].getTextRuns(); for ( int k=0;k<truns.length;k++){ RichTextRun[] rtruns = truns[k].getRichTextRuns(); for(int l=0;l<rtruns.length;l++){ int index = rtruns[l].getFontIndex(); String name = rtruns[l].getFontName(); rtruns[l].setFontIndex(1); rtruns[l].setFontName("宋體"); // System.out.println(rtruns[l].getText());} } BufferedImage img = new BufferedImage(pgsize.width,pgsize.height, BufferedImage.TYPE_INT_RGB); Graphics2D graphics = img.createGraphics(); graphics.setPaint(Color.BLUE); graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height)); slide[i].draw(graphics); // 這里設置圖片的存放路徑和圖片的格式(jpeg,png,bmp等等),注意生成文件路徑 FileOutputStream out = new FileOutputStream("D:/poi-test/pptToImg/pict_"+ (i + 1) + ".jpeg"); javax.imageio.ImageIO.write(img, "jpeg", out); out.close(); } System.out.println("success!!"); return true; } catch (FileNotFoundException e) { System.out.println(e); // System.out.println("Can't find the image!"); } catch (IOException e) { } return false; } // function 檢查文件是否為PPT public static boolean checkFile(File file) { boolean isppt = false; String filename = file.getName(); String suffixname = null; if (filename != null && filename.indexOf(".") != -1) { suffixname = filename.substring(filename.indexOf(".")); if (suffixname.equals(".ppt")) { isppt = true; } return isppt; } else { return isppt; } } }?
?
?
?
?
?
參考文章
百度百科
?
?
?
總結
以上是生活随笔為你收集整理的Java:Java的jar包之POI的简介、安装、使用方法(基于POI将Word、Excel、PPT转换为html)之详细攻略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成功解决D8016“/ZI”和“/Gy-
- 下一篇: NLP之情感分析:基于python编程(