ソースを参照

feat(pdf): 添加Excel转PDF功能

- 新增PdfController控制器处理PDF转换请求
- 实现getPdfByte接口接收字节数组并返回PDF流
- 配置WorkbookOptions启用基于像素的列宽设置
- 设置工作表自动缩小文字以适应单元格
- 配置页面布局为A4纸张尺寸并居中打印
- 添加字体提供程序支持宋体字体渲染
- 设置PDF保存选项启用自动合并单元格功能
- 实现换行文本缩小适配功能确保内容完整显示
xuzhancheng 1 ヶ月 前
コミット
79c91d1449
1 ファイル変更55 行追加0 行削除
  1. 55 0
      src/main/java/com/grapecity/controller/PdfController.java

+ 55 - 0
src/main/java/com/grapecity/controller/PdfController.java

@@ -0,0 +1,55 @@
+package com.grapecity.controller;
+
+import com.grapecity.documents.excel.*;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@RestController
+@RequestMapping("/pdf")
+public class PdfController {
+    @PostMapping("/getPdf")
+    public void getPdfByte(@RequestBody List<byte[]> bytes,
+                           HttpServletResponse response) throws Exception {
+        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+        WorkbookOptions workbookOptions = new WorkbookOptions();
+        workbookOptions.setPixelBasedColumnWidth(true);
+        Workbook workbook = new Workbook(workbookOptions);
+        workbook.open(new ByteArrayInputStream(bytes.get(0)), OpenFileFormat.Sjs);
+        for (int i = 0; i < workbook.getWorksheets().getCount(); i++) {
+            IWorksheet worksheet = workbook.getWorksheets().get(i);
+            // 自动缩小文字以适应单元格
+            worksheet.getUsedRange().setShrinkToFit(true);
+            worksheet.getPageSetup().setPrintHeadings(false);
+            worksheet.getPageSetup().setPaperSize(PaperSize.A4);
+            worksheet.getPageSetup().setCenterHorizontally(true);
+            worksheet.getPageSetup().setTopMargin(36); // 设置上边距为 36 磅(约 1.27 厘米)
+        }
+        Workbook.FontProvider = new IFontProvider() {
+            @Override
+            public List<String> getFontFilePaths() {
+                return new ArrayList<>(Arrays.asList(
+                        "fonts/simsun.ttf"
+                ));
+            }
+
+            @Override
+            public InputStream getFont(String fontFilePath) {
+                return getClass().getClassLoader().getResourceAsStream(fontFilePath);
+            }
+        };
+        // 设置PdfSaveOptions以将工作簿导出为PDF文件。
+        PdfSaveOptions pdfOptions = new PdfSaveOptions();
+        pdfOptions.setIncludeAutoMergedCells(true);
+        IShrinkToFitSettings shrinkSettings = pdfOptions.getShrinkToFitSettings();
+        shrinkSettings.setCanShrinkToFitWrappedText(true); // 启用对换行文本的缩小功能
+        workbook.save(byteArrayOutputStream, pdfOptions);
+        response.getOutputStream().write(byteArrayOutputStream.toByteArray());
+    }
+}