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

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

低代码开发平台是什么?

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/357181.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3使用AntV G6 (图可视化引擎)历程[三]

上期回顾:历程[二]描述了节点抽离自定义节点并做数据静态渲染。下面这篇继续描述节点升级版的模块化抽离以及动态数据渲染 官网地址:https://g6-next.antv.antgroup.com/manual/introduction “antv/g6”: “^4.8.24” 一、 案例效果 二、自定义节点的模…

第九节HarmonyOS 常用基础组件14-DataPanel

1、描述 数据面板组件,用于将多个数据占比情况使用占比图进行展示。 2、接口 DataPanel(options:{values: number[], max?: numner, type?: DataPanelType}) 3、参数 参数名 参数类型 必填 描述 values number[] 是 数据值列表,最多含9条数…

SpringCloud微服务常见问题

1 微服务 返回面试宝典 问题1 SpringCloud常见组件有哪些? SpringCloud包含的组件很多,有很多功能是重复的,其中最常见的组件包括: 注册中心组件:Eureka、Nacos等;负载均衡组件:Ribbon&…

Spring Security的入门案例!!!

一、导入依赖 <dependencies><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--security--><dependency><groupId>…

如何获得《幻兽帕鲁》隐藏帕鲁唤夜兽?13000个配种配方查询 幻兽帕鲁Steam好评率还在涨 Mac苹果电脑玩幻兽帕鲁 Crossover玩Windows游戏

《幻兽帕鲁》是一款Steam平台热门游戏&#xff0c;开放式大陆和养成式冒险结合&#xff0c;成为2024首款热门游戏&#xff0c;不过由于官方仅发布了Windows版的游戏客户端&#xff0c;Mac用户无法直接玩&#xff0c;好在有Crossover这样的神器&#xff0c;让苹果电脑也能玩上《…

OCP NVME SSD规范解读-8.SMART日志要求-2

SMART-7&#xff1a; 软错误ECC计数可能是记录了被第一级ECC&#xff08;比如LDPC Hard Decode&#xff09;成功纠正过的读取错误次数。这意味着数据恢复成功&#xff0c;但依然表明存储介质出现了某种程度上的可靠性下降。 LDPC码是一种基于稀疏矩阵的纠错码&#xff0c;它由…

WebGL 入门:开启三维网页图形的新篇章(下)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

go基础-垃圾回收+混合写屏障GC全分析

垃圾回收(Garbage Collection&#xff0c;简称GC)是编程语言中提供的自动的内存管理机制&#xff0c;自动释放不需要的对象&#xff0c;让出存储器资源&#xff0c;无需程序员手动执行。 Golang中的垃圾回收主要应用三色标记法&#xff0c;GC过程和其他用户goroutine可并发运行…

高端车规MCU的破局之路

目录 1 低质量的无效内卷 2 高端车规MCU产品共性 2.1 支持标定测量 2.2 低延迟通信加速 2.3 完备的网络安全解决方案 2.4虚拟化 3 国产替代的囚徒困境 1 低质量的无效内卷 近几年&#xff0c;车规MCU国产替代的呼声此消彼长&#xff0c;但仍然集中在低端产品。 从产…

网络安全知识和华为防火墙

网络安全 网络空间安全 ---Cyberspace 2003年美国提出的网络空间概念 ---一个由信息基础设施组成的互相依赖的网络。 我国官方文件定义&#xff1a;网络空间为继海、陆、空、天以外的第五大人类互动领域。 通信保密阶段 --- 计算机安全阶段 --- 信息系统安全 --- 网络空间安…

引用httplib时报undefined reference to `__imp_WSASocketW‘的解决方案

报错信息如下&#xff1a; undefined reference to __imp_getaddrinfo undefined reference to __imp_WSASocketW’ undefined reference to __imp_socket undefined reference to __imp_setsockopt’ undefined reference to __imp_setsockopt undefined reference to __imp_…

主从数据库MySQL服务重启步骤与注意事项

主从数据库MySQL服务重启步骤与注意事项 实验环境&#xff1a; 172.20.26.34 &#xff08;主应用服务器&#xff09; 172.20.26.26 &#xff08;备应用服务器&#xff09; 172.20.26.37 &#xff08;主库服务器&#xff09; 172.20.26.38 &#xff08;从库服务器&…

防御保护----防火墙基本知识

一.防火墙的基本知识--------------------------------------------------------- 防火墙&#xff1a;可以想象为古代每个城市的城墙&#xff0c;用来防守敌军的攻击。墙&#xff0c;始于防&#xff0c;忠于守。从古至今&#xff0c;墙予人以安全之意。 防火墙的主要职责在于&…

【客户端性能测试】手机设备的“高中端”怎么判断

在做客户端性能测试的时候&#xff0c;选择手机是一个老大难话题了&#xff0c;我们不可能随便拿一台设备就开工&#xff0c;最少也得选择高端机、终端机、低端机来看看结果。 一、先上科普 1.1 SoC 1.2 CPU 1.3 厂商rom 1.4 XXXm 二、划分思路 2.1 思路【目前是没有市面…

python字典JSON 和csv文件

JSON与Python字典 Python中的字典与JSON非常类似而且支持嵌套结构。Json通过key取值的过程和python字典通过索引取值过程完全一致。JavaScript数据类型&#xff08;值&#xff09;对应的Python数据类型&#xff08;值&#xff09; JSONPythonobjectdictarraylist/tuplestring…

Linux自动备份MySQL数据库

目录 1. 创建备份目录2. 创建自动化备份脚本3. 执行备份脚本测试4. 设置每天凌晨两点自动执行 1. 创建备份目录 cd home mkdir backup2. 创建自动化备份脚本 vim backup.sh编辑脚本内容主机&#xff0c;用户名&#xff0c;密码&#xff0c;备份数据库及备份路径自行填写 #!/…

ESP8266 传感器搭配 Node-RED实时显示数据,邮件告警 实验

前言 esp8266 12f,wif模块,接倾斜传感器,火焰传感器,烟雾传感器,水浸传感器,蜂鸣器。通过mqtt发布数据,并使用node-red实时获取数据,显示到页面上。并且通过邮件和页面两种方式报警。 需求如下: ①倾斜传感器:监测是否保持平衡。UI界面显示平衡度。如果不平衡,UI界…

制作OpenSSH 9.6 for openEuler 22.03 LTS的rpm升级包

OpenSSH作为操作系统底层管理平台软件&#xff0c;需要保持更新以免遭受安全攻击&#xff0c;编译生成rpm包是生产环境中批量升级的最佳途径。本文在国产openEuler 22.03 LTS系统上完成OpenSSH 9.6的编译工作。 一、编译环境 1、准备环境 基于vmware workstation发布的x86虚…

基于模型参考自适应的永磁同步电机MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 首先对传感器采集的电机电流和电压进行坐标变换&#xff0c;分别求得 dq轴的电流、电压。以此为依据&#xff0c;通过并联条模型计算 dq轴的电流的估计量&#xff0c;得到电流误差&#xff0c;然后…

Cloudreve个人网盘系统源码 支持云存储(七牛、阿里云OSS、腾讯云COS、又拍云、OneDrive) 基于Go框架

现在的网盘动不动就限速&#xff0c;涨价&#xff0c;弄得很是心烦。今天分享一款开源免费的网盘项目&#xff0c;基于 Go 语言开发的 Cloudreve。Cloudreve基于Go框架云存储个人网盘系统源码支持多家云存储驱动&#xff08;从机、七牛、阿里云 OSS、腾讯云 COS、又拍云、OneDr…