前言
Java是一种广泛使用的编程语言,它在企业级应用开发中发挥着重要作用。而在实际的开发过程中,我们常常需要处理各种数据格式转换的需求。今天小编为大家介绍下如何使用葡萄城公司的的Java API 组件GrapeCity Documents for Excel(以下简称为GcExcel)将Excel XLSX文件转换为PDF。
在 Java 中将 Excel 电子表格转换为 PDF 的步骤
- 创建 Java Excel API 创建一个 Excel 电子表格
- 使用保存方法将 Excel 电子表格转换为 PDF
- 加载已有的 Excel 文件,并将其转换为 PDF
当在 Mac 或者 Linux 使用 GcExcel 时,需要提前将导出 PDF 使用到的字体,放入 workbook.FontFolderPath 所指向的路径中。 |
---|
步骤一:用 Excel API 创建 Excel 电子表格
您可以参考如下代码创建一个 Excel 电子表格。
public void CreateExcel() {//初始化工作簿Workbook wb = new Workbook();IWorksheet sheet = wb.getWorksheets().get(0);//设置数据sheet.getRange("B3:C7").setValue(new Object[][]{{"项目", "金额"},{"收入 1", 2500},{"收入 2", 1000},{"收入 3", 250},{"其他", 250},});sheet.getRange("B10:C23").setValue(new Object[][]{{"项目", "金额"},{"借款", 800},{"电费", 120},{"天然气", 50},{"话费", 45},{"生活用品", 500},{"车贷", 273},{"汽车费用", 120},{"助学贷款", 50},{"信用卡", 100},{"车险", 78},{"个人医保", 50},{"娱乐", 100},{"杂项", 50},});sheet.getRange("B2:C2").merge();sheet.getRange("B2").setValue("月收入");sheet.getRange("B2").setValue("月收入");sheet.getRange("B9:C9").merge();sheet.getRange("B9").setValue("月花销");sheet.getRange("E2:G2").merge();sheet.getRange("E2").setValue("收支百分比");sheet.getRange("E5:G5").merge();sheet.getRange("E5").setValue("概要");sheet.getRange("E3:F3").merge();sheet.getRange("E9").setValue("平衡");sheet.getRange("E6").setValue("总计月收入");sheet.getRange("E6:F6").merge();sheet.getRange("E7").setValue("总计月开销");sheet.getRange("E7:F7").merge();// 设置行高列宽sheet.setStandardHeight(26.25);sheet.setStandardWidth(8.43);sheet.getRange("2:24").setRowHeight(27);sheet.getRange("A:A").setColumnWidth(2.855);sheet.getRange("B:B").setColumnWidth(33.285);sheet.getRange("C:C").setColumnWidth(25.57);sheet.getRange("D:D").setColumnWidth(1);sheet.getRange("E:E").setColumnWidth(25.57);sheet.getRange("F:F").setColumnWidth(14.285);sheet.getRange("G:G").setColumnWidth(11);//添加表格ITable incomeTable = sheet.getTables().add(sheet.getRange("B3:C7"), true);incomeTable.setName("tb1Income");incomeTable.setTableStyle(wb.getTableStyles().get("TableStyleMedium4"));ITable expensesTable = sheet.getTables().add(sheet.getRange("B10:C23"), true);expensesTable.setName("tb1Expenses");expensesTable.setTableStyle(wb.getTableStyles().get("TableStyleMedium4"));//添加公式sheet.getNames().add("TotalMonthlyIncome", "=SUM(tb1Income[金额])");sheet.getNames().add("TotalMonthlyExpenses", "=SUM(tb1Expenses[金额])");sheet.getRange("E3").setFormula("=TotalMonthlyExpenses");sheet.getRange("G3").setFormula("=TotalMonthlyExpenses/TotalMonthlyIncome");sheet.getRange("G3").setStyle(wb.getStyles().get("Percent"));sheet.getRange("G6").setFormula("=TotalMonthlyIncome");sheet.getRange("G7").setFormula("=TotalMonthlyExpenses");sheet.getRange("G9").setFormula("=TotalMonthlyIncome-TotalMonthlyExpenses");//添加条件格式IDataBar dataBar = sheet.getRange("E3").getFormatConditions().addDatabar();dataBar.getMinPoint().setType(ConditionValueTypes.Number);dataBar.getMinPoint().setValue(1);dataBar.getMaxPoint().setType(ConditionValueTypes.Number);dataBar.getMaxPoint().setValue("=TotalMonthlyIncome");dataBar.setBarFillType(DataBarFillType.Gradient);dataBar.getBarColor().setColor(Color.GetRed());dataBar.setShowValue(false);//添加图表IShape shape = sheet.getShapes().addChart(ChartType.ColumnClustered, 370, 250, 250, 200);shape.getChart().getSeriesCollection().add(sheet.getRange("E6:G7"), RowCol.Columns);shape.getChart().getChartTitle().setText("收支图");shape.getChart().getSeriesCollection().get(0).delete();//添加样式IStyle currencyStyle = wb.getStyles().get("Currency");currencyStyle.setIncludeAlignment(true);currencyStyle.setHorizontalAlignment(HorizontalAlignment.Left);currencyStyle.setVerticalAlignment(VerticalAlignment.Bottom);currencyStyle.setNumberFormat("$#,##0.00");IStyle heading1Style = wb.getStyles().get("Heading 1");heading1Style.setIncludeAlignment(true);heading1Style.setHorizontalAlignment(HorizontalAlignment.Center);heading1Style.setVerticalAlignment(VerticalAlignment.Center);heading1Style.getFont().setName("SimSun");heading1Style.getFont().setBold(true);heading1Style.getFont().setSize(11);heading1Style.getFont().setColor(Color.GetWhite());heading1Style.setIncludeBorder(false);heading1Style.setIncludePatterns(true);heading1Style.getInterior().setColor(Color.FromArgb(51, 0, 102));sheet.getSheetView().setDisplayGridlines(false);sheet.getRange("B2, B9, E2, E5, E9:G9").setStyle(heading1Style);sheet.getRange("C4:C7, C11:C23, G6:G7, G9").setStyle(currencyStyle);sheet.getRange("E6:G6, E7:G7").setStyle(wb.getStyles().get("Total"));//保存电子表格wb.save("output/spreadSheet.xlsx");
}
执行完代码后,您将得到如下图一样的 Excel 电子表格。
步骤二:通过保存方法把电子表格保存成 PDF 格式
在步骤一中,我们使用 GcExcel 工作簿创建了一份 Excel 电子表格,并且把它保存成为 Excel 文件。同时,您也可以直接将工作簿保存成为 PDF 文件,而不保存为 Excel 文件。
wb.save("output/simpleBudget.pdf");
导出后,效果如下,PDF 会包含两页。
请注意,如果您想把整个工作表打印在一页,您可以通过工作表上的 PageSetup 类设置额外的选项。
sheet.getPageSetup().setOrientation(PageOrientation.Landscape);
sheet.getPageSetup().setIsPercentScale(false);
sheet.getPageSetup().setFitToPagesWide(1);
sheet.getPageSetup().setFitToPagesTall(1);
wb.save("output/simpleBudget.pdf");
导出的 PDF 看起来如下:
步骤三:加载已有的 Excel 电子表格并且转换为 PDF
如果您希望把已有的 Excel 文件(Excel,GcExcel 或者 其他第三方工具创建的 Excel 文件)转换为 PDF 文件,您只需要跟随第三步使用 GcExcel 即可满足需求。
假设您想把一个销售发票跟踪表转换成 PDF。
请按如下步骤转换:
- 创建一个空的 Workbook:
Workbook wb = new com.grapecity.documents.excel.Workbook();
- 通过 Workbook 加载 Excel 文件:
wb.open("resources/销售发票跟踪表.xlsx");
- 通过工作表上的 PageSetup 类,设置页面选项。这样可以将整个工作表导出成为一个页面:
for(IWorksheet sheet : wb.getWorksheets()){sheet.getPageSetup().setOrientation(PageOrientation.Landscape);sheet.getPageSetup().setIsPercentScale(false);sheet.getPageSetup().setFitToPagesWide(1);sheet.getPageSetup().setFitToPagesTall(1);
}
- 保存为 PDF
wb.save("output/销售发票跟踪表.pdf");
导出的 PDF 文件如下图:
总结
以上就是使用Java将Excel XLSX转换为PDF的全过程,如果您想要了解更多详细信息,可以参考这篇帮助文档。
扩展链接:
Redis从入门到实践
一节课带你搞懂数据库事务!
Chrome开发者工具使用教程
从表单驱动到模型驱动,解读低代码开发平台的发展趋势
低代码开发平台是什么?
基于分支的版本管理,帮助低代码从项目交付走向定制化产品开发