以下为瞎扯淡:
温馨提示:有很多方法均可以解析这些常见的文件,以下内容使用的是apache-poi + apache-pdfbox实现的。
关于文档解析,在网上搜索了很久,无奈内容太过繁杂,找不到合适的代码,一大半都是只支持文本。没办法,只能自己在网上一点一点CV了,最终提取了这些代码,不能说好用吧,应该可解燃眉之急。关于doc文档以及pdf文档还是有很多问题的,后续希望大佬们能在帖子下面多多指正,能优化一下代码,那就更好了。
以下为正文内容:
首先把以下这些依赖干进去
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.0</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>4.1.0</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.22</version> </dependency>
要测试的话给你贴一个文档地址吧:(但是这个在线文档是没有图片滴)
public static void main(String[] args) throws IOException { String document = processDocumentFromFilePath("E:\\VPN系统使用手册.pptx", "E:\\临时图片"); System.out.println(document); String documentFromUrl = processDocumentFromUrl("http://api.idocv.com/data/doc/manual.docx", "E:\\临时图片"); System.out.println(documentFromUrl); }
然后上车:飕飕飕
import com.alibaba.dubbo.common.utils.CollectionUtils; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClients; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; import org.apache.poi.hslf.usermodel.*; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.extractor.WordExtractor; import org.apache.poi.hwpf.usermodel.Picture; import org.apache.poi.sl.usermodel.TextParagraph; import org.apache.poi.xslf.usermodel.*; import org.apache.poi.xwpf.usermodel.*; import java.io.*; import java.util.Date; import java.util.List; import java.util.stream.Collectors; public class FileProcessorUtils { /*** * 此方法针对本地文件 * 提取文件信息并返回内容 * @param filePath 文件储存地址 * @param imgRoot 图片存储地址 * @return */ public static String processDocumentFromFilePath(String filePath,String imgRoot) throws IOException { File file = new File(filePath); FileInputStream fileInputStream = new FileInputStream(file); // 根据文件类型调用适当的处理方法 switch (fileTypeName(filePath)) { case "doc": return processWordDocDocumentFromStream(fileInputStream,imgRoot); case "docx": return processWordDocxDocumentFromStream(fileInputStream,imgRoot); case "pdf": return processPdfDocumentFromStream(fileInputStream,imgRoot); case "ppt": return processPptDocumentFromStream(fileInputStream,imgRoot); case "pptx": return processPptxDocumentFromStream(fileInputStream,imgRoot); default: throw n