POI读取第三方下载的Word文档
2019-12-20 11:04
337 查看
依赖因为从第三方读取到的word可能是其他格式(例如:html)转成word的,此时去读取word可能会失败。这里以HTML为例
<!-- parse world --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.10.3</version> </dependency>代码片段
private String parseWord(String path) throws ParseWordException { // inspect if (isEmpty(path)) { throw new ParseWordException(Code.PARAM_EMPTY.getCode(), Code.PARAM_EMPTY.getMessage()); } // reader File file = new File(path); FileInputStream fis = null; try { fis = new FileInputStream(file); } catch (FileNotFoundException e) { throw new ParseWordException(Code.READER_FILE_FAILURE.getCode(), Code.READER_FILE_FAILURE.getMessage()); } // parse try { if (path.toUpperCase().endsWith(FileType.DOC.toString())) { HWPFDocument wordDoc = new HWPFDocument(fis); // 自己读 } else if (path.toUpperCase().endsWith(FileType.DOCX.toString())) { XWPFDocument wordDocx = new XWPFDocument(fis); // 自己读 } else { // 文件格式非法 throw new ParseWordException(Code.FILE_TYPE_ILLEGAL.getCode(), Code.FILE_TYPE_ILLEGAL.getMessage()); } } catch (IllegalArgumentException ie) { System.out.println(ie.getMessage()); if (isEmpty(ie.getMessage())) { throw new ParseWordException(Code.PARAM_EMPTY.getCode(), Code.PARAM_EMPTY.getMessage()); } if (ie.getMessage().contains("The document is really a HTML file")) { // 格式转换 try { String htmlPath = parseHtml(file); Document doc = Jsoup.parse(new File(htmlPath), "GBK"); // 自己定 Elements elements = doc.select("table").select("tbody"); //读取所有的tbody标签,视情况而定 elements.forEach(e -> { //读取td中所有的span标签,视情况而定,可能有图片,自己处理 e.select("td").select("span").eachText().stream().filter(d -> d != null && d.trim().length() > 0).forEach(System.out::println); }); } catch (IOException e) { throw new ParseWordException(Code.FILE_CONVERT_FAILURE.getCode(), Code.FILE_CONVERT_FAILURE.getMessage()); } } } catch (IOException e) { throw new ParseWordException(Code.PARSE_FAILURE.getCode(), Code.PARSE_FAILURE.getMessage()); } return null; } /** * parse HTML * * @param readerFile * @return * @throws IOException */ private String parseHtml(File readerFile) throws IOException { String tempPath = "d:\\1.html"; // 创建一个零时文件,自己换一下路径 File outFile = new File(tempPath); if (outFile.exists()) { outFile.delete(); // 删掉之前已经存在的文件 } FileInputStream fis = new FileInputStream(readerFile); FileOutputStream fileOutputStream = new FileOutputStream(outFile); int len = 0; byte[] buffer = new byte[1024]; while ((len = fis.read(buffer)) != -1) { fileOutputStream.write(buffer, 0, len); } return tempPath; } public static void main(String[] args) throws IOException, ParseWordException { ParseWorld parse = new ParseWorld(); parse.parseWord("D:\\aaa.doc"); // } private boolean isEmpty(String str) { return str == null || str.trim().length() == 0; }
相关文章推荐
- POI3.8读取word文档的表格数据!
- 使用POI读取word文档
- android读取word文档的方法:一,第三方应用打开
- java使用POI工具读取word文档并写入生成新的word文档及错误整理
- 使用poi读取word文档
- poi在linux下读取带图片的word文档报错
- 使用POI读取word文档内容
- 文件下载:POI读取word或Excel,修改内容后以流的形式输出到前端
- poi读取word文档
- 关于poi读取word文档修改后输出乱码问题 poi word 乱码
- poi读取word文档中内容
- POI 读取 写好的 Word 模板, 并生产新的 word 供用户下载
- java poi读取word、excel文档
- POI 创建,读取excel。处理word文档
- POI-JAVA读取excel生成word表格文档
- POI之Word文档读取-yellowcong
- Java用poi读取Word文档
- 使用POI读取word文档内容
- java poi组件 读取word文档 替换文档 内容 图片
- 最新版java 实现poi方式读取word文件内容