前言
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的全過程,如果您想要了解更多詳細信息,可以參考這篇幫助文檔。
擴展鏈接: