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-失败");
}
}
解析pdf表格内容
经典19922026-08-15 11:06
相关推荐
律宏阔2 小时前
WSL Docker 端口明明空闲,但就是绑不上端口律宏阔2 小时前
Windows 禁用联想笔记本所有 Lenovo 后台服务律宏阔2 小时前
WSL 突然断网,无法 ping 内网或外网小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升rockmelodies5 天前
# Windows Server2008 R2 Standard(SP1镜像U盘)重置本地管理员密码【完整详细步骤】kakakahahahaha6 天前
Windows C盘空间不足的安全清理与迁移流程huaweichenai6 天前
spring boot操作PDF做咩啊~6 天前
远程连接提示:身份验证错误,要求的函数不受支持百事牛科技6 天前
PPT只读怎么取消?四种情况分别处理开开心心就好6 天前
批量提取PDF中的图片,直接导出原图