除了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.hqwc.cn/news/439151.html

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

相关文章

《HTML 简易速速上手小册》第7章:HTML 多媒体与嵌入内容(2024 最新版)

文章目录 7.1 在HTML中嵌入视频和音频7.1.1 基础知识7.1.2 案例 1&#xff1a;嵌入视频文件7.1.3 案例 2&#xff1a;嵌入音频文件7.1.4 案例 3&#xff1a;创建一个视频和音频混合的播放列表 7.2 使用 <iframe> 嵌入外部内容7.2.1 基础知识7.2.2 案例 1&#xff1a;嵌入…

盒子模型的内容总结

知识引入 1.认识盒子模型 在浏览网站时我们会发现内容都是按照区域划分的。这使得网页很工整、美观。在页面中&#xff0c;每一块区域分别承载不同的内容&#xff0c;使得网页的内容虽然零散&#xff0c;但是在版式排列上依然清晰有条理。如图1 图1 *承载内容的区域称为盒子…

RabbitMQ常见生产问题详解

目录 RabbitMQ如何保证消息不丢失&#xff1f; 哪些环节会有丢消息的可能&#xff1f; RabbitMQ消息零丢失方案 1. 生产者保证消息正确发送到RibbitMQ 2. RabbitMQ消息存盘不丢消息 3. RabbitMQ 主从消息同步时不丢消息 4. RabbitMQ消费者不丢失消息 如何保证消息幂等&…

kubernetes-快速部署一套k8s集群

1、前置知识点 1.1 生产环境可部署Kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式&#xff1a; kubeadm Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。 二进制包 从github下载发行…

高端车规MCU的破局之路

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

静态分析Golang语言生成函数调用关系的利器——go-callvis

目录 升级go删除旧版本安装新版本配置环境变量载入环境修改当前环境修改之后进入的环境 分析安装go-callvis分析其他包总结 导出文件总结 清晰主体脉络总结 其他 参考资料 不同于之前分析C语言项目的工具&#xff0c;go-callvis还是很方便使用。只要把两项工作做好就能顺利的使…

蓝桥杯AT24C02问题记录

问题1&#xff1a;从这个图片上可以看出这两个在IIC的.c文件里延时时间不一样&#xff0c;第一张图使用了15个_nop_(); 12M晶振机器周期是 1/12M*121uS&#xff1b;nop()要延时1个指令周期。延时时间不对会对时序产生影响&#xff0c;时序不对&#xff0c;则AT24C02有没被使用…

C语言KR圣经笔记 5.12 复杂声明

5.12 复杂声明 C 语言有时会因为声明的语法而受到谴责&#xff0c;特别是涉及函数指针的声明语法。语法试图使声明和使用一致&#xff1b;在简单的情况下它的效果不错&#xff0c;但在更复杂的情况下会让人困惑&#xff0c;因为声明不能从左往右读&#xff0c;而且括号被过度使…

【Linux网络编程】网络编程套接字(1)

【Linux网络编程】网络编程套接字(1) 目录 【Linux网络编程】网络编程套接字(1)源IP地址和目的IP地址端口号端口号和进程ID的关系 网络通信TCP协议UDP协议网络字节序socket编程接口简单的UDP网络程序 作者&#xff1a;爱写代码的刚子 时间&#xff1a;2024.1.29 前言&#xff1…

Go语言中HTTP代理的请求和响应过程

在Go语言中&#xff0c;HTTP代理的实现涉及对请求和响应的拦截、转发和处理。下面将详细介绍这个过程。 请求过程&#xff1a; 客户端发起请求&#xff1a;客户端&#xff08;例如浏览器或其他应用程序&#xff09;发送HTTP请求到代理服务器。建立连接&#xff1a;代理服务器…

Git怎样用?(下载到本地,和在本地初始化)

全局设置&#xff1a; 点击第二个 输入&#xff1a; 例如&#xff1b;邮箱是随意地 git config --global user.name "名字" git config --global user.email "邮箱" 获取git仓库 本地初始化&#xff1a; 创建仓库 右键第二个 输入 git init 克隆&#…

nssctf round17

level1 基础共模攻击 # #真签到题 # from Crypto.Util.number import bytes_to_long, getPrime # from secret import getflag # # e1 getPrime(1024) # e2 getPrime(1024) # n e1 * e2 # m bytes_to_long(getflag().encode()) # c1 pow(m, e1, n) # c2 pow(m, e2, n) …