首页 > 其他分享 >除了Adobe之外,还有什么方法可以将Excel转为PDF?

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

时间:2024-01-25 09:12:08浏览次数:34  
标签:getRange Adobe wb Excel setValue PDF sheet

前言

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开发者工具使用教程

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

低代码开发平台是什么?

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

标签:getRange,Adobe,wb,Excel,setValue,PDF,sheet
From: https://www.cnblogs.com/powertoolsteam/p/17861279.html

相关文章

  • 【专题】2023年中国工业机器人行业研究报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34144原文出处:拓端数据部落公众号仿生机器人作为一类结合了仿生学原理的机器人,具备自主决策和规划行动的能力,正逐渐进入大众视野。它们的核心技术要素包括感知与认知技术、运动与控制技术、人机交互技术和自主决策技术。阅读原文,获取专题报告合集......
  • 《设计模式:可复用面向对象软件的基础》PDF
    内容简介本书结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中*有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。本书适合大学计算机专业的学生、研究生及相关人......
  • 《设计模式之美》PDF
    内容简介本书结合真实项目案例,从面向对象编程范式、设计原则、代码规范、重构技巧和设计模式5个方面详细介绍如何编写高质量代码。第1章为概述,简单介绍了本书涉及的各个模块,以及各个模块之间的联系;第2章介绍面向对象编程范式;第3章介绍设计原则;第4章介绍代码规范;第5章介绍重构技巧;......
  • Python处理Excel表格的终极指南
    案例学Python(进阶篇)源代码.zip 链接:https://pan.quark.cn/s/c00aefe52fdc案例学Python(基础篇)源代码.zip 链接:https://pan.quark.cn/s/15c0b553b6b8引言Excel表格在数据处理和日常办公中扮演着不可或缺的角色。本文将详细介绍如何使用Python中的openpyxl库来处理Excel文件,......
  • 数据挖掘||利用SQL Server 2012或者Excel 2013采用聚类和时序挖掘模型和算法,对自行车
    1.实验要求 利用SQLServer2012或者Excel2013(二者选择其一即可)进行数据挖掘实验,采用聚类和时序挖掘模型和算法,可以对附件中给定的excel数据进行聚类和时序挖掘实验,也可以采用自己采集的数据(如采用自选请说明数据来源)。 2.实验环境 操作系统:windows11;软件:Excel2019;SQLServer......
  • Adobe After Effects 2024:让你的创意动起来 mac/win版
    AdobeAfterEffects2024是一款专业的数字视觉效果、合成和运动图形软件,被广泛应用于电影、电视、广告和网络媒体等领域。它能够帮助用户快速高效地将创意转化为令人惊叹的视觉效果,是视觉艺术家的首选工具之一。→→↓↓载AdobeAfterEffects2024mac/win版在AdobeAfterE......
  • itext的PdfPCell中设置行间距失败的问题
     直接在构造方法添加的时候设置行间距是失效的PdfPCellpdfPCell=newPdfPCell(elements);//这个时候就不能直接把段落放构造方法中了,因为newPdfPCell(elements)底层使用的是this.column.setLeading(0.0F,1.0F);不会延用elements的setLeading,因此在单元格中添加段落建......
  • [转]记录原生table转excel表格并导出功能_前端知识库
    不需要引进其他前端插件,还可以保留原有样式,简单表导出非常合适.实测有效,只是貌似只能使用xls后缀名,而且打开时office会有警告,原理可以看后面的其他参考文章,应当是利用url,所以大小可能有2M的限制,所以不适合导出大文件.原文地址:记录原生table转excel表格并导出功能_前端......
  • SQL必知必会(第5版)PDF下载
    SQL是使用最为广泛的数据库语言,几乎所有重要的DBMS都支持SQL。本书是麻省理工学院、伊利诺伊大学等众多大学的参考教材,由浅入深地讲解了SQL的基本概念和语法,涉及数据的排序、过滤和分组,以及表、视图、联结、子查询、游标、存储过程和触发器等内容,实例丰富,便于查阅。与其他同类图书......
  • 第一行代码 Android(第3版)PDF下载
    《第一行代码Android第3版》被Android开发者誉为“Android学习第一书”。全书系统全面、循序渐进地介绍了Android软件开发的必备知识、经验和技巧。《第一行代码Android第3版》基于Android10.0对第2版进行了全面更新,不仅将所有知识点都在Android10.0系统上进行了重新适配,同......