ConverOldSystemData.java 7.7 KB

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