Prechádzať zdrojové kódy

小程序图片加载

xuzhancheng 5 dní pred
rodič
commit
6e2c4dc750

+ 33 - 3
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/tasksign/TaskSignServiceImpl.java

@@ -54,6 +54,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.awt.Graphics2D;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -429,10 +430,39 @@ public class TaskSignServiceImpl implements TaskSignService {
     
         try (PDDocument document = PDDocument.load(new ByteArrayInputStream(pdfBytes))) {
             PDFRenderer pdfRenderer = new PDFRenderer(document);
-            BufferedImage image = pdfRenderer.renderImageWithDPI(0, 150);
+            int pageCount = document.getNumberOfPages();
+
+            if (pageCount == 1) {
+                // 单页直接渲染
+                BufferedImage image = pdfRenderer.renderImageWithDPI(0, 150);
+                ByteArrayOutputStream bos = new ByteArrayOutputStream();
+                ImageIO.write(image, "png", bos);
+                return bos;
+            }
+
+            // 多页PDF:逐页渲染并纵向拼接
+            List<BufferedImage> images = new ArrayList<>();
+            int totalHeight = 0;
+            int maxWidth = 0;
+            for (int i = 0; i < pageCount; i++) {
+                BufferedImage pageImage = pdfRenderer.renderImageWithDPI(i, 150);
+                images.add(pageImage);
+                totalHeight += pageImage.getHeight();
+                maxWidth = Math.max(maxWidth, pageImage.getWidth());
+            }
+
+            // 创建合并后的图像,将所有页纵向拼接
+            BufferedImage combined = new BufferedImage(maxWidth, totalHeight, BufferedImage.TYPE_INT_ARGB);
+            Graphics2D g2d = combined.createGraphics();
+            int currentY = 0;
+            for (BufferedImage img : images) {
+                g2d.drawImage(img, 0, currentY, null);
+                currentY += img.getHeight();
+            }
+            g2d.dispose();
+
             ByteArrayOutputStream bos = new ByteArrayOutputStream();
-            ImageIO.write(image, "png", bos);
-    
+            ImageIO.write(combined, "png", bos);
             return bos;
         } catch (IOException e) {
             log.error("PDF转图片失败,文件大小: {} bytes, 错误信息: {}", pdfBytes.length, e.getMessage(), e);