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