|
|
@@ -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;
|
|
|
}
|
|
|
}
|