Excel转pdf,内存溢出

我有一个excel文件,
海尔学校问题费用明细-转pdf内存溢出.zip (121.6 KB)

我发现他有很多空白列,会导致内存溢出,在分页预览模式下能看到很多页,每一页有一些单元格,我想知道能否获取excel文件的最大列数,这样我可以根据列数来决定是否需要转换,目前我只能通过手动删除多余的列来转换。
另外,我使用poi读取excel的列,发现某些文件读取列数不准确。

或者还有其他方案可以避免这种问题吗

@humanhuman,
如果你想获取当前Worksheet的最大列,你可以参考以下API:

@humanhuman,

要在呈现为 PDF 之前获取总页数或 pagcount,您可以尝试以下示例代码:
例如
示例代码:

Workbook wb = new Workbook(stringFilePath);
//get total page count
WorkbookPrintingPreview workbookPrintingPreview = new WorkbookPrintingPreview(wb, new ImageOrPrintOptions());
int totalPageCount = workbookPrintingPreview.getEvaluatedPageCount();
System.out.print(totalPageCount);

此外,您可以通过以下代码行删除不需要的空白页。 这样,您将只呈现有效的数据页,这将删除数千个不必要的空白页:

Workbook wb = new Workbook(stringFilePath);
wb.getWorksheets().get(0).getCells().deleteBlankRows();
wb.getWorksheets().get(0).getCells().deleteBlankColumns();

希望,这对您有所帮助。

我使用maxCloumn这个方法,可以获取页面预览的列数,这样转换出来的pdf就是页面预览的样子,如果在页面预览的外面还有其他单元格,这种情况下,页面预览外的单元格是否会增加转换时间和内容
我的excel和转换的pdf:新建文件夹.zip (14.0 KB)

@humanhuman.

请参阅我上面的回复以供您完整参考。

@humanhuman
请设置PdfSaveOptions.PrintingPageType 为PrintingPageType.IgnoreStyle 来忽略空白页:

Workbook workbook = new Workbook(dir+ "海尔学校问题费用明细-转pdf内存溢出.xlsx");
PdfSaveOptions saveOptions = new PdfSaveOptions();
saveOptions.PrintingPageType = PrintingPageType.IgnoreStyle;
workbook.Save(dir + "dest.pdf", saveOptions);

@humanhuman
或者你可以设置打印区域:

Workbook workbook = new Workbook(dir+ "海尔学校问题费用明细-转pdf内存溢出.xlsx");
Cells cells = workbook.Worksheets[0].Cells;
int maxDataRow = cells.MaxDataRow;
int maxDataColumn = cells.MaxDataColumn;
PageSetup p = workbook.Worksheets[0].PageSetup;
p.PrintArea = "A1:" + CellsHelper.CellIndexToName(maxDataRow, maxDataColumn);
//p.FitToPagesWide = 1;
PdfSaveOptions saveOptions = new PdfSaveOptions();
//saveOptions.AllColumnsInOnePagePerSheet = true;
saveOptions.PrintingPageType = PrintingPageType.IgnoreStyle;
workbook.Save(dir + "dest.pdf", saveOptions);