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

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

低代码开发平台是什么?

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java递归结构

1.递归是一种常见的算法思路,在很多算法中都会用到。比如:深度优先搜索(DFS)等。 2.递归的基本思想就是“自己调用自己”。 递归结构包括两个部分: 递归头:什么时候不调用自身方法。如果没有递归头&#…

人机协同的效果并不总能达到预期效果

当前的人工智能技术仍然存在一定的局限性,尤其是在处理复杂的任务或灵活适应环境变化时,往往难以达到人类的水平,还有,人类参与人机协同时可能存在主观意识、情绪波动或偏见等因素,这些因素都可能会影响到人机协同的结…

BL808学习日志-3-DPI-RGB屏幕使用-LVGL D0

一、DPI-RGB驱动 BL808的手册上显示是支持RGB565屏幕显示输出的,但是一直没找到网上的使用例程。且官方的SDK显示也是能够使用的,只是缺少了驱动。这一部分驱动在SIPEED的SDK中已经内置了,今天就是简单的点亮一个800*480 RGB565的屏幕。 二、…

Java基础数据结构之Lambda表达式

一.语法 基本语法:(parameters)->expression或者(parameters)->{statements;} parameters:类似方法中的形参列表,这里的参数是函数式接口里面的参数。这里的参数可以明确说明,也可以不声明而由JVM隐含的推断。当只有一个推…

C++实习报告(集合交,并,差运算的实现)

一、问题描述 1、问题描述 集合元素类型可以是整数、字符串和小数,实现集合的交、并、差运算。 2、功能要求 (1)用户能够输入两个集合元素; (2)能够完成集合的交、并、差运算; (3&a…

07. STP的基本配置

文章目录 一. 初识STP1.1. STP概述1.2. STP的出现1.3. STP的作用1.4. STP的专业术语1.5. BPDU的报文格式1.6. STP的选择原则(1)选择根桥网桥原则(2)选择根端口原则 1.7. 端口状态1.8. STP报文类型1.9. STP的收敛时间 二. 实验专题…

【MySQL 流浪之旅】 第六讲 浅谈 MySQL 锁

系列文章目录 【MySQL 流浪之旅】 第一讲 MySQL 安装【MySQL 流浪之旅】 第二讲 MySQL 基础操作【MySQL 流浪之旅】 第三讲 MySQL 基本工具【MySQL 流浪之旅】 第四讲 MySQL 逻辑备份【MySQL 流浪之旅】 第五讲 数据库设计的三个范式 目录 系列文章目录 一、什么是锁&#x…

07-Nacos-接入Mysql实现持久化

1、默认内嵌的数据库 Derby 存于/data目录 2、扩展仅支持Mysql 5.6.5 执行Nacos中的SQL脚本,该脚本是Nacos-server文件夹中的nacos-mysql.sql 详见 01-Nacos源码打包、部署-CSDN博客 3、修改配置文件 Nacos-server中的conf目录下,application.proper…

【协程报错】TypeError: An asyncio.Future, a coroutine or an awaitable is required

报错语句: loop.run_until_complete(tasks) 改成: loop.run_until_complete(asyncio.wait(tasks))说明: 解决方法:将任务对象封装到asyncio.wait中。这里wait函数的作用是给tasks列表中每一个任务对象赋予一个可被挂起的权限。 …

5种ai智能自动写作,让你的写作效率秒拔高

写作是一项需要耗费大量时间和精力的任务,但现在有了AI智能自动写作软件,我们可以轻松提高写作效率。在国内市场上,有许多优秀的写作软件可供选择。本文将向您推荐5款国内的写作软件,并详细说明每款软件的功能特点。 爱制作AI 使…

小项目:使用MQTT上传温湿度到Onenet服务器

前言 我们之前分别编写了 DHT11、ESP8266 和 MQTT 的代码,现在我们将它们仨整合在一起,来做一个温湿度检测小项目。这个项目可以实时地将 DHT11 传感器获取到的温湿度数据上传到 OneNET 平台。通过登录 OneNET,我们随时随地可以查看温湿度数…

Hive 排名函数ROW_NUMBER、RANK()、DENSE_RANK等功能介绍、对比和举例

目录 1. ROW_NUMBER() 2. RANK() 3. DENSE_RANK() 4. NTILE() 5. CUME_DIST() 6. PERCENT_RANK() 1. ROW_NUMBER() 功能:ROW_NUMBER() 函数为每个分组内的行提供唯一的序列号,从1开始。如果在 OVER() 子句中使用 ORDER BY 语句,它将根据…

山体滑坡在线安全监测预警系统(解决方案)

在近年来,随着全球气候变化的影响,山体滑坡等自然灾害频发,给人们的生命财产安全带来了严重威胁。为了有效预防和减少山体滑坡带来的危害,许多地方开始在山上安装山体滑坡在线安全监测预警系统(解决方案)。…

Java版大厂算法题1——数字颠倒

问题描述 输入一个整数&#xff0c;将这个整数以字符串的形式逆序输出&#xff0c;程序不考虑负数的情况&#xff0c;若数字含有0&#xff0c;则逆序形式也含有0。如果输入为100&#xff0c;则输出为001。 数据范围&#xff1a;0<n<(2^30)-1 * 输入描述&#xff1a;输入…

2024年华为OD机试真题-开源项目热榜-Python-OD统一考试(C卷)

题目描述: 某个开源社区希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者。对于每个开源项目,开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数据库里面统计了每个开源项目关注、收藏、fork、issue、MR的数量,开源项目的热…

SpringBoot+SqlServer查询接口

SpringBootSqlServer查询接口 文章目录 SpringBootSqlServer查询接口1. pom环境配置2. common工具包3. 实体类接口映射4. Service层Controller层 需求&#xff1a;根据站号查询前一个小时的所有数据&#xff0c;将数据返回格式为Map<String,List<Map<String,String>…

【硬件产品经理】避免硬件产品失败 | 技术维度

目录 简介 技术维度一&#xff1a;低估产品开发 技术维度二&#xff1a;低估规模生产的复杂性 技术维度三&#xff1a;测试不足 技术维度四&#xff1a;产品太复杂 技术维度五&#xff1a;对客户承诺太高 推荐内容 简介 这节内容主要从技术维度来谈谈避免硬件产品失败这…

vue3封装el-pagination分页组件

1、效果如图&#xff1a; 2、分页组件代码&#xff1a; <template><div class"paging"><el-config-provider :locale"zhCn"><el-paginationv-model:current-page"page.currentPage"v-model:page-size"page.pageSize…

基于Prompt Learning的信息抽取

PTR: Prompt Tuning with Rules for Text Classification 清华&#xff1b;liuzhiyuan&#xff1b;通过规则制定subpromptRelation Extraction as Open-book Examination: Retrieval-enhanced Prompt Tuning Relation Extraction as Open-book Examination: Retrieval-enhance…

iPhone 14支持NFC吗?如果支持,那么怎么启用

你准备好通过启用NFC来释放iPhone 14的全部潜力了吗&#xff1f;如果你曾经想知道如何在你的设备上利用NFC&#xff0c;那么你就来对地方了。 在本综合指南中&#xff0c;我们将引导你完成在iPhone 14上激活NFC的步骤&#xff0c;使你能够无缝连接其他设备&#xff0c;进行非接…