|
@@ -24,8 +24,26 @@ public class PdfController {
|
|
|
workbook.open(new ByteArrayInputStream(bytes.get(0)), OpenFileFormat.Sjs);
|
|
workbook.open(new ByteArrayInputStream(bytes.get(0)), OpenFileFormat.Sjs);
|
|
|
for (int i = 0; i < workbook.getWorksheets().getCount(); i++) {
|
|
for (int i = 0; i < workbook.getWorksheets().getCount(); i++) {
|
|
|
IWorksheet worksheet = workbook.getWorksheets().get(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().setPrintHeadings(false);
|
|
|
worksheet.getPageSetup().setPaperSize(PaperSize.A4);
|
|
worksheet.getPageSetup().setPaperSize(PaperSize.A4);
|
|
|
worksheet.getPageSetup().setCenterHorizontally(true);
|
|
worksheet.getPageSetup().setCenterHorizontally(true);
|
|
@@ -47,10 +65,55 @@ public class PdfController {
|
|
|
// 设置PdfSaveOptions以将工作簿导出为PDF文件。
|
|
// 设置PdfSaveOptions以将工作簿导出为PDF文件。
|
|
|
PdfSaveOptions pdfOptions = new PdfSaveOptions();
|
|
PdfSaveOptions pdfOptions = new PdfSaveOptions();
|
|
|
pdfOptions.setIncludeAutoMergedCells(true);
|
|
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());
|
|
response.getOutputStream().write(byteArrayOutputStream.toByteArray());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|