PDF转图片pdf转换图片,线程池

妖狐艹你老母 2024-03-17 12:10 89阅读 0赞
  1. package com.xhsoft.thread;
  2. import com.xhsoft.common.props.TeOssProperties;
  3. import com.xhsoft.common.utils.MergeImageUtil;
  4. import com.xhsoft.flange.entity.DrawingInfo;
  5. import com.xhsoft.flange.service.IDrawingInfoService;
  6. import com.xhsoft.modules.resource.builder.oss.OssBuilder;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.apache.pdfbox.Loader;
  9. import org.apache.pdfbox.pdmodel.PDDocument;
  10. import org.apache.pdfbox.rendering.PDFRenderer;
  11. import org.springblade.core.oss.model.BladeFile;
  12. import javax.imageio.ImageIO;
  13. import java.awt.image.BufferedImage;
  14. import java.io.File;
  15. import java.io.FileInputStream;
  16. import java.io.IOException;
  17. import java.util.ArrayList;
  18. import java.util.List;
  19. @Slf4j
  20. public class ConvertDrawingToPicture implements Runnable {
  21. private DrawingInfo drawing;
  22. private IDrawingInfoService drawingInfoService;
  23. private File file;
  24. private OssBuilder ossBuilder;
  25. private TeOssProperties teOssProperties;
  26. public ConvertDrawingToPicture(DrawingInfo drawing, File file, IDrawingInfoService drawingInfoService, OssBuilder ossBuilder, TeOssProperties teOssProperties){
  27. this.drawing = drawing;
  28. this.drawingInfoService = drawingInfoService;
  29. this.file = file;
  30. this.ossBuilder = ossBuilder;
  31. this.teOssProperties = teOssProperties;
  32. }
  33. @Override
  34. public void run() {
  35. String fileName = file.getName();
  36. String name = fileName.substring(0, fileName.lastIndexOf("."));
  37. log.info("{}-正在生成图片", fileName);
  38. FileInputStream fis = null;
  39. try {
  40. PDDocument doc = Loader.loadPDF(file);
  41. PDFRenderer renderer = new PDFRenderer(doc);
  42. int pageCount = doc.getNumberOfPages();
  43. List<BufferedImage> images = new ArrayList<>();
  44. for(int i=0;i<pageCount;i++){
  45. BufferedImage image = renderer.renderImageWithDPI(i, 296);
  46. // BufferedImage image = renderer.renderImage(i, 2.5f);
  47. // ImageIO.write(image, "PNG", new File(name+"-"+i+".png"));
  48. images.add(image);
  49. }
  50. log.info("{}-正在整合图片", fileName);
  51. File dir = file.getParentFile();
  52. File pic = new File(dir, name+".png");
  53. MergeImageUtil.mergeImage(images, pic);
  54. log.info("{}-正在上传图片", fileName);
  55. fis = new FileInputStream(pic);
  56. BladeFile bladeFile = ossBuilder.template(teOssProperties.getPic()).putFile(pic.getName(), fis);
  57. log.info("{}-正在保存图片地址", fileName);
  58. String picUrl = bladeFile.getLink();
  59. drawing.setPic(picUrl);
  60. drawingInfoService.updateById(drawing);
  61. } catch (IOException e) {
  62. e.printStackTrace();
  63. }finally{
  64. if(fis != null) try{ fis.close(); }catch(Exception e){};
  65. }
  66. }
  67. public static void main(String[] args){
  68. // try {
  69. // PDDocument doc = Loader.loadPDF(new File("files/drawing/HTP-ER-46-01-02-LO-01_ISO DRGS.pdf"));
  70. // PDFRenderer renderer = new PDFRenderer(doc);
  71. // int pageCount = doc.getNumberOfPages();
  72. // for(int i=0;i<pageCount;i++){
  73. // BufferedImage image = renderer.renderImageWithDPI(i, 296);
  74. BufferedImage image = renderer.renderImage(i, 2.5f);
  75. // ImageIO.write(image, "PNG", new File("files/pricture/"+i+".png"));
  76. // }
  77. // } catch (IOException e) {
  78. // e.printStackTrace();
  79. // }
  80. }
  81. }

