| | |
| | | |
| | | |
| | | |
| | | import java.awt.*; |
| | | import java.awt.image.BufferedImage; |
| | | import java.io.ByteArrayInputStream; |
| | | import java.io.*; |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Path; |
| | | import java.nio.file.Paths; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import javax.imageio.ImageIO; |
| | | import javax.servlet.http.HttpServletResponse; |
| | |
| | | import com.ruoyi.common.utils.file.FileUploadUtils; |
| | | import com.ruoyi.common.utils.file.FileUtils; |
| | | import com.ruoyi.domain.ArchiveCategory; |
| | | import com.ruoyi.domain.ArchiveRecords; |
| | | import com.ruoyi.domain.DocumentMaterials; |
| | | import com.ruoyi.domain.vo.DocumentMaterialFileSmallVo; |
| | | import com.ruoyi.framework.config.ServerConfig; |
| | | import com.ruoyi.framework.web.domain.server.Sys; |
| | | import com.ruoyi.service.IDocumentMaterialsService; |
| | | import com.sun.xml.internal.ws.api.addressing.WSEndpointReference; |
| | | import org.apache.commons.imaging.ImageInfo; |
| | | import org.apache.commons.imaging.Imaging; |
| | | import org.springframework.mock.web.MockMultipartFile; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | |
| | | @Autowired |
| | | private IDocumentMaterialsService documentMaterialsService; |
| | | |
| | | |
| | | /** |
| | | * 判断PageNumber是否连续 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('system:materials:list')") |
| | | @GetMapping("/isPageNubLegal/{recordId}") |
| | | public AjaxResult judgePageLegal(@PathVariable("recordId") Integer recordId) |
| | | { |
| | | |
| | | boolean res = documentMaterialsService.isPageNumberIslegal(recordId); |
| | | int cnt = documentMaterialsService.getFileCount(recordId); |
| | | HashMap<String, Object> data = new HashMap<>(); |
| | | data.put("res",res); |
| | | data.put("total",cnt); |
| | | return AjaxResult.success(data); |
| | | } |
| | | /** |
| | | * 拿到除了其它类型材料的个数 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('system:materials:list')") |
| | | @GetMapping("/getFileCount/{recordId}") |
| | | public AjaxResult getFileCount(@PathVariable("recordId") Integer recordId) |
| | | { |
| | | |
| | | int cnt = documentMaterialsService.getFileCount(recordId); |
| | | return AjaxResult.success(cnt); |
| | | } |
| | | /** |
| | | * 查询【文件材料综合信息】列表 |
| | | */ |
| | |
| | | @GetMapping("/list") |
| | | public AjaxResult list(DocumentMaterials documentMaterials) |
| | | { |
| | | |
| | | Integer pageNum = Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1); |
| | | Integer pageSize = Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10); |
| | | return documentMaterialsService.selectDataList(documentMaterials, pageNum, pageSize); |
| | |
| | | @PreAuthorize("@ss.hasPermi('system:materials:export')") |
| | | @Log(title = "【文件材料综合信息】", businessType = BusinessType.EXPORT) |
| | | @PostMapping("/export") |
| | | public void export(HttpServletResponse response, DocumentMaterials documentMaterials) |
| | | public void export(HttpServletResponse response, DocumentMaterials documentMaterials, @RequestParam(value = "ids", required = false) Long[] ids) |
| | | { |
| | | List<DocumentMaterials> list = documentMaterialsService.selectDocumentMaterialsList(documentMaterials); |
| | | List<DocumentMaterials> list; |
| | | System.out.println(ids); |
| | | // 如果提供了ids参数,则根据ids导出指定记录 |
| | | if (ids != null && ids.length > 0) { |
| | | list = documentMaterialsService.selectDocumentMaterialsByIds(ids); |
| | | } else { |
| | | list = documentMaterialsService.selectDocumentMaterialsList(documentMaterials); |
| | | |
| | | } |
| | | ExcelUtil<DocumentMaterials> util = new ExcelUtil<DocumentMaterials>(DocumentMaterials.class); |
| | | util.exportExcel(response, list, "【文件材料综合信息】数据"); |
| | | } |
| | |
| | | return "A0"; |
| | | } |
| | | |
| | | @PostMapping("/upload") |
| | | public AjaxResult uploadFile(MultipartFile file, Long recordId) throws Exception |
| | | @PostMapping("/upload/{recordId}") |
| | | public AjaxResult uploadFile(MultipartFile file, @PathVariable Long recordId) throws Exception |
| | | { |
| | | // System.out.println("sdfd9999999999999999999999999999999"); |
| | | try |
| | |
| | | //分割文件名 |
| | | String [] nams = fname.split("\\."); |
| | | Long nam = Long.parseLong(nams[0]); |
| | | //文件名称 |
| | | String pname = nams[1]; |
| | | ajax.put("url", url); |
| | | //拿到图像属性 |
| | | BufferedImage bufferedImage = ImageIO.read(file.getInputStream()); |
| | | int wid = bufferedImage.getWidth(); |
| | | int hei = bufferedImage.getHeight(); |
| | | double sz = Double.parseDouble(String.format("%.2f", file.getSize()*1.0/1024)); |
| | | System.out.println(wid+":"+hei+":"+sz); |
| | | //拿到图像的dpi信息 |
| | | //根据页号拿到案卷的详细信息 |
| | | System.out.println("0-------------"); |
| | | System.out.println(recordId); |
| | | DocumentMaterials doc = documentMaterialsService.selectByPageNumber(nam, Math.toIntExact(recordId)); |
| | | if(doc==null) |
| | | return AjaxResult.error("无对应页号,请检查清楚附件以及对应的输入!"); |
| | | else{ |
| | | if(doc.getSecurityLevel().equals("该页另存")) |
| | | { |
| | | |
| | | ImageInfo info = Imaging.getImageInfo(file.getBytes()); |
| | | //替换为了准备好的图像 |
| | | //读取服务器上的图像 |
| | | // new InputStream(); |
| | | String fp = filePath + "\\glc.jpg"; |
| | | Path path = Paths.get(fp); |
| | | File fil = new File(fp); |
| | | //拿到图像属性 |
| | | BufferedImage bufferedImage = ImageIO.read(Files.newInputStream(path)); |
| | | int wid = bufferedImage.getWidth(); |
| | | int hei = bufferedImage.getHeight(); |
| | | double sz = Double.parseDouble(String.format("%.2f", Files.size(path)*1.0/1024)); |
| | | System.out.println("ddsdsdsd"); |
| | | System.out.println(wid+":"+hei+":"+sz); |
| | | |
| | | //拿到图像的dpi信息 |
| | | |
| | | ImageInfo info = Imaging.getImageInfo(Files.readAllBytes(path)); |
| | | |
| | | |
| | | int wdpi = info.getPhysicalWidthDpi() ; |
| | | int hdpi = info.getPhysicalHeightDpi(); |
| | | System.out.println("DPI: " + info.getPhysicalWidthDpi()); |
| | | //计算fileNumber |
| | | Long fileNumber = documentMaterialsService.getFiNum(nam); |
| | | //计算sizeType |
| | | String sizeType = getPageSize(wid*hei); |
| | | //插入数据库对应的url当中 |
| | | documentMaterialsService.updateByPageNumber(nam, sizeType, fileNumber,wid, hei,wdpi, hdpi, sz, fileName, pname, recordId); |
| | | // System.out.println(url); |
| | | int wdpi = info.getPhysicalWidthDpi() ; |
| | | int hdpi = info.getPhysicalHeightDpi(); |
| | | System.out.println("DPI: " + info.getPhysicalWidthDpi()); |
| | | //计算fileNumber |
| | | Long fileNumber = documentMaterialsService.getFiNum(nam,recordId); |
| | | //计算sizeType |
| | | String sizeType = getPageSize(wid*hei); |
| | | |
| | | |
| | | Graphics2D g2d = bufferedImage.createGraphics(); // 获取Graphics2D对象用于绘制 |
| | | g2d.setFont(new Font("Arial", Font.BOLD, 80)); // 设置字体样式和大小 |
| | | g2d.setColor(Color.black); // 设置字体颜色为白色,可根据需要调整颜色和字体样式 |
| | | String pageNumber = doc.getPageNumber()+""; // 页码字符串,可以根据需要修改或动态生成 |
| | | int fontHeight = g2d.getFontMetrics().getHeight(); // 获取字体高度,用于定位文本位置 |
| | | int x = bufferedImage.getWidth() - g2d.getFontMetrics().stringWidth(pageNumber) - 80; // 计算文本X坐标位置,确保在右下角附近 |
| | | int y = bufferedImage.getHeight() - fontHeight / 2 - 100; // 计算文本Y坐标位置,垂直居中显示文本 |
| | | g2d.drawString(pageNumber, x, y); // 在图片上绘制页码文本 |
| | | |
| | | |
| | | System.out.println(pageNumber+"[[[[[[[[[[[[[[["); |
| | | g2d.dispose(); // 释放Graphics2D资源 |
| | | // File outputFile = new File(filePath+"/output_image.jpg"); // 输出文件路径 |
| | | // ImageIO.write(bufferedImage, "jpg", outputFile); // 保 |
| | | //得到BufferedImage对象 |
| | | MultipartFile multipartFile = null; |
| | | try { |
| | | //创建一个ByteArrayOutputStream |
| | | ByteArrayOutputStream os = new ByteArrayOutputStream(); |
| | | //把BufferedImage写入ByteArrayOutputStream |
| | | ImageIO.write(bufferedImage, "jpg", os); |
| | | //ByteArrayOutputStream转成InputStream |
| | | InputStream input = new ByteArrayInputStream(os.toByteArray()); |
| | | //InputStream转成MultipartFile |
| | | multipartFile = new MockMultipartFile(pageNumber, pageNumber+".jpg", "text/plain", input); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | // 上传并返回新文件名称 |
| | | String fileName1 = FileUploadUtils.upload(filePath, multipartFile); |
| | | String url1 = serverConfig.getUrl() + fileName; |
| | | |
| | | |
| | | String us = "/profile/upload/0071.jpg"; |
| | | documentMaterialsService.updateByPageNumber(nam, sizeType, fileNumber,wid, hei,wdpi, hdpi, sz, fileName1, "jpg", recordId); |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | //文件名称 |
| | | String pname = nams[1]; |
| | | ajax.put("url", url); |
| | | //拿到图像属性 |
| | | BufferedImage bufferedImage = ImageIO.read(file.getInputStream()); |
| | | int wid = bufferedImage.getWidth(); |
| | | int hei = bufferedImage.getHeight(); |
| | | double sz = Double.parseDouble(String.format("%.2f", file.getSize()*1.0/1024)); |
| | | System.out.println(wid+":"+hei+":"+sz); |
| | | //拿到图像的dpi信息 |
| | | |
| | | ImageInfo info = Imaging.getImageInfo(file.getBytes()); |
| | | |
| | | |
| | | int wdpi = info.getPhysicalWidthDpi() ; |
| | | int hdpi = info.getPhysicalHeightDpi(); |
| | | System.out.println("DPI: " + info.getPhysicalWidthDpi()); |
| | | //计算fileNumber |
| | | Long fileNumber = documentMaterialsService.getFiNum(nam, recordId); |
| | | //计算sizeType |
| | | String sizeType = getPageSize(wid*hei); |
| | | //插入数据库对应的url当中 |
| | | documentMaterialsService.updateByPageNumber(nam, sizeType, fileNumber,wid, hei,wdpi, hdpi, sz, fileName, pname, recordId); |
| | | // |
| | | } |
| | | } |
| | | System.out.println(url); |
| | | // System.out.println(fileName); |
| | | ajax.put("fileName", fileName); |
| | | // System.out.println(FileUtils.getName(fileName)); |
| | |
| | | ExcelUtil<DocumentMaterialFileSmallVo> util = new ExcelUtil<>(DocumentMaterialFileSmallVo.class); |
| | | util.exportExcel(response,list,"档案详细信息导入模板"); |
| | | } |
| | | |
| | | //导出material |
| | | } |