package com.docus.sw.souyin; import com.alibaba.excel.EasyExcel; import com.docus.sw.Config; import com.docus.sw.fenpan.Document; import com.docus.sw.fenpan.FileTypeEnum; import com.docus.sw.fenpan.Pieces; import com.docus.sw.fenpan.Roll; import com.google.gson.Gson; import org.apache.commons.imaging.ImageInfo; import org.apache.commons.imaging.ImageReadException; import org.apache.commons.imaging.Imaging; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class SuoyinService { //读取分盘后的结果。 //宗,盘,卷,件 //输出目录文件 //生成片头,片尾 //统计出需要使用的 胶片量 public static void main(String[] args) throws IOException { Config.loadConfig(); String path = "C:\\jiahsi-saomiao\\0001"; new SuoyinService().index(path); } public void index(String path) { // ArrayList indexPlates = new ArrayList<>(); Map map = new HashMap<>(); findAllDir(path, map); //计算出宗 //计算出每个盘的目录。 for (IndexPlate indexPlate : map.values()) { String absolutePath = indexPlate.getAbsolutePath(); File file = new File(absolutePath); File[] files = file.listFiles(); List rollList = new ArrayList<>(); //卷 for (File rollFile : files) { if (rollFile.getName().equals("片头")) { //填充卷 Roll roll = new Roll(rollFile.getName(), rollFile.getAbsolutePath()); rollList.add(roll); } else if (rollFile.getName().equals("片尾")) { //填充卷 Roll roll = new Roll(rollFile.getName(), rollFile.getAbsolutePath()); rollList.add(roll); } else { // List pieceList = new ArrayList<>(); File[] piecesFile = rollFile.listFiles(); for(File piece:piecesFile){ List documentList = new ArrayList<>(); Pieces pieces = new Pieces(FileTypeEnum.JPG, piece.getAbsolutePath(), piece.getName()); for (File docfile : piece.listFiles()) { //非图片模式,跳过。 if(!(docfile.getName().endsWith(".jpg") || docfile.getName().endsWith(".png") || docfile.getName().endsWith(".jpeg") || docfile.getName().endsWith(".tif") || docfile.getName().endsWith(".tiff")|| file.getName().endsWith(".jp2") || file.getName().endsWith(".jpm"))|| file.getName().endsWith(".gif")){ continue; } if (file.getName().endsWith(".jp2") || file.getName().endsWith(".jpm")) { // 读取 JPEG 2000 图像文件 try { BufferedImage image = ImageIO.read(file); int height = image.getHeight(); int width = image.getWidth(); Document document = new Document(width, height, 300); documentList.add(document); } catch (IOException e) { throw new RuntimeException(e); } // ImageInfo imageInfo = Imaging.getImageInfo(inputFile); } else { try { ImageInfo imageInfo = Imaging.getImageInfo(docfile); int height = imageInfo.getHeight(); int width = imageInfo.getWidth(); int physicalHeightDpi = imageInfo.getPhysicalHeightDpi(); Document document = new Document(width, height, physicalHeightDpi); documentList.add(document); } catch (IOException e) { // FileUtils.delete(file); throw new RuntimeException("非图片格式", e); } catch (ImageReadException e) { // FileUtils.delete(file); throw new RuntimeException(e); } catch (IllegalArgumentException e) { // FileUtils.delete(file); } } } pieces.put(documentList); pieceList.add(pieces); } //填充卷 Roll roll = new Roll(rollFile.getName(), rollFile.getAbsolutePath()); roll.putAll(pieceList); rollList.add(roll); } } indexPlate.putAll(rollList); } //生成索引目录 for(IndexPlate indexPlate : map.values()){ List rollList = indexPlate.getRollList(); //计算出总size Double totalPage = 0d; for(Roll roll:rollList){ List piecesList = roll.getPiecesList(); totalPage+=piecesList.size(); } Integer pianPageNum = 0; Integer totalSize = 0; for(Roll roll:rollList){ //跳过片头 if(roll.getName().equals("片头")){ continue; } //跳过片尾 if(roll.getName().equals("片尾")){ continue; } List piecesList = roll.getPiecesList(); for(Pieces pieces:piecesList){ Integer size = pieces.getDocumentList().size(); totalSize+=size; } } List indexPageRows= indexGen(indexPlate, rollList, pianPageNum, totalSize); //修正数据 System.out.println(new Gson().toJson(indexPageRows)); //生成excel List mesEasyExcels = new ArrayList<>(); for(IndexPageRow indexPageRowTemp:indexPageRows){ mesEasyExcels.add(MesEasyExcel.create(indexPageRowTemp)); } EasyExcel.write(indexPlate.getAbsolutePath()+"\\index.xls", MesEasyExcel.class).sheet("test").doWrite(mesEasyExcels); ExcelUtil.toPdf(indexPlate.getAbsolutePath()+"\\index.xls",indexPlate.getAbsolutePath()+"\\index.pdf"); Integer page = PdfUtil.getPage(indexPlate.getAbsolutePath() + "\\index.pdf"); indexPageRows= indexGen(indexPlate, rollList, page, totalSize); //修正数据 System.out.println(new Gson().toJson(indexPageRows)); //生成excel mesEasyExcels = new ArrayList<>(); for(IndexPageRow indexPageRowTemp:indexPageRows){ mesEasyExcels.add(MesEasyExcel.create(indexPageRowTemp)); } EasyExcel.write(indexPlate.getAbsolutePath()+"\\index.xls", MesEasyExcel.class).sheet("test").doWrite(mesEasyExcels); ExcelUtil.toPdf(indexPlate.getAbsolutePath()+"\\index.xls",indexPlate.getAbsolutePath()+"\\index.pdf"); //写入文件夹。 PdfToPic.toPic(indexPlate.getAbsolutePath()+"\\index.pdf",indexPlate.getAbsolutePath()+"/片头","0000","jpg"); PdfToPic.toPicDesc(indexPlate.getAbsolutePath()+"\\index.pdf",indexPlate.getAbsolutePath()+"/片尾","0010","jpg"); //再重算一次索引,以及将文件进行替换。 } //读取片头 //读取片尾 //生成excel //生成图片 // } private List indexGen(IndexPlate indexPlate, List rollList, Integer pianPageNum, Integer totalSize) { List indexPageRows = new ArrayList<>(); int start = 1; //添加片头 for(Roll roll: rollList){ //跳过片头 if(roll.getName().equals("片头")){ File file = new File(roll.getAbsolutePath()); int fileasize = file.listFiles().length; fileasize+=pianPageNum; IndexPageRow indexPageRow = new IndexPageRow(indexPlate.getZongName(), indexPlate.getName(), roll.getName(), "", fileasize, start); start+=fileasize; indexPageRows.add(indexPageRow); start+=1; } } //处理偏中 for(Roll roll: rollList){ //跳过片头 if(roll.getName().equals("片头")){ continue; } //跳过片尾 if(roll.getName().equals("片尾")){ continue; } List piecesList = roll.getPiecesList(); for(Pieces pieces:piecesList){ IndexPageRow indexPageRow = new IndexPageRow(indexPlate.getZongName(), indexPlate.getName(), roll.getName(), pieces.getName(), pieces.getDocumentList().size(), start); start+=pieces.getDocumentList().size(); indexPageRows.add(indexPageRow); } start+=1; } //添加片尾 for(Roll roll: rollList){ //跳过片头 if(roll.getName().equals("片尾")){ File file = new File(roll.getAbsolutePath()); int fileasize = file.listFiles().length; fileasize+=pianPageNum; IndexPageRow indexPageRow = new IndexPageRow(indexPlate.getZongName(), indexPlate.getName(), roll.getName(), "", fileasize, start); start+=fileasize; indexPageRows.add(indexPageRow); start+=1; } } //加上统计 IndexPageRow indexPageRow = new IndexPageRow("", "", "", "有效画幅数", totalSize, null); indexPageRows.add(indexPageRow); return indexPageRows; } private void findAllDir(String absolutePath, Map map) { File sourceFile = new File(absolutePath); File[] files = sourceFile.listFiles(); for (File o : files) { if (o.isDirectory()) { findAllDir(o.getAbsolutePath(), map); } if (o.isFile()) { //判断是word,pdf,pic if (o.getName().endsWith(".pdf")) { // new Plate() } else if (o.getName().endsWith(".docx") || o.getName().endsWith(".doc")) { } else if (o.getName().endsWith(".jpg") || o.getName().endsWith(".png") || o.getName().endsWith(".jpeg") || o.getName().endsWith(".tif") || o.getName().endsWith(".tiff")) { if(o.getParentFile().getName().equals("片头")||o.getParentFile().getName().equals("片尾")){ continue; } //件 File parentFile = o.getParentFile() //卷 .getParentFile() //盘 .getParentFile(); if(map.get(parentFile.getAbsolutePath())==null){ IndexPlate indexPlate = new IndexPlate(parentFile.getAbsolutePath(), parentFile.getName(),parentFile.getParentFile().getName()); map.put(parentFile.getAbsolutePath(),indexPlate); } } else { System.out.println("请删除无效的文件:" + o.getAbsolutePath()); } break; } } } }