解析pdf表格内容

复制代码
private List<List<String>> getMeetingTableList(MultipartFile file) {
    try {
        List<List<String>> allList = new LinkedList<>();
        PdfDocument pdf = new PdfDocument(file.getBytes());
        int num = pdf.getPages().getCount();//获取页数
        // 由于spire.office只可以获取前10页的pdf内容,所以拆分pdf
        int copies = num / 10;//份数
        int remainder = num % 10;//取余
        if (remainder > 0) {
            copies++;//取余大于0,份数加1
        }
        for (int j = 0; j < copies; j++) {
            PdfDocument doc = new PdfDocument();
            int start = j * 10;//拆分读取的起始页
            int end = (start + 9) > num - 1 ? num - 1 : start + 9;//结尾页
            doc.insertPageRange(pdf, start, end);//将读取到的数据初始话到新的PdfDocument 里面
            //创建一个PdfTableExtractor实例
            PdfTableExtractor extractor = new PdfTableExtractor(doc);

            for (int i = 0; i < 10; i++) {
                //将拆分出的新的PdfDocument 循环每一页做业务处理
                if (j == (copies - 1) && i == remainder) {
                    break;
                }
                //业务代码(可以提取文字、表格、图片等做相应的业务处理)
                PdfTable[] tableLists;
                for (int page = 0; page < doc.getPages().getCount(); page++) {
                    tableLists = extractor.extractTable(page);
                    if (tableLists != null && tableLists.length > 0) {
                        for (PdfTable table : tableLists) {
                            int row = table.getRowCount();
                            int column = table.getColumnCount();
                            List<List<String>> rowList = new LinkedList<>();
                            for (int h = 0; h < row; h++) {
                                List<String> lineList = new LinkedList<>();
                                for (int l = 0; l < column; l++) {
                                    String text = table.getText(h, l);
                                    if(StrUtil.isNotBlank(text)){
                                        text = text.replace("\n", "");
                                    }
                                    lineList.add(text);
                                }
                                rowList.add(lineList);
                            }
                            allList.addAll(rowList);
                        }
                    }
                }
                doc.close();
            }
        }
        return allList;
    } catch (IOException e) {
        log.error("站班会-解析pdf-异常:", e);
        throw new RuntimeException("站班会-解析pdf-失败");
    }
}
相关推荐
公子小六8 小时前
基于.NET的Windows窗体编程之WinForms滑块与上下控件
windows·microsoft·c#·.net·winforms
学海浪太大13 小时前
笔记本电脑插入显示器没反应
windows
庖丁AI14 小时前
PDF 转 Markdown 工具怎么选?AI 知识库和 RAG 场景要注意什么
人工智能·pdf·文档解析
黄一一91124314 小时前
告别手动敲字,本地截图 OCR,识别完直接复制!开源截图识别工具
windows·ocr·开源软件·贴图
几层山下15 小时前
WPS的word文档转pdf java实现不乱格式生成-已解决
java·pdf·word·wps
洪流之源16 小时前
Windows 远程 Ubuntu 24.04 桌面
linux·windows·ubuntu
是小李呀17 小时前
Windows 虚拟内存配置完全指南:从原理到实操,彻底解决内存不足与 OOM 问题
windows
毕竟是shy哥19 小时前
windows电脑WSL下本地构建docker镜像
windows·docker·容器
kakakahahahaha1 天前
【Windows】C盘低空间反复复发的排查与扩容边界
c语言·windows·电脑·笔记本电脑·内容运营·软件需求
2301_800074211 天前
map,list简单方法
windows·python·list