.gitignore
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ HELP.md target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ !**/src/test/**/target/ ### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans .sts4-cache ### IntelliJ IDEA ### .idea *.iws *.iml *.ipr logs ### NetBeans ### /nbproject/private/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ build/ !**/src/main/**/build/ !**/src/test/**/build/ ### VS Code ### .vscode/ pom.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,129 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.chinaztt.mes.data-acquisition</groupId> <artifactId>data-acquisition</artifactId> <version>0.0.1-SNAPSHOT</version> <name>data-acquisition</name> <description>data-acquisition</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.6.3</spring-boot.version> </properties> <dependencies> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> <version>5.12.0</version> </dependency> <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.34.0</version> <!-- Use the latest version --> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>net.sf.ucanaccess</groupId> <artifactId>ucanaccess</artifactId> <version>5.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-scratchpad --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.16</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <finalName>${project.name}</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <mainClass>com.chinaztt.mes.docx.DataAcquisitionApplication</mainClass> <skip>false</skip> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project> src/main/java/com/chinaztt/mes/docx/DataAcquisitionApplication.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.chinaztt.mes.docx; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DataAcquisitionApplication { public static void main(String[] args) { SpringApplication.run(DataAcquisitionApplication.class, args); } } src/main/java/com/chinaztt/mes/docx/constant/CommonConstants.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,8 @@ package com.chinaztt.mes.docx.constant; public interface CommonConstants { Integer SUCCESS = 0; Integer FAIL = 1; } src/main/java/com/chinaztt/mes/docx/constant/TomcatConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.chinaztt.mes.docx.constant; import org.apache.catalina.connector.Connector; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class TomcatConfig { @Bean public TomcatServletWebServerFactory webServerFactory() { TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(); factory.addConnectorCustomizers((Connector connector) -> { connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}."); connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}."); }); return factory; } } src/main/java/com/chinaztt/mes/docx/controller/DocxController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package com.chinaztt.mes.docx.controller; import com.chinaztt.mes.docx.dto.GetFileDto; import com.chinaztt.mes.docx.service.DocxService; import com.chinaztt.mes.docx.util.R; import net.sourceforge.tess4j.TesseractException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.sql.SQLException; @RestController @RequestMapping("/lims") public class DocxController { @Autowired private DocxService docxService; @GetMapping("/getFile") public R<?> getFile(GetFileDto getFileDto) throws IOException, SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, TesseractException { return docxService.getFile(getFileDto); } @GetMapping("/moveFile") public R<?> moveFile(String startFilePath, String endFilePath, String fileType) { return docxService.moveFile(startFilePath, endFilePath, fileType); } } src/main/java/com/chinaztt/mes/docx/dto/GetFileDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,25 @@ package com.chinaztt.mes.docx.dto; import lombok.Data; @Data public class GetFileDto { // ééè·¯å¾ private String filePath; // æä»¶åç¼ private String fileExtension; // å§æåå· private String entrustCode; // æ ·åç¼å· private String sampleCode; // å§æç¼å·å段 private String mdbEntrustCode; // æ ·åç¼å·å段 private String mdbSampleCode; // dbæä»¶åç§° private String dbFileName; // å çº¤å¸¦åæ®µ private String fiberOpticRibbonCode; // å çº¤å¸¦æ°æ® private String fiberOpticRibbon; } src/main/java/com/chinaztt/mes/docx/handler/GlobalExceptionHandler.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.chinaztt.mes.docx.handler; import com.chinaztt.mes.docx.util.R; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler({Exception.class}) public R<?> exception(Exception e) { return R.failed(e.getMessage()); } } src/main/java/com/chinaztt/mes/docx/service/DocxService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.chinaztt.mes.docx.service; import com.chinaztt.mes.docx.dto.GetFileDto; import com.chinaztt.mes.docx.util.R; import net.sourceforge.tess4j.TesseractException; import java.io.IOException; import java.sql.SQLException; public interface DocxService { R<?> getFile(GetFileDto getFileDto) throws IOException, SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, TesseractException; R<?> moveFile(String startFilePath, String endFilePath, String fileType); } src/main/java/com/chinaztt/mes/docx/service/impl/DocxServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,120 @@ package com.chinaztt.mes.docx.service.impl; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ObjectUtil; import com.chinaztt.mes.docx.dto.GetFileDto; import com.chinaztt.mes.docx.service.DocxService; import com.chinaztt.mes.docx.util.R; import com.chinaztt.mes.docx.util.TakeWords; import net.sourceforge.tess4j.TesseractException; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import java.io.*; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Objects; @Service public class DocxServiceImpl implements DocxService { @Override public R<?> getFile(GetFileDto getFileDto) throws IOException, SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, TesseractException { File file = getFileStart(getFileDto.getFilePath(), getFileDto.getFileExtension()); if (!file.exists()) { return R.failed("æªæ¥è¯¢å°è¯¥è·¯å¾ï¼" + getFileDto.getFilePath() + "ä¸åå¨ï¼" + getFileDto.getFileExtension() + "ç»å°¾çæä»¶ï¼"); } switch (getFileDto.getFileExtension()) { case ".docx": return R.ok(TakeWords.readWordFile(file)); case ".xlsx": try { return R.ok(TakeWords.readExcelFile(file)); } catch (FileNotFoundException e) { return R.failed("å¦ä¸ä¸ªç¨åºæ£å¨ä½¿ç¨æ¤æä»¶ï¼æ æ³è¿è¡æ°æ®ééã"); } case ".txt": return R.ok(TakeWords.readTxtFile(file)); case ".csv": return R.ok(TakeWords.readCsvFile(file)); case ".mdb": if (ObjectUtil.isEmpty(getFileDto.getDbFileName()) || Objects.equals(getFileDto.getDbFileName(), "null")) { return R.failed("æªé ç½®.mdbééæä»¶åç§°ï¼"); } return R.ok(TakeWords.readMdbFile(file, getFileDto)); case ".db": if (ObjectUtil.isEmpty(getFileDto.getDbFileName()) || Objects.equals(getFileDto.getDbFileName(), "null")) { return R.failed("æªé ç½®.dbééæä»¶åç§°ï¼"); } return R.ok(TakeWords.readDbFile(file, getFileDto)); case ".png": return R.ok(TakeWords.readPngFile(file)); default: return R.failed("åç¼åé ç½®é误ï¼"); } } @Override public R<?> moveFile(String startFilePath, String endFilePath, String fileType) { // æºæä»¶è·¯å¾ File startFile= getFileStart(startFilePath, fileType); // ç®çç®å½è·¯å¾ File endDirection=new File(endFilePath); // 妿ç®çç®å½è·¯å¾ä¸åå¨ï¼åè¿è¡å建 if(!endDirection.exists()) { endDirection.mkdirs(); } // ç®çæä»¶è·¯å¾=ç®çç®å½è·¯å¾+æºæä»¶åç§° File endFile=new File(endDirection+ File.separator+ startFile.getName()); try { // è°ç¨Fileç±»çæ ¸å¿æ¹æ³renameTo if (startFile.renameTo(endFile)) { return R.ok("æä»¶ç§»å¨æåï¼"); } else { return R.failed("æä»¶ç§»å¨å¤±è´¥ï¼"); } }catch(Exception e) { return R.failed("æä»¶ç§»å¨åºç°å¼å¸¸ï¼"); } } public static File getLatestFile(List<File> files) { File latestFile = null; long latestTime = 0; for (File file : files) { long lastModified = file.lastModified(); if (lastModified > latestTime) { latestTime = lastModified; latestFile = file; } } return latestFile; } public static File getFileStart(String filePath, String fileExtension) { List<File> files = FileUtil.loopFiles(filePath); List<File> list = new ArrayList<>(); files.forEach(i -> { boolean b; switch (fileExtension) { case ".docx": b = i.getName().endsWith(".docx") || i.getName().endsWith(".doc"); break; case ".xlsx": b = i.getName().endsWith(".xlsx") || i.getName().endsWith(".xls"); break; default: b = i.getName().endsWith(fileExtension); break; } if (b) { list.add(i); } }); return getLatestFile(list); } } src/main/java/com/chinaztt/mes/docx/util/CharsetChangeUtil.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.chinaztt.mes.docx.util; import java.io.UnsupportedEncodingException; import java.util.Objects; /** * å符串ç¼ç 转æ¢å·¥å ·ç±» */ public class CharsetChangeUtil { private static final String UTF8 = "UTF-8"; private static final String GB2312 = "GB2312"; } src/main/java/com/chinaztt/mes/docx/util/R.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,132 @@ // // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package com.chinaztt.mes.docx.util; import com.chinaztt.mes.docx.constant.CommonConstants; import java.io.Serializable; public class R<T> implements Serializable { private static final long serialVersionUID = 1L; // "è¿åæ è®°ï¼æåæ è®°=0ï¼å¤±è´¥æ è®°=1" private int code; // "è¿åä¿¡æ¯" private String msg; // "æ°æ®" private T data; public static <T> R<T> ok() { return restResult(null, CommonConstants.SUCCESS, (String) null); } public static <T> R<T> ok(T data) { return restResult(data, CommonConstants.SUCCESS, (String) null); } public static <T> R<T> ok(T data, String msg) { return restResult(data, CommonConstants.SUCCESS, msg); } public static <T> R<T> failed() { return restResult(null, CommonConstants.FAIL, (String) null); } public static <T> R<T> failed(String msg) { return restResult(null, CommonConstants.FAIL, msg); } public static <T> R<T> failed(T data) { return restResult(data, CommonConstants.FAIL, (String) null); } public static <T> R<T> failed(T data, String msg) { return restResult(data, CommonConstants.FAIL, msg); } private static <T> R<T> restResult(T data, int code, String msg) { R<T> apiResult = new R(); apiResult.setCode(code); apiResult.setData(data); apiResult.setMsg(msg); return apiResult; } public static <T> RBuilder<T> builder() { return new RBuilder(); } public String toString() { return "R(code=" + this.getCode() + ", msg=" + this.getMsg() + ", data=" + this.getData() + ")"; } public R() { } public R(int code, String msg, T data) { this.code = code; this.msg = msg; this.data = data; } public int getCode() { return this.code; } public R<T> setCode(int code) { this.code = code; return this; } public String getMsg() { return this.msg; } public R<T> setMsg(String msg) { this.msg = msg; return this; } public T getData() { return this.data; } public R<T> setData(T data) { this.data = data; return this; } public static class RBuilder<T> { private int code; private String msg; private T data; RBuilder() { } public RBuilder<T> code(int code) { this.code = code; return this; } public RBuilder<T> msg(String msg) { this.msg = msg; return this; } public RBuilder<T> data(T data) { this.data = data; return this; } public R<T> build() { return new R(this.code, this.msg, this.data); } public String toString() { return "R.RBuilder(code=" + this.code + ", msg=" + this.msg + ", data=" + this.data + ")"; } } } src/main/java/com/chinaztt/mes/docx/util/TakeWords.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,258 @@ package com.chinaztt.mes.docx.util; import cn.hutool.core.io.FileUtil; import com.chinaztt.mes.docx.dto.GetFileDto; import net.sourceforge.tess4j.Tesseract; import net.sourceforge.tess4j.TesseractException; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.POIXMLDocument; import org.apache.poi.POIXMLTextExtractor; import org.apache.poi.hwpf.extractor.WordExtractor; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import java.io.*; import java.nio.file.Files; import java.sql.*; import java.util.*; public class TakeWords { private static final String splitIdentifier = "@-@"; // èªå®ä¹å¯ä¸æ è¯ç¬¦ public static Object readWordFile(File file) { String result = ""; //é¦å 夿æä»¶ä¸çæ¯doc/docx try { if (file.getName().endsWith(".doc")) { InputStream is = new FileInputStream(file); WordExtractor re = new WordExtractor(is); result = re.getText(); re.close(); } else if (file.getName().endsWith(".docx")) { OPCPackage opcPackage = POIXMLDocument.openPackage(file.getPath()); POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage); result = extractor.getText(); extractor.close(); } } catch (Exception e) { e.printStackTrace(); } return result; } public static Object readExcelFile(File file) throws FileNotFoundException, IOException { StringBuilder result = new StringBuilder(); //å建工ä½ç°¿å¯¹è±¡ XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream(file)); //è·åå·¥ä½ç°¿ä¸sheetçä¸ªæ° åªè¯»å第ä¸ä¸ªsheet // int sheetNum = xssfWorkbook.getNumberOfSheets(); //éåå·¥ä½ç°¿ä¸çæææ°æ® for (int i = 0; i < 1; i++) { XSSFSheet sheet = xssfWorkbook.getSheetAt(i); //è·åæåä¸è¡çnumï¼å³æ»è¡æ°ãæ¤å¤ä»0å¼å§ int maxRow = sheet.getLastRowNum(); for (int row = 0; row <= maxRow; row++) { //è·åæååå æ ¼numï¼å³æ»åå æ ¼æ° ***注æï¼æ¤å¤ä»1å¼å§è®¡æ°*** int maxRol = sheet.getRow(row).getLastCellNum(); StringBuilder aLine = new StringBuilder(); for (int rol = 0; rol < maxRol; rol++) { aLine.append(sheet.getRow(row).getCell(rol)).append(splitIdentifier); } result.append(aLine).append("\n"); } } return result.toString(); } public static Object readTxtFile(File file) throws IOException { FileInputStream fin = new FileInputStream(file); InputStreamReader reader = new InputStreamReader(fin); BufferedReader buffReader = new BufferedReader(reader); StringBuilder stringBuilder = new StringBuilder(); String strTmp = ""; while ((strTmp = buffReader.readLine()) != null) { stringBuilder.append(strTmp).append("\n"); } buffReader.close(); return stringBuilder.toString(); } public static Object readCsvFile(File file) { StringBuilder stringBuilder = new StringBuilder(); // å建 reader try (BufferedReader br = Files.newBufferedReader(file.toPath())) { // CSVæä»¶çåé符 String DELIMITER = ","; // æè¡è¯»å String line; while ((line = br.readLine()) != null) { // åå² String[] columns = line.split(DELIMITER); // æå°è¡ stringBuilder.append(String.join(splitIdentifier, columns)).append("\n"); } } catch (IOException ex) { ex.printStackTrace(); } return stringBuilder.toString(); } public static Object readMdbFile(File file, GetFileDto getFileDto) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException { Map<String, Object> tableMap = new HashMap<>(16); Properties prop = new Properties(); //设置ç¼ç prop.put("charSet", "UTF-8"); prop.put("user", ""); prop.put("password", ""); //æ°æ®å°å String dbUrl = "jdbc:ucanaccess://" + file.getPath(); //å¼å ¥é©±å¨ Class.forName("net.ucanaccess.jdbc.UcanaccessDriver").newInstance(); Connection conn = null; PreparedStatement preparedStatement = null; ResultSet rs = null; //è¿æ¥æ°æ®åºèµæº conn = DriverManager.getConnection(dbUrl, prop); try { List<Object> list = new ArrayList<>(); //éåè·åå¤å¼ è¡¨æ°æ® // String s = "select * from " + getFileDto.getDbFileName() + " where 1=1" + getFileDto.getMdbEntrustCode() + " = '" + getFileDto.getEntrustCode() + // "' and " + getFileDto.getMdbSampleCode() + " = '" + getFileDto.getSampleCode() + "'"; String s = "select * from " + getFileDto.getDbFileName() + " where 1=1"; if(StringUtils.isNotBlank(getFileDto.getMdbEntrustCode())){ s+=" and " + getFileDto.getMdbEntrustCode() + " = '" + getFileDto.getEntrustCode()+ "'"; } if(StringUtils.isNotBlank(getFileDto.getMdbSampleCode())){ s+=" and " + getFileDto.getMdbSampleCode() + " = '" + getFileDto.getSampleCode() + "'"; } preparedStatement = conn.prepareStatement(s); rs = preparedStatement.executeQuery(); ResultSetMetaData data = rs.getMetaData(); while (rs.next()) { Map<String, String> map = new HashMap<>(); for (int i = 1; i <= data.getColumnCount(); i++) { //åå String columnName = data.getColumnName(i); map.put(columnName, rs.getString(i)); } list.add(map); } tableMap.put("data", list); } catch (Exception e) { } finally { closeA1l(conn, preparedStatement, rs); } return tableMap; } private static void closeA1l(Connection conn, PreparedStatement preparedStatement, ResultSet rs) { try { if (null != rs) { rs.close(); } if (null != preparedStatement) { preparedStatement.close(); } if (null != conn) { conn.close(); } } catch (Exception ignore) { } } public static Object readDbFile(File file, GetFileDto getFileDto) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException { Map<String, Object> tableMap = new HashMap<>(16); Properties prop = new Properties(); //设置ç¼ç prop.put("charSet", "GBK"); prop.put("user", ""); prop.put("password", ""); //æ°æ®å°å String dbUrl = "jdbc:sqlite:" + file.getPath(); //å¼å ¥é©±å¨ Class.forName("org.sqlite.JDBC").newInstance(); Connection conn = null; PreparedStatement preparedStatement = null; ResultSet rs = null; //è¿æ¥æ°æ®åºèµæº conn = DriverManager.getConnection(dbUrl, prop); try { List<Object> list = new ArrayList<>(); //转ä¹ä¸æ String sampleCode = changeCharset(getFileDto.getSampleCode(), "GBK"); String sql = "select * from " + getFileDto.getDbFileName() + " where " + getFileDto.getMdbEntrustCode() + " = '" + getFileDto.getEntrustCode() + "' and " + getFileDto.getMdbSampleCode() + " = '" + sampleCode + "'"; if (ObjectUtils.allNotNull(getFileDto.getFiberOpticRibbonCode(), getFileDto.getFiberOpticRibbon()) && !getFileDto.getFiberOpticRibbonCode().equals("null")) { sql = sql + " and " + getFileDto.getFiberOpticRibbonCode() + " = '" + getFileDto.getFiberOpticRibbon() + "'"; } //éåè·åå¤å¼ è¡¨æ°æ® preparedStatement = conn.prepareStatement(sql); rs = preparedStatement.executeQuery(); ResultSetMetaData data = rs.getMetaData(); while (rs.next()) { Map<String, String> map = new HashMap<>(); for (int i = 1; i <= data.getColumnCount(); i++) { //åå String columnName = data.getColumnName(i); //å°è¿åçç»æè½¬æ¢ä»utf-8ç¼ç map.put(columnName, changeCharset(rs.getString(i),"UTF-8")); } list.add(map); } tableMap.put("data", list); } catch (Exception e) { } finally { closeA1l(conn, preparedStatement, rs); } return tableMap; } public static Object readPngFile(File file) throws IOException, TesseractException { String canonicalPath32 = FileUtil.file(".", "/jre_32/tessdata").getCanonicalPath(); String canonicalPath64 = FileUtil.file(".", "/jre_64/tessdata").getCanonicalPath(); String path; // 夿çµèæ¯32ä½è¿æ¯64ä½ String arch = System.getProperty("sun.arch.data.model"); if (arch.contains("32")) { path = canonicalPath32.replaceAll("/chi_sim.traineddata", "").replaceAll("\\\\", "/"); } else { path = canonicalPath64.replaceAll("/chi_sim.traineddata", "").replaceAll("\\\\", "/"); } //设置é ç½®æä»¶å¤¹å¾®è§ãè¯å«è¯è¨ãè¯å«æ¨¡å¼ Tesseract tesseract = new Tesseract(); tesseract.setDatapath(path); //设置è¯å«è¯è¨ä¸ºä¸æç®ä½ï¼ï¼å¦æè¦è®¾ç½®ä¸ºè±æå¯æ¹ä¸º"eng"ï¼ tesseract.setLanguage("chi_sim"); //ä½¿ç¨ OSD è¿è¡èªå¨é¡µé¢åå²ä»¥è¿è¡å¾åå¤ç tesseract.setPageSegMode(1); //è®¾ç½®å¼ææ¨¡å¼æ¯ç¥ç»ç½ç»LSTM弿 tesseract.setOcrEngineMode(1); //å¼å§è¯å«æ´å¼ å¾çä¸çæå return tesseract.doOCR(file); } /** * å符串ç¼ç è½¬æ¢ * * @param str è¦è½¬æ¢çå符串 * @param unicode å符ç¼ç * @return */ public static String changeCharset(String str, String unicode) { if(Objects.isNull(str)){ return ""; } try { return new String(str.getBytes(), unicode); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } } src/main/resources/application.yml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,2 @@ server: port: 9527 src/main/resources/logback-spring.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,74 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- å°æå·§: 卿 ¹poméé¢è®¾ç½®ç»ä¸åæ¾è·¯å¾ï¼ç»ä¸ç®¡çæ¹ä¾¿ç»´æ¤ <properties> <log-path>/Users/ztt</log-path> </properties> 1. å ¶ä»æ¨¡åå æ¥å¿è¾åºï¼ç´æ¥copyæ¬æä»¶æ¾å¨resources ç®å½å³å¯ 2. 注æä¿®æ¹ <property name="${log-path}/log.path" value=""/> çvalue模å --> <configuration debug="false" scan="false"> <property name="log.path" value="logs/${project.artifactId}"/> <!-- å½©è²æ¥å¿æ ¼å¼ --> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <!-- å½©è²æ¥å¿ä¾èµç渲æç±» --> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/> <!-- Console log output --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> </encoder> </appender> <!-- Log file debug output --> <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/debug.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <maxFileSize>50MB</maxFileSize> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern> </encoder> </appender> <!-- Log file error output --> <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <maxFileSize>50MB</maxFileSize> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> <logger name="org.activiti.engine.impl.db" level="DEBUG"> <appender-ref ref="debug"/> </logger> <!--nacos å¿è·³ INFO å±è½--> <logger name="com.alibaba.nacos" level="OFF"> <appender-ref ref="error"/> </logger> <logger name="com.chinaztt.mes.common.aop" level="ERROR"> <appender-ref ref="error"/> </logger> <!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 --> <root level="INFO"> <appender-ref ref="console"/> <appender-ref ref="debug"/> </root> </configuration> src/test/java/com/chinaztt/mes/docx/DataAcquisitionApplicationTests.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.chinaztt.mes.docx; import org.apache.commons.lang3.ObjectUtils; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.IOException; @SpringBootTest class DataAcquisitionApplicationTests { @Test void contextLoads() { if (ObjectUtils.allNotNull("null")) { System.out.println("æå"); } else { System.out.println("失败"); } } }