除了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開發者工具使用教程

從表單驅動到模型驅動,解讀低代碼開發平臺的發展趨勢

低代碼開發平臺是什麼?

基於分支的版本管理,幫助低代碼從項目交付走向定製化產品開發

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章