Преглед на файлове

Merge remote-tracking branch 'origin/dev' into dev

LHB преди 1 ден
родител
ревизия
e666d5a166

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -2383,6 +2383,9 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
         //获取excel流 和 html流
         InputStream exceInp = CommonUtil.getOSSInputStream(newFileUrl);
+        if(exceInp==null){
+            return R.fail(wbsTreeContract.getNodeName()+"excel为找到");
+        }
 
         Workbook workbook = null;
         int index = newFileUrl.lastIndexOf(".");

+ 22 - 15
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -29,6 +29,7 @@ import lombok.Data;
 import net.logstash.logback.encoder.org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
+import org.apache.pdfbox.io.MemoryUsageSetting;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.poi.ss.usermodel.*;
@@ -4992,7 +4993,7 @@ public class TaskController extends BladeController {
                                  pageStart = 300 * i;
                                  pageEnd = pageNum;
                              }
-                             int pdfByPage = this.getPdfByPage(pageStart, pageEnd, pdfUrl, localPdf);
+                             int pdfByPage = this.getPdfByPage(pageStart, pageEnd, lasPdf, localPdf);
                              if(pdfByPage==0){
                                  BladeFile bladeFile1 = newIOSSClient.uploadFile( SnowFlakeUtil.get() + ".pdf", localPdf);
                                  String pagePdfUrl=bladeFile1.getLink();
@@ -5008,29 +5009,35 @@ public class TaskController extends BladeController {
             return this.pdfUrl;
         }
         public int getPdfByPage(int startPage, int endPage, String filePath, String savePath) {
-            try {
-                InputStream inputStreamByUrl = CommonUtil.getOSSInputStream3(filePath);
-                // 加载PDF文件
-                PDDocument document = PDDocument.load(inputStreamByUrl);
-                // 创建新文档
-                PDDocument newDocument = new PDDocument();
+            // 使用try-with-resources自动关闭资源
+            try (InputStream inputStream = new FileInputStream(filePath);
+                 PDDocument document = PDDocument.load(inputStream, MemoryUsageSetting.setupMixed(100 * 1024 * 1024));
+                 PDDocument newDocument = new PDDocument()) {
+
+                int totalPages = document.getNumberOfPages();
+                int actualStart = Math.max(0, startPage - 1);
+                int actualEnd = Math.min(totalPages - 1, endPage - 1);
 
-                // 注意:PDFBox中的页面索引从0开始
-                int actualStart = Math.max(0, startPage - 1); // 将用户输入的1转换为0
-                int actualEnd = Math.min(document.getNumberOfPages() - 1, endPage - 1); // 将用户输入的10转换为9
+                // 参数校验
+                if (actualStart > actualEnd) {
+                    throw new IllegalArgumentException("起始页不能大于结束页");
+                }
+                if (actualStart >= totalPages) {
+                    throw new IllegalArgumentException("起始页超出文档范围");
+                }
 
-                // 添加指定范围的页面
+                // 使用importPage替代addPage(关键优化)
                 for (int i = actualStart; i <= actualEnd; i++) {
                     PDPage page = document.getPage(i);
-                    newDocument.addPage(page);
+                    PDPage importedPage = newDocument.importPage(page);
+                    // 复制页面资源以确保格式正确
+                    importedPage.setResources(page.getResources());
                 }
 
-                // 保存为新文件
                 newDocument.save(savePath);
-                newDocument.close();
-                document.close();
                 return 0;
             } catch (Exception e) {
+                e.printStackTrace(); // 至少打印异常信息
                 return 1;
             }
         }