xuzhancheng 3 週間 前
コミット
fb642fdcd5
2 ファイル変更76 行追加5 行削除
  1. 8 0
      HELP.md
  2. 68 5
      src/main/java/com/grapecity/controller/PdfController.java

+ 8 - 0
HELP.md

@@ -0,0 +1,8 @@
+部署命令
+
+ps -ef | grep java
+
+```shell
+nohup java -jar grape-city.jar --server.port=48011 --server.address=0.0.0.0 > app.log 2>&1 &
+nohup /usr/local/java/jdk-17.0.0.1/bin/java -jar grape-city.jar --server.port=48011 --server.address=0.0.0.0 > app.log 2>&1 &
+```

+ 68 - 5
src/main/java/com/grapecity/controller/PdfController.java

@@ -24,8 +24,26 @@ public class PdfController {
         workbook.open(new ByteArrayInputStream(bytes.get(0)), OpenFileFormat.Sjs);
         for (int i = 0; i < workbook.getWorksheets().getCount(); i++) {
             IWorksheet worksheet = workbook.getWorksheets().get(i);
+            System.out.println("[PdfController] 处理 sheet[" + i + "]: " + worksheet.getName());
             // 自动缩小文字以适应单元格
-            worksheet.getUsedRange().setShrinkToFit(true);
+//            worksheet.getUsedRange().setShrinkToFit(true);
+//            worksheet.getUsedRange().setWrapText(true);
+//            worksheet.getPageSetup().setPrintHeadings(false);
+//            worksheet.getPageSetup().setPrintGridlines(true);
+//            worksheet.getPageSetup().setPaperSize(PaperSize.A4);
+//            worksheet.getPageSetup().setCenterHorizontally(true);
+//            worksheet.getPageSetup().setTopMargin(36); // 设置上边距为 36 磅(约 1.27 厘米)
+            worksheet.getWorkbook().setEnableCalculation(true); // 确保启用
+            worksheet.getWorkbook().calculate(); // 全局重算
+            // 自动缩小文字以适应单元格
+            try {
+                IRange usedRange = worksheet.getUsedRange();
+                if (usedRange != null) {
+                    usedRange.setShrinkToFit(true);
+                }
+            } catch (Exception e) {
+                System.err.println("[PdfController] 设置 ShrinkToFit 异常:" + e.getMessage());
+            }
             worksheet.getPageSetup().setPrintHeadings(false);
             worksheet.getPageSetup().setPaperSize(PaperSize.A4);
             worksheet.getPageSetup().setCenterHorizontally(true);
@@ -47,10 +65,55 @@ public class PdfController {
         // 设置PdfSaveOptions以将工作簿导出为PDF文件。
         PdfSaveOptions pdfOptions = new PdfSaveOptions();
         pdfOptions.setIncludeAutoMergedCells(true);
-        pdfOptions.getShrinkToFitSettings().setCanShrinkToFitWrappedText(true);
-        IShrinkToFitSettings shrinkSettings = pdfOptions.getShrinkToFitSettings();
-        shrinkSettings.setCanShrinkToFitWrappedText(true); // 启用对换行文本的缩小功能
-        workbook.save(byteArrayOutputStream, pdfOptions);
+        
+        boolean saveSuccess = false;
+        
+        // 策略 1:尝试使用 ShrinkToFit 保存
+        try {
+            pdfOptions.getShrinkToFitSettings().setCanShrinkToFitWrappedText(true);
+            pdfOptions.getShrinkToFitSettings().setMinimumFont(5);
+            pdfOptions.getShrinkToFitSettings().setEllipsis("~");
+            workbook.save(byteArrayOutputStream, pdfOptions);
+            saveSuccess = true;
+            System.out.println("[PdfController] 策略 1 成功(启用 ShrinkToFit)");
+        } catch (IndexOutOfBoundsException e) {
+            System.err.println("[PdfController] 策略 1 失败(IndexOutOfBoundsException):" + e.getMessage());
+        } catch (Exception e) {
+            System.err.println("[PdfController] 策略 1 失败:" + e.getMessage());
+        }
+        
+        // 策略 2:禁用 ShrinkToFit 重试
+        if (!saveSuccess) {
+            try {
+                // 重置输出流
+                byteArrayOutputStream.reset();
+                
+                // 禁用 ShrinkToFit 相关选项
+                pdfOptions.getShrinkToFitSettings().setCanShrinkToFitWrappedText(false);
+                workbook.save(byteArrayOutputStream, pdfOptions);
+                saveSuccess = true;
+                System.out.println("[PdfController] 策略 2 成功(禁用 ShrinkToFit)");
+            } catch (Exception e) {
+                System.err.println("[PdfController] 策略 2 失败:" + e.getMessage());
+            }
+        }
+        
+        // 策略 3:更简单的保存配置
+        if (!saveSuccess) {
+            try {
+                byteArrayOutputStream.reset();
+                // 使用最简单的配置
+                PdfSaveOptions simpleOptions = new PdfSaveOptions();
+                simpleOptions.setIncludeAutoMergedCells(true);
+                workbook.save(byteArrayOutputStream, simpleOptions);
+                saveSuccess = true;
+                System.out.println("[PdfController] 策略 3 成功(最简单配置)");
+            } catch (Exception e) {
+                System.err.println("[PdfController] 策略 3 失败:" + e.getMessage());
+                throw new RuntimeException("所有 PDF 保存策略都失败", e);
+            }
+        }
+        
         response.getOutputStream().write(byteArrayOutputStream.toByteArray());
     }
 }