JAVA提取Word,Excel,PPT,PDF,TXT等文档文字内容

首先引入Maven库

[html]  view plain  copy
  1. <dependency>  
  2.     <groupId>org.apache.poi</groupId>  
  3.     <artifactId>poi</artifactId>  
  4.     <version>3.15</version>  
  5. </dependency>  
  6. <dependency>  
  7.     <groupId>org.apache.poi</groupId>  
  8.     <artifactId>poi-ooxml</artifactId>  
  9.     <version>3.15</version>  
  10. </dependency>  
  11. <dependency>  
  12.     <groupId>org.apache.poi</groupId>  
  13.     <artifactId>poi-scratchpad</artifactId>  
  14.     <version>3.15</version>  
  15. </dependency>  
  16. <dependency>  
  17.     <groupId>org.apache.pdfbox</groupId>  
  18.     <artifactId>pdfbox</artifactId>  
  19.     <version>2.0.4</version>  
  20. </dependency>  
[java]  view plain  copy
  1.   
[java]  view plain  copy
  1. <pre name="code" class="html">public class ParseText {  
  2.   
  3.     // 判断文档类型,调用不同的解析方法  
  4.     public static String parse(byte[] buffer, String suffix) {  
  5.         String text = "";  
  6.         switch (suffix) {  
  7.         case "doc":  
  8.             text = getTextFromWord(buffer);  
  9.             break;  
  10.         case "docx":  
  11.             text = getTextFromWord2007(buffer);  
  12.             break;  
  13.         case "xls":  
  14.             text = getTextFromExcel(buffer);  
  15.             break;  
  16.         case "xlsx":  
  17.             text = getTextFromExcel2007(buffer);  
  18.             break;  
  19.         case "ppt":  
  20.             text = getTextFromPPT(buffer);  
  21.             break;  
  22.         case "pptx":  
  23.             text = getTextFromPPT2007(buffer);  
  24.             break;  
  25.         case "pdf":  
  26.             text = getTextFormPDF(buffer);  
  27.             break;  
  28.         case "txt":  
  29.             text = getTextFormTxt(buffer);  
  30.             break;  
  31.         default:  
  32.             System.out.println("不支持解析的文档类型");  
  33.         }  
  34.   
  35.         return text.replaceAll("\\s*""");  
  36.     }  
  37.   
  38.     // 读取Word97-2003的全部内容 doc  
  39.     private static String getTextFromWord(byte[] file) {  
  40.         String text = "";  
  41.         InputStream fis = null;  
  42.         WordExtractor ex = null;  
  43.         try {  
  44.             // word 2003: 图片不会被读取  
  45.             fis = new ByteArrayInputStream(file);  
  46.             ex = new WordExtractor(fis);  
  47.             text = ex.getText();  
  48.             ex.close();  
  49.         } catch (Exception e) {  
  50.             // TODO Auto-generated catch block  
  51.             e.printStackTrace();  
  52.         }  
  53.         return text;  
  54.     }  
  55.   
  56.     // 读取Word2007+的全部内容 docx  
  57.     private static String getTextFromWord2007(byte[] file) {  
  58.         String text = "";  
  59.         InputStream fis = null;  
  60.         XWPFDocument doc = null;  
  61.         XWPFWordExtractor workbook = null;  
  62.         try {  
  63.             fis = new ByteArrayInputStream(file);  
  64.             doc = new XWPFDocument(fis);  
  65.             workbook = new XWPFWordExtractor(doc);  
  66.             text = workbook.getText();  
  67.             workbook.close();  
  68.         } catch (IOException e) {  
  69.             // TODO Auto-generated catch block  
  70.             e.printStackTrace();  
  71.         }  
  72.         return text;  
  73.     }  
  74.   
  75.     // 读取Excel97-2003的全部内容 xls  
  76.     private static String getTextFromExcel(byte[] file) {  
  77.         InputStream is = null;  
  78.         HSSFWorkbook wb = null;  
  79.         String text = "";  
  80.         try {  
  81.             is = new ByteArrayInputStream(file);  
  82.             wb = new HSSFWorkbook(new POIFSFileSystem(is));  
  83.             ExcelExtractor extractor = new ExcelExtractor(wb);  
  84.             extractor.setFormulasNotResults(false);  
  85.             extractor.setIncludeSheetNames(false);  
  86.             text = extractor.getText();  
  87.             extractor.close();  
  88.         } catch (IOException e) {  
  89.             e.printStackTrace();  
  90.         }  
  91.         return text;  
  92.     }  
  93.   
  94.     // 读取Excel2007+的全部内容 xlsx  
  95.     private static String getTextFromExcel2007(byte[] file) {  
  96.         InputStream is = null;  
  97.         XSSFWorkbook workBook = null;  
  98.         String text = "";  
  99.         try {  
  100.             is = new ByteArrayInputStream(file);  
  101.             workBook = new XSSFWorkbook(is);  
  102.             XSSFExcelExtractor extractor = new XSSFExcelExtractor(workBook);  
  103.             extractor.setIncludeSheetNames(false);  
  104.             text = extractor.getText();  
  105.             extractor.close();  
  106.         } catch (IOException e) {  
  107.             e.printStackTrace();  
  108.         }  
  109.         return text;  
  110.     }  
  111.   
  112.     // 读取Powerpoint97-2003的全部内容 ppt  
  113.     private static String getTextFromPPT(byte[] file) {  
  114.         String text = "";  
  115.         InputStream fis = null;  
  116.         PowerPointExtractor ex = null;  
  117.         try {  
  118.             // word 2003: 图片不会被读取  
  119.             fis = new ByteArrayInputStream(file);  
  120.             ex = new PowerPointExtractor(fis);  
  121.             text = ex.getText();  
  122.             ex.close();  
  123.         } catch (Exception e) {  
  124.             // TODO Auto-generated catch block  
  125.             e.printStackTrace();  
  126.         }  
  127.         return text;  
  128.     }  
  129.   
  130.     // 抽取幻灯片2007+全部内容 pptx  
  131.     private static String getTextFromPPT2007(byte[] file) {  
  132.         InputStream is = null;  
  133.         XMLSlideShow slide = null;  
  134.         String text = "";  
  135.         try {  
  136.             is = new ByteArrayInputStream(file);  
  137.             slide = new XMLSlideShow(is);  
  138.             XSLFPowerPointExtractor extractor = new XSLFPowerPointExtractor(slide);  
  139.             text = extractor.getText();  
  140.             extractor.close();  
  141.         } catch (IOException e) {  
  142.             e.printStackTrace();  
  143.         }  
  144.         return text;  
  145.     }  
  146.   
  147.     // 读取pdf文件全部内容 pdf  
  148.     private static String getTextFormPDF(byte[] file) {  
  149.         String text = "";  
  150.         PDDocument pdfdoc = null;  
  151.         InputStream is = null;  
  152.         try {  
  153.             is = new ByteArrayInputStream(file);  
  154.             pdfdoc = PDDocument.load(is);  
  155.             PDFTextStripper stripper = new PDFTextStripper();  
  156.             text = stripper.getText(pdfdoc);  
  157.   
  158.         } catch (IOException e) {  
  159.             e.printStackTrace();  
  160.         } finally {  
  161.             try {  
  162.                 if (pdfdoc != null) {  
  163.                     pdfdoc.close();  
  164.                 }  
  165.             } catch (IOException e) {  
  166.                 // TODO Auto-generated catch block  
  167.                 e.printStackTrace();  
  168.             }  
  169.         }  
  170.         return text;  
  171.     }  
  172.   
  173.     // 读取txt文件全部内容 txt  
  174.     private static String getTextFormTxt(byte[] file) {  
  175.         String text = "";  
  176.         try {  
  177.             String encoding = get_charset(file);  
  178.             text = new String(file, encoding);  
  179.         } catch (UnsupportedEncodingException e) {  
  180.             e.printStackTrace();  
  181.         } catch (IOException e1) {  
  182.             e1.printStackTrace();  
  183.         }  
  184.         return text;  
  185.     }  
  186.   
  187.     // 获得txt文件编码方式  
  188.     private static String get_charset(byte[] file) throws IOException {  
  189.         String charset = "GBK";  
  190.         byte[] first3Bytes = new byte[3];  
  191.         InputStream bis = null;  
  192.         try {  
  193.             boolean checked = false;  
  194.             bis = new ByteArrayInputStream(file);  
  195.             bis.mark(0);  
  196.             int read = bis.read(first3Bytes, 03);  
  197.             if (read == -1)  
  198.                 return charset;  
  199.             if (first3Bytes[0] == (byte0xFF && first3Bytes[1] == (byte0xFE) {  
  200.                 charset = "UTF-16LE";  
  201.                 checked = true;  
  202.             } else if (first3Bytes[0] == (byte0xFE && first3Bytes[1] == (byte0xFF) {  
  203.                 charset = "UTF-16BE";  
  204.                 checked = true;  
  205.             } else if (first3Bytes[0] == (byte0xEF && first3Bytes[1] == (byte0xBB  
  206.                     && first3Bytes[2] == (byte0xBF) {  
  207.                 charset = "UTF-8";  
  208.                 checked = true;  
  209.             }  
  210.             bis.reset();  
  211.             if (!checked) {  
  212.                 while ((read = bis.read()) != -1) {  
  213.                     if (read >= 0xF0)  
  214.                         break;  
  215.                     if (0x80 <= read && read <= 0xBF// 单独出现BF以下的,也算是GBK  
  216.                         break;  
  217.                     if (0xC0 <= read && read <= 0xDF) {  
  218.                         read = bis.read();  
  219.                         if (0x80 <= read && read <= 0xBF// 双字节 (0xC0 - 0xDF)  
  220.                             // (0x80 - 0xBF),也可能在GB编码内  
  221.                             continue;  
  222.                         else  
  223.                             break;  
  224.                     } else if (0xE0 <= read && read <= 0xEF) {// 也有可能出错,但是几率较小  
  225.                         read = bis.read();  
  226.                         if (0x80 <= read && read <= 0xBF) {  
  227.                             read = bis.read();  
  228.                             if (0x80 <= read && read <= 0xBF) {  
  229.                                 charset = "UTF-8";  
  230.                                 break;  
  231.                             } else  
  232.                                 break;  
  233.                         } else  
  234.                             break;  
  235.                     }  
  236.                 }  
  237.             }  
  238.         } catch (Exception e) {  
  239.             e.printStackTrace();  
  240.         } finally {  
  241.             if (bis != null) {  
  242.                 bis.close();  
  243.             }  
  244.         }  
  245.         return charset;  
  246.     }  
  247. }</pre><br>  
  248. <br>  
  249. <p></p>  
  250. <pre></pre>  
  251. <br>  
  252. <p></p>  
  253. <div style="top:628px"><pre name="code" class="java">   // 读取pdf文件  
  254.     private static String getTextFormPDF(byte[] file) {  
  255.         String text = "";  
  256.         PDDocument pdfdoc = null;  
  257.         InputStream is = null;  
  258.         try {  
  259.             is = new ByteArrayInputStream(file);  
  260.             pdfdoc = PDDocument.load(is);  
  261.             PDFTextStripper stripper = new PDFTextStripper();  
  262.             text = stripper.getText(pdfdoc);  
  263.   
  264.         } catch (IOException e) {  
  265.             e.printStackTrace();  
  266.         } finally {  
  267.             try {  
  268.                 if (pdfdoc != null) {  
  269.                     pdfdoc.close();  
  270.                 }  
  271.             } catch (IOException e) {  
  272.                 // TODO Auto-generated catch block  
  273.                 e.printStackTrace();  
  274.             }  
  275.         }  
  276.         return text;  
  277.     }  
  278.   
  279.     // 读取txt文件  
  280.     private static String getTextFormTxt(byte[] file) {  
  281.         String text = "";  
  282.         try {  
  283.             String encoding = get_charset(file);  
  284.             text = new String(file, encoding);  
  285.         } catch (UnsupportedEncodingException e) {  
  286.             e.printStackTrace();  
  287.         } catch (IOException e1) {  
  288.             e1.printStackTrace();  
  289.         }  
  290.         return text;  
  291.     }</pre></div>  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值