补充完整的索引
parent
1dde1a9e3b
commit
b5d3a7a526
@ -0,0 +1,330 @@
|
|||||||
|
package com.docus.sw.souyin;
|
||||||
|
|
||||||
|
import com.alibaba.excel.EasyExcel;
|
||||||
|
import com.alibaba.excel.util.FileUtils;
|
||||||
|
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.docus.sw.word.GetPicsDocx;
|
||||||
|
import com.docus.sw.word.PdfBoxUtils;
|
||||||
|
import com.docus.sw.word.ReadImgDoc;
|
||||||
|
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.nio.file.Files;
|
||||||
|
import java.nio.file.StandardCopyOption;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class CheckService {
|
||||||
|
|
||||||
|
//读取分盘后的结果。
|
||||||
|
//宗,盘,卷,件
|
||||||
|
//输出目录文件
|
||||||
|
//生成片头,片尾
|
||||||
|
//统计出需要使用的 胶片量
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
Config.loadConfig();
|
||||||
|
String path = "C:\\Users\\zhanghai\\Desktop\\桌面\\test\\ppp\\ppp";
|
||||||
|
new CheckService().index(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void index(String path) throws IOException {
|
||||||
|
Map<String, IndexPlate> 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<Roll> 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<Pieces> pieceList = new ArrayList<>();
|
||||||
|
File[] piecesFile = rollFile.listFiles();
|
||||||
|
for (File piece : piecesFile) {
|
||||||
|
|
||||||
|
//区分word和pdf
|
||||||
|
if (piece.getName().endsWith(".doc")) {
|
||||||
|
Pieces pieces = new Pieces(FileTypeEnum.DOC, piece.getAbsolutePath(), piece.getName());
|
||||||
|
|
||||||
|
String teamName = "tempIndex/" + UUID.randomUUID();
|
||||||
|
File temp = new File(teamName);
|
||||||
|
if (!temp.exists()) {
|
||||||
|
temp.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
ReadImgDoc.readPicture(piece.getAbsolutePath(), temp.getAbsolutePath());
|
||||||
|
File[] listFiles = temp.listFiles();
|
||||||
|
genPieces(pieces, listFiles, FileTypeEnum.DOC);
|
||||||
|
pieceList.add(pieces);
|
||||||
|
|
||||||
|
//删除对应的temp 文件
|
||||||
|
FileUtils.delete(temp);
|
||||||
|
} else if (piece.getName().endsWith(".docx")) {
|
||||||
|
Pieces pieces = new Pieces(FileTypeEnum.DOCX, piece.getAbsolutePath(), piece.getName());
|
||||||
|
|
||||||
|
String teamName = "tempIndex/" + UUID.randomUUID();
|
||||||
|
File temp = new File(teamName);
|
||||||
|
if (!temp.exists()) {
|
||||||
|
temp.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
GetPicsDocx.getPics(piece.getAbsolutePath(), temp.getAbsolutePath());
|
||||||
|
File[] listFiles = temp.listFiles();
|
||||||
|
genPieces(pieces, listFiles, FileTypeEnum.DOCX);
|
||||||
|
pieceList.add(pieces);
|
||||||
|
//删除对应的temp 文件
|
||||||
|
FileUtils.delete(temp);
|
||||||
|
} else if (piece.getName().endsWith(".pdf")) {
|
||||||
|
Pieces pieces = new Pieces(FileTypeEnum.DOC, piece.getAbsolutePath(), piece.getName());
|
||||||
|
|
||||||
|
String teamName = "tempIndex/" + UUID.randomUUID();
|
||||||
|
File temp = new File(teamName);
|
||||||
|
if (!temp.exists()) {
|
||||||
|
temp.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
PdfBoxUtils.pdf2image(piece.getAbsolutePath(), temp.getAbsolutePath());
|
||||||
|
File[] listFiles = temp.listFiles();
|
||||||
|
genPieces(pieces, listFiles, FileTypeEnum.DOC);
|
||||||
|
pieceList.add(pieces);
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
//删除对应的temp 文件
|
||||||
|
// temp.delete();
|
||||||
|
FileUtils.delete(temp);
|
||||||
|
} else {
|
||||||
|
Pieces pieces = new Pieces(FileTypeEnum.JPG, piece.getAbsolutePath(), piece.getName());
|
||||||
|
File[] listFiles = piece.listFiles();
|
||||||
|
genPieces(pieces, listFiles, FileTypeEnum.JPG);
|
||||||
|
pieceList.add(pieces);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//填充卷
|
||||||
|
Roll roll = new Roll(rollFile.getName(), rollFile.getAbsolutePath());
|
||||||
|
roll.putAll(pieceList);
|
||||||
|
rollList.add(roll);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
indexPlate.putAll(rollList);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
FileUtils.delete(new File("tempIndex"));
|
||||||
|
|
||||||
|
//生成索引目录
|
||||||
|
for (IndexPlate indexPlate : map.values()) {
|
||||||
|
List<Roll> rollList = indexPlate.getRollList();
|
||||||
|
for(Roll roll:rollList){
|
||||||
|
List<Pieces> piecesList = roll.getPiecesList();
|
||||||
|
for(Pieces pieces:piecesList){
|
||||||
|
List<Document> documentList = pieces.getDocumentList();
|
||||||
|
for(Document document:documentList){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void genPieces(Pieces pieces, File[] listFiles, FileTypeEnum fileTypeEnum) {
|
||||||
|
List<Document> documentList = new ArrayList<>();
|
||||||
|
|
||||||
|
for (File docfile : listFiles) {
|
||||||
|
//非图片模式,跳过。
|
||||||
|
if (!(docfile.getName().endsWith(".jpg") || docfile.getName().endsWith(".png")
|
||||||
|
|| docfile.getName().endsWith(".jpeg") || docfile.getName().endsWith(".tif")
|
||||||
|
|| docfile.getName().endsWith(".tiff") || docfile.getName().endsWith(".jp2") || docfile.getName().endsWith(".jpm")) || docfile.getName().endsWith(".gif")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (docfile.getName().endsWith(".jp2") || docfile.getName().endsWith(".jpm")) {
|
||||||
|
// 读取 JPEG 2000 图像文件
|
||||||
|
|
||||||
|
try {
|
||||||
|
BufferedImage image = ImageIO.read(docfile);
|
||||||
|
int height = image.getHeight();
|
||||||
|
int width = image.getWidth();
|
||||||
|
Document document = new Document(width, height, 300, docfile.getName());
|
||||||
|
documentList.add(document);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
} 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, docfile.getName());
|
||||||
|
documentList.add(document);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException("非图片格式", e);
|
||||||
|
} catch (ImageReadException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pieces.put(documentList);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<IndexPageRow> indexGen(IndexPlate indexPlate, List<Roll> rollList, Integer pianPageNum, Integer totalSize) {
|
||||||
|
List<IndexPageRow> 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<Pieces> 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<String, IndexPlate> 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")) {
|
||||||
|
|
||||||
|
File rofile = o.getParentFile().getParentFile();
|
||||||
|
// new Plate()
|
||||||
|
if (map.get(rofile.getAbsolutePath()) == null) {
|
||||||
|
IndexPlate indexPlate = new IndexPlate(rofile.getAbsolutePath(), rofile.getName(), rofile.getParentFile().getName());
|
||||||
|
map.put(rofile.getAbsolutePath(), indexPlate);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (o.getName().endsWith(".docx") || o.getName().endsWith(".doc")) {
|
||||||
|
File rofile = o.getParentFile().getParentFile();
|
||||||
|
// new Plate()
|
||||||
|
if (map.get(rofile.getAbsolutePath()) == null) {
|
||||||
|
IndexPlate indexPlate = new IndexPlate(rofile.getAbsolutePath(), rofile.getName(), rofile.getParentFile().getName());
|
||||||
|
map.put(rofile.getAbsolutePath(), indexPlate);
|
||||||
|
}
|
||||||
|
} 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue