反对pdf/图片/表格等格式文件装换成excel文件或其余格式文件
首先,图片辨认过程
@Test void request_002() throws FileNotFoundException { //读取文件夹 String fileSource = "C:\\Users\\Administrator\\Desktop\\work\\20221217\\invoice\\pageFiles"; String fileName = fileSource + "\\excelFile\\" + "票据_" + DateUtil.format(DateUtil.date(), DatePattern.PURE_DATETIME_PATTERN) + ".xlsx"; long beginTime = System.currentTimeMillis(); List<File> files = FileUtil.loopFiles(fileSource); List<InvoiceVO> getList = new ArrayList<>(); for (File file : files) { Console.log("开始辨认文件 : {}", file.getName()); //申请参数 RecognizeInvoiceRequest request = new RecognizeInvoiceRequest(); RuntimeOptions runtime = new RuntimeOptions(); request.body = new FileInputStream(file.getPath()); try { RecognizeInvoiceResponse response = client().recognizeInvoiceWithOptions(request, runtime); Console.log("文件 :{} 辨认胜利", file.getName()); JSONObject jsonObject = JSONObject.parseObject(response.body.data); String data = jsonObject.getString("data"); Console.log("data : => {}", data); InvoiceVO invoiceData = JSONUtil.toBean(data, InvoiceVO.class); getList.add(invoiceData); } catch (TeaException error) { Console.log(error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); Console.log(error.message); } } //执行写出 if (getList.size() > 0) { Console.log("开始写出excel文件~"); toExcel(getList, fileName); Console.log("文件 : {} 写出胜利! 总耗时 : {} 秒", fileName, (System.currentTimeMillis() - beginTime) / 1000); } }
接着,写出excel文件
private void toExcel(List<InvoiceVO> getList, String filePathName) { //合并单元格 (开始列,完结列) TreeMap<Integer, Integer> treeMap = new TreeMap<>(); int beforeRow = 1; //不进行合并的列 List<Integer> unMergeList = new ArrayList<>(); //写出的文件列表 List<InvoiceVO> dataList = new ArrayList<>(); for (int i = 0; i < getList.size(); i++) { InvoiceVO invoiceVO = getList.get(i); List<InvoiceDetails> details = invoiceVO.getInvoiceDetails(); for (InvoiceDetails detail : details) { InvoiceVO vo = new InvoiceVO(); BeanUtil.copyProperties(invoiceVO, vo); BeanUtil.copyProperties(detail, vo); dataList.add(vo); } //避免越过合并解决 int detailSize = details.size(); int afterRowSize = beforeRow + detailSize; treeMap.put(beforeRow, afterRowSize - 1); if(detailSize <= 1){ unMergeList.add(beforeRow); } beforeRow = afterRowSize; } //写出文件 ExcelWriter writer = ExcelUtil.getWriter(filePathName); //题目 addHeader(writer); //主动列宽 writer.autoSizeColumnAll(); treeMap.forEach((k, v) -> { //一行详情就不进行合并 if(!unMergeList.contains(k)){ for (int i = 0; i < 22; i++) { //merge : 开始的列号,完结的列号,开始的行号,完结的行号,合并后的数据(主动填充输入数据的列表),是否保留原款式 writer.merge(k, v, i, i, "合并数据", false); } } }); writer.setOnlyAlias(true); writer.write(dataList,true); writer.close(); }
最初,效果图
更多具体性能实现微/电:16717696360