ConverOldSystemData.java 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. package com.gz;
  2. import cn.hutool.core.io.FileTypeUtil;
  3. import cn.hutool.core.io.FileUtil;
  4. import cn.hutool.core.io.IoUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import cn.hutool.json.JSON;
  7. import cn.hutool.json.JSONArray;
  8. import cn.hutool.json.JSONObject;
  9. import cn.hutool.json.JSONUtil;
  10. import com.gz.dto.archive.ArchiveDTO;
  11. import com.itextpdf.text.Document;
  12. import com.itextpdf.text.DocumentException;
  13. import com.itextpdf.text.Image;
  14. import com.itextpdf.text.Rectangle;
  15. import com.itextpdf.text.pdf.PdfWriter;
  16. import lombok.extern.slf4j.Slf4j;
  17. import java.io.File;
  18. import java.io.FileNotFoundException;
  19. import java.io.FileOutputStream;
  20. import java.io.IOException;
  21. import java.net.MalformedURLException;
  22. import java.nio.charset.Charset;
  23. import java.util.ArrayList;
  24. import java.util.Collections;
  25. import java.util.Comparator;
  26. import java.util.List;
  27. @Slf4j
  28. public class ConverOldSystemData {
  29. private static final Charset CHARSET = Charset.forName("UTF-8");
  30. private static List<JSON> rows = new ArrayList<>();
  31. public static void main(String[] args) throws FileNotFoundException {
  32. final String archiveTypePath = "H:\\10_建设用地类";
  33. // 数据目录文件夹
  34. File archiveTypeFolder = FileUtil.file(archiveTypePath);
  35. if (archiveTypeFolder == null || !archiveTypeFolder.exists()) {
  36. throw new FileNotFoundException("档案分类文件夹不存在");
  37. }
  38. // 循环档案文件夹
  39. for (File archiveFolder : archiveTypeFolder.listFiles()) {
  40. if (archiveFolder.isDirectory()) {
  41. // 存储图片文件
  42. List<File> images = new ArrayList<>();
  43. File[] files = archiveFolder.listFiles();
  44. // 数据Json
  45. JSON archiveJson = null;
  46. // 卷内目录Json
  47. JSON innerArchiveJson = null;
  48. for (File file : files) {
  49. String fileType = FileTypeUtil.getType(file);
  50. if ("jpg".equals(fileType)) {
  51. // 图片文件
  52. images.add(file);
  53. } else if ("json".equals(fileType)) {
  54. // Json文件
  55. String fileName = FileUtil.getName(file);
  56. if (fileName.equals("data.json")) {
  57. archiveJson = JSONUtil.readJSON(file, CHARSET);
  58. } else if (fileName.equals("inner.json")) {
  59. innerArchiveJson = JSONUtil.readJSON(file, CHARSET);
  60. }
  61. }
  62. }
  63. // 排序图片
  64. Collections.sort(images, Comparator.comparingInt(o -> Integer.parseInt(getQuantity(FileUtil.getName(o)))));
  65. ArchiveDTO archiveDTO = convertArchiveData(archiveJson);
  66. imgToPdf(images, StrUtil.format("F:/temp/{}.pdf", archiveDTO.getDh()));
  67. log.info("读取档案文件成功 数据:{} 卷内目录:{} 图片文件:{}张", archiveJson, innerArchiveJson, images.size());
  68. // break;
  69. } else {
  70. log.warn("档案分类文件夹下出现非目录文件夹,地址:{}", archiveFolder.getAbsolutePath());
  71. }
  72. }
  73. // ExcelWriter writer = ExcelUtil.getWriter();
  74. //// writer.addHeaderAlias("bgqx", "保管期限");
  75. //// writer.addHeaderAlias("dh", "档号");
  76. //// writer.addHeaderAlias("zny", "止年月");
  77. //// writer.addHeaderAlias("js", "件数");
  78. //// writer.addHeaderAlias("bz", "备注");
  79. //// writer.addHeaderAlias("ys", "页数");
  80. //// writer.addHeaderAlias("mj", "密级");
  81. //// writer.addHeaderAlias("ajh", "案卷号");
  82. //// writer.addHeaderAlias("qny", "起年月");
  83. //// writer.addHeaderAlias("flh", "分类号");
  84. //// writer.addHeaderAlias("mlh", "目录号");
  85. //// writer.addHeaderAlias("nd", "年度");
  86. //// writer.addHeaderAlias("tm", "题名");
  87. //
  88. // writer.write(rows, true);
  89. // FileOutputStream out = new FileOutputStream("F:\\temp\\10_建设用地类.xls");
  90. // writer.flush(out, true);
  91. // writer.close();
  92. // IoUtil.close(out);
  93. }
  94. private static ArchiveDTO convertArchiveData(JSON json) {
  95. ArchiveDTO c = new ArchiveDTO();
  96. JSONArray a = (JSONArray) json;
  97. JSONObject b = (JSONObject) a.get(0);
  98. // c.setBgqx(b.getStr("bgqx"));
  99. c.setDh(b.getStr("dh"));
  100. rows.add(b);
  101. return c;
  102. }
  103. /**
  104. * 图片转Pdf
  105. *
  106. * @param images 图片集合
  107. * @param pdfPath pdf存储路径
  108. * @author LiuChangLan
  109. * @since 2022/1/25 14:07
  110. */
  111. private static void imgToPdf(List<File> images, String pdfPath) throws FileNotFoundException {
  112. Document document = new Document();
  113. // 设置文档页边距
  114. document.setMargins(0, 0, 0, 0);
  115. FileOutputStream fos = null;
  116. try {
  117. fos = new FileOutputStream(pdfPath);
  118. PdfWriter.getInstance(document, fos);
  119. // 打开文档
  120. document.open();
  121. float firstImageHeight = 0;
  122. float firstImageWidth = 0;
  123. for (int i = 0; i < images.size(); i++) {
  124. File image = images.get(i);
  125. if ("jpg".equals(FileTypeUtil.getType(image))) {
  126. Image instance = Image.getInstance(image.getAbsolutePath());
  127. // 图片宽度
  128. float imgWidth = instance.getWidth();
  129. // 图片高度
  130. float imgHeight = instance.getHeight();
  131. // 读取第一张图片高度
  132. if (i == 0) {
  133. firstImageWidth = imgWidth;
  134. firstImageHeight = imgHeight;
  135. }
  136. if (imgWidth != firstImageWidth) {
  137. instance.scaleAbsolute(firstImageWidth, firstImageHeight);
  138. }
  139. // 设置页面宽高与图片一致
  140. Rectangle rectangle = new Rectangle(firstImageWidth, firstImageHeight);
  141. document.setPageSize(rectangle);
  142. // 图片居中
  143. instance.setAlignment(Image.ALIGN_CENTER);
  144. // 新建一页添加图片
  145. document.newPage();
  146. document.add(instance);
  147. }
  148. }
  149. } catch (DocumentException e) {
  150. e.printStackTrace();
  151. } catch (MalformedURLException e) {
  152. e.printStackTrace();
  153. } catch (IOException e) {
  154. e.printStackTrace();
  155. } finally {
  156. document.close();
  157. IoUtil.close(fos);
  158. log.info("图片转换pdf成功");
  159. }
  160. }
  161. /**
  162. * 读取字符串中开头数字
  163. *
  164. * @author LiuChangLan
  165. * @since 2022/1/25 14:08
  166. */
  167. public static String getQuantity(String regular) {
  168. int index = 0;
  169. for (int i = 0; i < regular.length(); i++) {
  170. char c = regular.charAt(i);
  171. if (Character.isDigit(c)) {
  172. if (i == regular.length() - 1) {
  173. index = i + 1;
  174. } else {
  175. index = i;
  176. }
  177. continue;
  178. } else {
  179. index = i;
  180. break;
  181. }
  182. }
  183. return regular.substring(0, index);
  184. }
  185. }