除了Adobe之外,还有什么方法可以将Excel转为PDF?

前言

Java是一种广泛使用的编程语言,它在企业级应用开发中发挥着重要作用。而在实际的开发过程中,我们常常需要处理各种数据格式转换的需求。今天小编为大家介绍下如何使用葡萄城公司的的Java API 组件GrapeCity Documents for Excel(以下简称为GcExcel)将Excel XLSX文件转换为PDF。

在 Java 中将 Excel 电子表格转换为 PDF 的步骤

  1. 创建 Java Excel API 创建一个 Excel 电子表格
  2. 使用保存方法将 Excel 电子表格转换为 PDF
  3. 加载已有的 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。

请按如下步骤转换:

  1. 创建一个空的 Workbook:
Workbook wb = new com.grapecity.documents.excel.Workbook();
  1. 通过 Workbook 加载 Excel 文件:
wb.open("resources/销售发票跟踪表.xlsx");
  1. 通过工作表上的 PageSetup 类,设置页面选项。这样可以将整个工作表导出成为一个页面:
for(IWorksheet sheet : wb.getWorksheets()){
    sheet.getPageSetup().setOrientation(PageOrientation.Landscape);
    sheet.getPageSetup().setIsPercentScale(false);
    sheet.getPageSetup().setFitToPagesWide(1);
    sheet.getPageSetup().setFitToPagesTall(1);
}
  1. 保存为 PDF
wb.save("output/销售发票跟踪表.pdf");

导出的 PDF 文件如下图:

总结

以上就是使用Java将Excel XLSX转换为PDF的全过程,如果您想要了解更多详细信息,可以参考这篇帮助文档

扩展链接:

Redis从入门到实践

一节课带你搞懂数据库事务!

Chrome开发者工具使用教程

从表单驱动到模型驱动,解读低代码开发平台的发展趋势

低代码开发平台是什么?

基于分支的版本管理,帮助低代码从项目交付走向定制化产品开发

posted @ 2024-01-25 09:04  葡萄城技术团队  阅读(124)  评论(0编辑  收藏  举报