xiexiang 1 سال پیش
والد
کامیت
7fa0f55bf3

+ 10 - 0
pom.xml

@@ -53,6 +53,16 @@
             <version>5.6.5</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>itextpdf</artifactId>
+            <version>5.5.13</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.pdfbox</groupId>
+            <artifactId>pdfbox</artifactId>
+            <version>2.0.4</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 33 - 5
src/main/java/com/example/fms/controller/FileMangerController.java

@@ -5,6 +5,8 @@ import com.example.fms.common.model.dto.FMSDeleteFileDTO;
 import com.example.fms.common.utils.Response;
 import com.example.fms.domain.SystemFile;
 import com.example.fms.service.FileMangerService;
+import com.example.fms.service.ReadPDF2Service;
+import com.example.fms.service.ReadPDFService;
 import com.example.fms.service.SystemFileService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -18,7 +20,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.ByteArrayInputStream;
-import java.io.File;
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -33,12 +35,31 @@ import java.util.List;
 public class FileMangerController {
     private final FileMangerService fileManagerService;
     private final SystemFileService systemFileService;
+    private final ReadPDFService readPDFService;
+    private final ReadPDF2Service readPDF2Service;
 
-    @PostMapping("/uploadSystemFile")
+//    @PostMapping("/uploadSystemFile")
+//    @Operation(summary = "上传文件")
+//    public String upload(@RequestBody List<MultipartFile> files, Integer sourceId) {
+//        List<Integer> insertIds = fileManagerService.add(files, sourceId);
+//        return Response.success(insertIds);
+//    }
+
+    @PostMapping("/uploadFile")
     @Operation(summary = "上传文件")
-    public String upload(@RequestBody List<MultipartFile> files, Integer sourceId) {
-        List<Integer> insertIds = fileManagerService.add(files, sourceId);
-        return Response.success(insertIds);
+    public String uploadFile(@RequestBody List<MultipartFile> files, Integer sourceId) throws IOException {
+        if(files != null && files.size() != 0){
+            List<Integer> insertIds = fileManagerService.uploadFile(files, sourceId);
+            if(insertIds != null && insertIds.size() != 0){
+                return Response.success("上传文件成功,文件信息id为" + insertIds);
+            } else {
+                return Response.error("文件信息入表失败");
+            }
+        } else {
+            return Response.error("上传文件不能为空");
+        }
+
+
     }
 
     @GetMapping("/downloadSystemFile")
@@ -68,4 +89,11 @@ public class FileMangerController {
         fileManagerService.delete(fMSDeleteFileDTO.getIds(), fMSDeleteFileDTO.getType());
         return Response.success("删除系统文件成功");
     }
+
+    @GetMapping("/PDF")
+    @Operation(summary = "pdf")
+    public String pdf(String fileName) {
+        readPDF2Service.read(fileName);
+        return Response.success("导出图片");
+    }
 }

+ 25 - 0
src/main/java/com/example/fms/service/FileFactory.java

@@ -0,0 +1,25 @@
+package com.example.fms.service;
+
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/10/20
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class FileFactory {
+    public static IFileFactory createObject(Integer sourceId){
+        IFileFactory factoryObject = null;
+        switch(sourceId){
+            case 1:
+                return factoryObject;
+            default:
+                return null;
+        }
+    }
+}

+ 33 - 0
src/main/java/com/example/fms/service/FileMangerService.java

@@ -8,6 +8,7 @@ import com.example.fms.common.utils.ExcuteConfigUtils;
 import com.example.fms.domain.SystemFile;
 import com.example.fms.exception.XiaoShiException;
 import com.example.fms.mapper.SystemFileMapper;
+import io.swagger.v3.oas.models.security.SecurityScheme;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
@@ -15,6 +16,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -28,6 +30,36 @@ public class FileMangerService {
     private final FileFactoryService fileFactoryService;
     private final SystemFileService systemFileService;
     private final SystemFileMapper systemFileMapper;
+    private final FileFactory fileFactory;
+
+
+    /**
+     * 上传文件的最外部接口
+     * @param files
+     * @param sourceId
+     * @return
+     * @throws IOException
+     */
+    public List<Integer> uploadFile(List<MultipartFile> files, Integer sourceId) throws IOException {
+        if (files != null && files.size() != 0) {
+            //1.调用解析配置方法,获取配置信息
+            List<ConfigSettingVO> configSettingVOS = ExcuteConfigUtils.excuteConfigVO();
+            //2.根据配置id获得配置
+            ConfigSettingVO configSettingVO = configSettingVOS.stream().filter(item -> item.getId().equals(sourceId)).findFirst().orElse(null);
+            //3.获取文件上传到服务器,调用工厂类
+            IFileFactory fileFactoryObject = fileFactory.createObject(sourceId);
+            List<SystemFileDTO> systemFileDTOS = fileFactoryObject.uploadFile(files, configSettingVO);
+            //4.根据上传后的返回实体类信息,将实体类信息入库,调用systemFileService add
+            if (systemFileDTOS != null && systemFileDTOS.size() != 0) {
+                List<Integer> insertIds = systemFileService.add(systemFileDTOS, sourceId);
+                return insertIds;
+            } else {
+                throw new XiaoShiException("入表信息为空");
+            }
+        } else {
+            throw new XiaoShiException("上传文件为空");
+        }
+    }
 
     /**
      * 上传文件
@@ -38,6 +70,7 @@ public class FileMangerService {
     public List<Integer> add(List<MultipartFile> files, Integer sourceId) {
         if (files != null && files.size() != 0) {
             //1.获取文件上传到服务器,调用FileFactory的uploadFile
+
             List<SystemFileDTO> systemFileDTOS = fileFactoryService.uploadFiles(files, sourceId);
             //2.根据上传后的返回实体类信息,将实体类信息入库,调用systemFileService add
             if (systemFileDTOS != null && systemFileDTOS.size() != 0) {

+ 21 - 0
src/main/java/com/example/fms/service/IFileFactory.java

@@ -0,0 +1,21 @@
+package com.example.fms.service;
+
+import com.example.fms.common.model.dto.SystemFileDTO;
+import com.example.fms.common.model.vo.ConfigSettingVO;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 工厂类
+ * @Author xiexiang
+ * @Date 2023/10/20
+ */
+public interface IFileFactory {
+    /**
+     *
+     * @throws IOException
+     */
+    List<SystemFileDTO> uploadFile(List<MultipartFile> files, ConfigSettingVO configSettingVO) throws IOException;
+}

+ 63 - 0
src/main/java/com/example/fms/service/ReadPDF2Service.java

@@ -0,0 +1,63 @@
+package com.example.fms.service;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.pdfbox.cos.COSName;
+
+import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
+import org.springframework.stereotype.Service;
+import org.apache.pdfbox.pdmodel.*;
+
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/9/6
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class ReadPDF2Service {
+
+    public void read(String fileName) {
+        try (PDDocument document = PDDocument.load(new File(fileName))) {
+            PDPageTree pages = document.getPages();
+            int imageNumber = 1;
+
+            for (PDPage page : pages) {
+                PDResources resources = page.getResources();
+                Iterable<COSName> objectNames = resources.getXObjectNames();
+
+                for (COSName objectName : objectNames) {
+                    if (resources.isImageXObject(objectName)) {
+                        PDImageXObject image = (PDImageXObject) resources.getXObject(objectName);
+                        //处理图像,例如保存到本地文件
+                        String imageName = "C:/Users/Admin/Desktop/" + objectName.getName() + "." + image.getSuffix();
+                        //使用getImage()方法获取BufferedImage对象
+                        BufferedImage bufferedImage = image.getImage();
+                        bufferedImage.getGraphics().dispose();
+                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                        //将BufferedImage对象保存为字节数组
+                        ImageIO.write(bufferedImage, "png", baos);
+                        // 获取图像的字节数组
+                        byte[] imageData = baos.toByteArray();
+
+                        FileOutputStream outputStream = new FileOutputStream(imageName);
+                        outputStream.write(imageData);
+                        outputStream.close();
+                        System.out.println("Iamge saved: " + imageName);
+                        imageNumber++;
+                    }
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 73 - 0
src/main/java/com/example/fms/service/ReadPDFService.java

@@ -0,0 +1,73 @@
+package com.example.fms.service;
+
+import com.itextpdf.text.exceptions.UnsupportedPdfException;
+import com.itextpdf.text.pdf.*;
+import com.itextpdf.text.pdf.PdfReader;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Iterator;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/9/5
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class ReadPDFService {
+
+    public void extractImage(String filename) {
+        PdfReader reader = null;
+        try {
+            //读取pdf文件
+            reader = new PdfReader(filename);
+            //获得pdf文件的页数
+            int sumPage = reader.getNumberOfPages();
+            //读取pdf文件中的每一页
+            for (int i = 1; i <= sumPage; i++) {
+                //得到pdf每一页的字典对象
+                PdfDictionary dictionary = reader.getPageN(i);
+                //通过RESOURCES得到对应的字典对象
+                PdfDictionary res = (PdfDictionary) PdfReader.getPdfObject(dictionary.get(PdfName.RESOURCES));
+                //得到XOBJECT图片对象
+                PdfDictionary xobj = (PdfDictionary) PdfReader.getPdfObject(res.get(PdfName.XOBJECT));
+                if (xobj != null) {
+                    for (Iterator it = xobj.getKeys().iterator(); it.hasNext(); ) {
+                        PdfObject obj = xobj.get((PdfName) it.next());
+                        if (obj.isIndirect()) {
+                            PdfDictionary tg = (PdfDictionary) PdfReader.getPdfObject(obj);
+                            PdfName type = (PdfName) PdfReader.getPdfObject(tg.get(PdfName.SUBTYPE));
+                            if (PdfName.IMAGE.equals(type)) {
+                                PdfObject object = reader.getPdfObject(obj);
+                                if (object.isStream()) {
+                                    PRStream prstream = (PRStream) object;
+                                    byte[] b;
+                                    try {
+                                        b = reader.getStreamBytes(prstream);
+                                    } catch (UnsupportedPdfException e) {
+                                        b = reader.getStreamBytesRaw(prstream);
+                                    }
+                                    FileOutputStream output = new FileOutputStream(String.format("C:/Users/Admin/Desktop/output%d.jpg", i));
+                                    output.write(b);
+                                    output.flush();
+                                    output.close();
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+}

+ 43 - 0
src/main/java/com/example/fms/service/fileFactory1Service.java

@@ -0,0 +1,43 @@
+package com.example.fms.service;
+
+import com.example.fms.common.model.dto.SystemFileDTO;
+import com.example.fms.common.model.vo.ConfigSettingVO;
+import com.example.fms.common.utils.FileUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/10/20
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class fileFactory1Service implements IFileFactory {
+    private final FileUtils fileUtils;
+
+    public List<SystemFileDTO> uploadFile(List<MultipartFile> files, ConfigSettingVO configSettingVO) throws IOException {
+        List<SystemFileDTO> systemFileDTOS = new ArrayList<>();
+        for (MultipartFile file : files) {
+            try {
+                String directoryName = fileUtils.getDirectoryName();
+                SystemFileDTO systemFileDTO = SftpService.upload(configSettingVO.getFilePath() + directoryName, file, configSettingVO);
+                systemFileDTO.setPType(configSettingVO.getId());
+                systemFileDTO.setSourceId(configSettingVO.getSourceId());
+                systemFileDTO.setOriginalName(file.getOriginalFilename());
+                systemFileDTO.setFilePath(configSettingVO.getFilePath() + directoryName + "/" + systemFileDTO.getFileName());
+                systemFileDTOS.add(systemFileDTO);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return systemFileDTOS;
+    }
+
+}