然后用的时候:

  1. /**
  2. * 替换图纸文件
  3. */
  4. @PostMapping("/replace")
  5. @ApiOperationSupport(order = 13)
  6. @ApiOperation(value = "替换图纸", notes = "图纸文件")
  7. public R replaceFile(MultipartFile file, Long id) {
  8. String fileName = file.getOriginalFilename();
  9. DrawingInfo drawing = drawingInfoService.getById(id);
  10. if(drawing == null){
  11. log.error("图纸数据不存在,id={}", id);
  12. return R.fail(StatusEnum.DRAWING_FILE_NOT_EXIST.getCode());
  13. }
  14. Long projectId = drawing.getProjectId();
  15. //验证是否已存在该图纸
  16. DrawingInfoTO condition = new DrawingInfoTO();
  17. condition.setProjectId(projectId);
  18. condition.setName(fileName);
  19. condition.setIsDeleted(0);
  20. List<DrawingInfo> drawings = drawingInfoService.list(Condition.getQueryWrapper(condition));
  21. if (drawings.size() > 0) {
  22. log.error(fileName + "图纸已存在");
  23. return R.fail(fileName + StatusEnum.DRAWING_EXIST.getCode());
  24. }
  25. String fileUrl = null;
  26. String date = CommonUtil.SDF_DATE.format(new Date());
  27. Path dest = Paths.get(pathProperties.getDrawing(), date, fileName);
  28. //保存文件在本地
  29. try {
  30. if(!dest.toFile().exists()){
  31. Files.createDirectories(dest);
  32. }
  33. Files.copy(file.getInputStream(), dest, StandardCopyOption.REPLACE_EXISTING);
  34. } catch (IOException e) {
  35. log.error("上传文件异常,"+e.getMessage());
  36. return R.fail(fileName + ":"+StatusEnum.SAVE_FILE_EXCEPTION.getCode());
  37. }
  38. File pdfFile = dest.toFile();
  39. FileInputStream fis = null;
  40. try{
  41. fis = new FileInputStream(pdfFile);
  42. }catch(Exception e){
  43. e.printStackTrace();
  44. }
  45. try{
  46. BladeFile bladeFile = ossBuilder.template(teOssProperties.getPdf()).putFile(fileName, fis);
  47. fileUrl = bladeFile.getLink();
  48. }catch(Exception e){
  49. log.error("上传图纸文件异常,异常信息:{}", e.getMessage());
  50. e.printStackTrace();
  51. return R.fail(StatusEnum.UPLOAD_DRAWING_FILE_EXCEPTION.getCode());
  52. }
  53. DrawingInfoTO di = new DrawingInfoTO();
  54. di.setId(drawing.getId());
  55. // di.setCode(fileName);
  56. // di.setName(fileName);
  57. di.setUrl(fileUrl);
  58. di.setPdfFile(pdfFile);
  59. drawingInfoService.updateById(di);
  60. String url = drawing.getUrl();
  61. if(StringUtil.isNotBlank(url)){
  62. String pdfName = url.substring(url.lastIndexOf('/')+1);
  63. ossBuilder.template(teOssProperties.getPdf()).removeFile(pdfName);
  64. }
  65. String pic = drawing.getPic();
  66. if(StringUtil.isNotBlank(pic)){
  67. String picNme = pic.substring(pic.lastIndexOf('/')+1);
  68. ossBuilder.template(teOssProperties.getPic()).removeFile(picNme);
  69. }
  70. ExecutorService fixedPool = Executors.newFixedThreadPool(1);
  71. ConvertDrawingToPicture convert = new ConvertDrawingToPicture(
  72. di,
  73. di.getPdfFile(),
  74. drawingInfoService,
  75. ossBuilder,
  76. teOssProperties
  77. );
  78. fixedPool.execute(convert);
  79. fixedPool.shutdown();
  80. logTool.insert(drawing.getProjectId(), SysEnum.FLANGE, ModuleEnum.DRAWING,
  81. "替换: 图纸id="+id+",新图纸文件="+fileName );
  82. return R.success(StatusEnum.REPLACE_DRAWING_FILE_SUCCESS.getCode());
  83. }
  84. }

发表评论

表情:
评论列表 (有 0 条评论,89人围观)

还没有评论,来说两句吧...

相关阅读