0
点赞
收藏
分享

微信扫一扫

除了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

步骤一:用 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 电子表格。

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

步骤二:通过保存方法把电子表格保存成 PDF 格式

在步骤一中,我们使用 GcExcel 工作簿创建了一份 Excel 电子表格,并且把它保存成为 Excel 文件。同时,您也可以直接将工作簿保存成为 PDF 文件,而不保存为 Excel 文件。

wb.save("output/simpleBudget.pdf");

导出后,效果如下,PDF 会包含两页。

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

请注意,如果您想把整个工作表打印在一页,您可以通过工作表上的 PageSetup 类设置额外的选项。

sheet.getPageSetup().setOrientation(PageOrientation.Landscape);
sheet.getPageSetup().setIsPercentScale(false);
sheet.getPageSetup().setFitToPagesWide(1);
sheet.getPageSetup().setFitToPagesTall(1);
wb.save("output/simpleBudget.pdf");

导出的 PDF 看起来如下:

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

步骤三:加载已有的 Excel 电子表格并且转换为 PDF

如果您希望把已有的 Excel 文件(Excel,GcExcel 或者 其他第三方工具创建的 Excel 文件)转换为 PDF 文件,您只需要跟随第三步使用 GcExcel 即可满足需求。

假设您想把一个销售发票跟踪表转换成 PDF。

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

请按如下步骤转换:

  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 文件如下图:

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

总结

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




举报

相关推荐

0 条评论