Java讀取多種檔案格式的檔案(pdf,pptx,ppt,doc,docx...)
通過開源pdfbox和poi進行處理多種檔案格式的文字讀入
1.需要的jar的maven座標:
<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.2</version> </dependency> <!-- ppt,xls,docx,pptx,xlsx--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>
處理多種檔案格式,詳情見程式碼:
package cn.lcg.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.text.NumberFormat; import java.util.List; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; import org.apache.poi.hslf.extractor.PowerPointExtractor; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.Range; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.xslf.usermodel.XMLSlideShow; import org.apache.poi.xslf.usermodel.XSLFSlide; import org.apache.poi.xslf.usermodel.XSLFSlideShow; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun; import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody; import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph; import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape; import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide; /** * * @author yujian * @date 2016年10月12日 * @version 0.0.1 */ public class FileFormat { /** * 用來讀取doc檔案的方法 * @param filePath * @return * @throws Exception */ public static String getTextFromDoc(String filePath) throws Exception{ StringBuilder sb = new StringBuilder(); FileInputStream fis = new FileInputStream(new File(filePath)); HWPFDocument doc = new HWPFDocument(fis); Range rang = doc.getRange(); sb.append(rang.text()); fis.close(); return sb.toString(); } /** * 用來讀取docx檔案 * @param filePath * @return * @throws IOException * @throws Exception */ @SuppressWarnings("resource") public static String getTextFromDocx(String filePath) throws IOException { FileInputStream in = new FileInputStream(filePath); XWPFDocument doc = new XWPFDocument(in); XWPFWordExtractor extractor = new XWPFWordExtractor(doc); String text = extractor.getText(); in.close(); return text; } /** * 用來讀取pdf檔案 * @param filePath * @return * @throws IOException */ public static String getTextFromPDF(String filePath) throws IOException{ File input = new File(filePath); PDDocument pd = PDDocument.load(input); PDFTextStripper stripper = new PDFTextStripper(); return stripper.getText(pd); } /** * 用來讀取ppt檔案 * @param filePath * @return * @throws IOException */ public static String getTextFromPPT( String filePath) throws IOException{ FileInputStream in = new FileInputStream(filePath); PowerPointExtractor extractor = new PowerPointExtractor(in); String content = extractor.getText(); extractor.close(); return content; } /** * 用來讀取pptx檔案 * @param filePath * @return * @throws IOException */ public static String getTextFromPPTX( String filePath) throws IOException{ String resultString = null; StringBuilder sb = new StringBuilder(); FileInputStream in = new FileInputStream(filePath); try { XMLSlideShow xmlSlideShow = new XMLSlideShow(in); List<XSLFSlide> slides = xmlSlideShow.getSlides(); for(XSLFSlide slide:slides){ CTSlide rawSlide = slide.getXmlObject(); CTGroupShape gs = rawSlide.getCSld().getSpTree(); CTShape[] shapes = gs.getSpArray(); for(CTShape shape:shapes){ CTTextBody tb = shape.getTxBody(); if(null==tb){ continue; } CTTextParagraph[] paras = tb.getPArray(); for(CTTextParagraph textParagraph:paras){ CTRegularTextRun[] textRuns = textParagraph.getRArray(); for(CTRegularTextRun textRun:textRuns){ sb.append(textRun.getT()); } } } } resultString = sb.toString(); xmlSlideShow.close(); } catch (Exception e) { e.printStackTrace(); } return resultString; } /** * 用來讀取xls * @param filePath * @return * @throws IOException */ public static String getTextFromxls(String filePath) throws IOException{ FileInputStream in = new FileInputStream(filePath); StringBuilder content = new StringBuilder(); HSSFWorkbook workbook = new HSSFWorkbook(in); for(int sheetIndex=0;sheetIndex<workbook.getNumberOfSheets();sheetIndex++){ HSSFSheet sheet = workbook.getSheetAt(sheetIndex); for(int rowIndex=0;rowIndex<=sheet.getLastRowNum();rowIndex++){ HSSFRow row = sheet.getRow(rowIndex); if(row==null){ continue; } for(int cellnum=0;cellnum<row.getLastCellNum();cellnum++){ HSSFCell cell = row.getCell(cellnum); if(cell!=null){ content.append(cell.getRichStringCellValue().getString()+" "); } } } } workbook.close(); return content.toString(); } /** * 用來讀取xlsx檔案 * @param filePath * @return * @throws IOException */ public static String getTextFromxlsx(String filePath) throws IOException{ StringBuilder content = new StringBuilder(); XSSFWorkbook workbook = new XSSFWorkbook(filePath); for(int sheet=0;sheet<workbook.getNumberOfSheets();sheet++){ if(null!=workbook.getSheetAt(sheet)){ XSSFSheet aSheet =workbook.getSheetAt(sheet); for(int row=0;row<=aSheet.getLastRowNum();row++){ if(null!=aSheet.getRow(row)){ XSSFRow aRow = aSheet.getRow(row); for(int cell=0;cell<aRow.getLastCellNum();cell++){ if(null!=aRow.getCell(cell)){ XSSFCell aCell = aRow.getCell(cell); if(convertCell(aCell).length()>0){ content.append(convertCell(aCell)); } } content.append(" "); } } } } } workbook.close(); return content.toString(); } private static String convertCell(Cell cell){ NumberFormat formater = NumberFormat.getInstance(); formater.setGroupingUsed(false); String cellValue=""; if(cell==null){ return cellValue; } switch(cell.getCellType()){ case HSSFCell.CELL_TYPE_NUMERIC: cellValue = formater.format(cell.getNumericCellValue()); break; case HSSFCell.CELL_TYPE_STRING: cellValue = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_BLANK: cellValue = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_BOOLEAN: cellValue = Boolean.valueOf(cell.getBooleanCellValue()).toString(); break; case HSSFCell.CELL_TYPE_ERROR: cellValue = String.valueOf(cell.getErrorCellValue()); break; default:cellValue=""; } return cellValue.trim(); } }
相關推薦
Java讀取多種檔案格式的檔案(pdf,pptx,ppt,doc,docx...)
通過開源pdfbox和poi進行處理多種檔案格式的文字讀入 1.需要的jar的maven座標: <dependency> <groupId>org.apache.pdfbox</groupId> <
java讀取檔案和寫入檔案的方式(位元組流和字元流)
java讀取檔案和寫入檔案的方式 以位元組為單位讀取檔案 一次讀一個位元組 一次讀多個位元組 以字元為單位讀取檔案 一次讀一個字元 一次讀多個字元 以位元組為單位讀取檔案 以位元
java中pdf檔案的管理(pdf檔案轉png檔案,base64傳輸檔案以及刪除)
這幾天根據需求做了一個小demo,從中學習了一些java中pdf檔案的管理和檔案轉base64,主要包括以下幾個方面: 1.前端上傳影像檔案,把影像檔案儲存到指定的路徑下,然後如果是pdf檔案,把pdf檔案轉換為對應的png檔案儲存到pdf檔案儲存地址同級的指定資料夾中,同時保留原pdf檔案,如下圖: pd
Java讀寫CSV格式檔案(opencsv)
一,讀取CSV格式檔案: import java.io.File; import java.io.FileReader; import java.util.List; import au.com.bytecode.opencsv.CSVReader; public c
12-Java讀寫CSV格式檔案(opencsv)
maven依賴 <!-- https://mvnrepository.com/artifact/net.sourceforge.javacsv/javacsv --> <de
java 讀取eml檔案附件方法(附件為base64轉碼)
/*** 建立amr檔案* @param file * @param strEmailEml* @throws Exception */private static void createAmrFile(String strEmailEml) throws Exception {Properties prop
java讀取不同編碼格式的檔案
public static String getJavaEncode(String filePath){ BytesEncodingDetect s = new BytesEncodingDetect(); String fileCode =
Java讀取UTF-8格式txt檔案第一行出現亂碼——問號“?”及解決
今天匯入檔案的時候,出現?,經過核查是UTF-8那個BOM的問題,最後經過查詢,找了一個比較好的方法解決。 使用一個更強大點的工具類(可以支援UTF-8/UTF-16LE/UTF-16BE/UTF-32LE/UTF-32BE): 附上這兩個類的程式碼,
PE檔案格式學習(二):總體結構
1.概述 PE檔案分為幾個部分,分別是: DOS頭 DOS Stub NT頭(PE頭) 檔案頭 可選頭 區段頭(一個數組,每個元素都是一個結構體,稱之為IMAGE_SECTION_HEADER) .text .rdata .data .rs
PE檔案格式學習(三):匯出表
1.回顧 上篇文章中介紹過,可選頭中的資料目錄表是一個大小為0x10的陣列,匯出表就是這個陣列中的第一個元素。 我們再回顧下資料目錄表的結構體: struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress;  
PE檔案格式學習(一):概述
1.PE檔案簡介 PE檔案格式是Windows系統中應用最廣泛的檔案格式之一,我們常見的可執行檔案.exe、動態連結庫.dll以及驅動檔案.sys等都是PE檔案格式的。 可以通過十六進位制工具如010editor檢視PE檔案,可以看到PE檔案都有一個共同的特點,就是它們的最開頭都是4D5A,也就是ASCI
PE檔案格式學習(十三):載入配置表
1.介紹 載入配置表早期是用於描述當PE檔案頭或PE可選頭無法描述或者因為太大而無法描述的各種功能。 後來以XP及以後的系統主要是為了儲存SEH控制代碼,稱為安全結構化異常處理程式列表,如果SEH異常處理沒有經過註冊,在載入配置表中沒有控制代碼,這個異常處理就不會被執行。 具體的例子就不演示了,看起來只要是
PE檔案格式學習(十四):繫結匯入表
1.介紹 繫結匯入表的作用是加快程式的啟動速度,一個PE程式在啟動時會去載入匯入表中的dll檔案,並將匯入表的FirstThunk指向的陣列填入函式的真實地址,這需要耗去時間,繫結匯入表中儲存了匯入函式的真實地址,所以當PE在啟動時系統檢測到有繫結匯入表,就會直接將地址填入FirstThunk裡,這樣就省去
PE檔案格式學習(十六):延遲載入表
1.介紹 延遲載入表本質上跟繫結匯入表的目的是一樣的,都是為了加快程式載入檔案的速度,只不過方法不一樣。 延遲載入是指在呼叫某個DLL時才去載入,目的是為了避免在程式啟動之初就載入了不必要的DLL而浪費了時間。微軟建議在兩種情況下使用延遲載入: 程式並非在啟動時就會呼叫D
PE檔案格式學習(十二):TLS表
1.介紹 TLS全稱執行緒區域性儲存器,它用來儲存變數或回撥函式。 TLS裡面的變數和回撥函式都在程式入口點(AddressOfEntry)之前執行,也就是說程式在被除錯時,還沒有在入口點處斷下來之前,TLS中的變數和回撥函式就已經執行完了,所以TLS可以用作反除錯之類的操作。
PE檔案格式學習(八):基址重定位表
1.簡介 基址重定位表位於資料目錄表中的第六個,它位於安全表的後面。 這個表的作用是用來索引那些需要重定位的資料的。當系統發現DLL的真實載入基址跟PE檔案中的ImageBase中的值不一樣時,就會啟用基址重定位表修復一些資料的地址。我們知道一個程式中可能包含多個DLL,因此有可
PE檔案格式學習(七):安全表
1.介紹 如果一個應用程式有數字簽名,那麼它的安全表就不會為空。它位於異常表的後面。 2.安全表解析 通過資料目錄表裡提供的RVA,我們轉換成offset,找到了安全表的位置,如下: 安全表的結構體如下: typedef struct _WIN_CERTIFIC
PE檔案格式學習(六):異常表
1.概述 x86系統採用動態的方式構建SEH結構,相比而言x64系統下采用靜態的方式處理SEH結構,它儲存在PE檔案中,通常在.pdata區段。因此本文的例子採用x64編譯過的程式。 異常表在資源表的後面。 2.異常表解析 資料目錄表的第四個元素指向異常表,RVA指向的是
PE檔案格式學習(五):資源表
1.概述 程式內部和外部的介面等元素的二進位制資料統稱為資源,程式把它們放在一個特定的表中,符合資料和程式分離的設計原則。 Windows程式中的資源大致分為六類:選單、對話方塊、點陣圖、游標、圖示、自定義資源 資源表是資料目錄表中的第三個元素,排在匯入表的後面。 2.資
PE檔案格式學習(四):匯入表
UPDATE: 在文章的末尾更新了一張圖,在網上找的,有助於理解匯入表的結構 1.概述 匯入表是逆向和病毒分析中比較重要的一個表,在分析病毒時幾乎第一時間都要看一下程式的匯入表的內容,判斷程式大概用了哪些功能。 匯入表是資料目錄表中的第2個元素,排在匯出表的