除了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,一经查实,立即删除!

相关文章

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…

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

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

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

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

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

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

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

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

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;进行非接…

github添加 SSH 密钥

1 打开终端 输入 ssh-keygen -t rsa -b 4096 -C "github邮箱地址"如果不需要密码可以一路回车 出现这个页面就是生存成功了 open ~/.ssh // 打开.ssh 找到id_rsa.pub复制出内容新建ssh密钥输入内容,保存即可

网络安全|重大失误!微软被盗测试账号拥有公司Office 365管理员权限

微软网络近期遭黑客入侵&#xff0c;高管电子邮件被监视长达两个月。 一位研究员表示&#xff0c;黑客通过获取一个拥有管理员权限的老旧测试帐号的访问权限来实施入侵&#xff0c;这是微软犯下的重大失误。 微软在1月25日&#xff08;上周四&#xff09;发布第二篇公告&…

Linux:重定向

Linux&#xff1a;重定向 输出重定向追加重定向输出重定向与追加重定向的本质输入重定向 输出重定向 在Linux中&#xff0c;输出重定向是一种将命令的输出发送到不同位置的方法。通常&#xff0c;执行命令时&#xff0c;输出会显示在终端上。然而&#xff0c;使用输出重定向&a…

vue3 + antd 封装动态表单组件(三)

传送带&#xff1a; vue3 antd 封装动态表单组件&#xff08;一&#xff09; vue3 antd 封装动态表单组件&#xff08;二&#xff09; 前置条件&#xff1a; vue版本 v3.3.11 ant-design-vue版本 v4.1.1 我们发现ant-design-vue Input组件和FormItem组件某些属性支持slot插…

数据写入HBase(scala)

package sourceimport org.apache.hadoop.hbase.{HBaseConfiguration, TableName} import org.apache.hadoop.hbase.client.{ConnectionFactory, Put} import org.apache.hadoop.hbase.util.Bytesobject ffff {def main(args: Array[String]): Unit {//hbase连接配置val conf …