除了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.rhkb.cn/news/247980.html

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

相关文章

Docker 安装篇(CentOS)

Docker社区版 Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。 1、Docker 要求 C…

研发日记,Matlab/Simulink避坑指南(五)——CAN解包 DLC Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结 前言 见《研发日记,Matlab/Simulink避坑指南(一)——Data Store Memory模块执行时序Bug》 见《研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug》 见《…

Activity创建与跳转

快捷,一下创建三个 跳转

《HTML 简易速速上手小册》第1章:HTML 入门(2024 最新版)

文章目录 1.1 HTML 简介与历史(😉🌐👽踏上神奇的网页编程之旅)1.1.1 从过去到现在的华丽蜕变1.1.2 市场需求 —— HTML的黄金时代1.1.3 企业中的实际应用 —— 不只是个网页1.1.4 职业前景 —— 未来属于你 1.2 基本 H…

文献速递:人工智能医学影像分割--- 深度学习分割骨盆骨骼:大规模CT数据集和基线模型

文献速递:人工智能医学影像分割— 深度学习分割骨盆骨骼:大规模CT数据集和基线模型 我们为大家带来人工智能技术在医学影像分割上的应用文献。 人工智能在医学影像分析中发挥着至关重要的作用,尤其体现在图像分割技术上。这项技术的目的是准…

Django配置websocket时的错误解决

基于移动群智感知的网络图谱构建系统需要手机app不断上传数据到服务器并把数据推到前端标记在百度地图上,由于众多手机向同一服务器发送数据,如果使用长轮询,则实时性差、延迟高且服务器的负载过大,而使用websocket则有更好的性能…

iOS 17.4 苹果公司正在加倍投入人工智能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

组件冲突、data函数、组件通信

文章目录 1.组件的三大组成部分 - 注意点说明2.组件的样式冲突(用 scoped 解决)3.data是一个函数4.组件通信1.什么是组件通信?2.不同的组件关系 和 组件通信方案分类 5.prop详解prop 校验①类型校验②完整写法(类型,非…

Windows系统安装OpenSSH+VS Code结合内网穿透实现远程开发

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

计算机毕业设计 | SpringBoot 求职招聘管理系统(附源码)

1,绪论 1.1 开发背景 高学历人群是网络求职者的主体,且结构趋向固定。而在疫情肆虐的今日,线上招聘成了越来越多企业和个人选择的方式。在疫情期间线下招聘转为线上招聘,是疫情防控的需要。不能否定的是新的招聘模式的出现一定会…

IS-IS:04 DIS

IS-IS 协议只支持两种网络类型,即广播网络和点到点网络。与 OSPF 协议相同, IS-IS 协议在广播网络中会将网络视为一个伪节点 ( Pesudonde,简称 PSN),并选举出一台DIS (Designated IS&#xff09…

【SVD生成视频+可本地部署】ComfyUI使用(二)——使用Stable Video Diffusion生成视频 (2023.11开源)

SVD官方主页 : Huggingface | | Stability.ai || 论文地址 huggingface在线运行demo : https://huggingface.co/spaces/multimodalart/stable-video-diffusion SVD开源代码:Github(含其他项目) || Huggingface 在Comfyui使用&…

力扣72. 编辑距离

动态规划 思路: 假设 dp[i][j] 是 word1 长度 i 和 word2 长度 j 的编辑距离;有三种编辑方式:插入、删除、替换,即 word1 插入、word2 插入、替换;那么 dp[i][j] 可以是: dp[i - 1][j] 在 word1 中插入一个…

数据结构----链表介绍、模拟实现链表、链表的使用

文章目录 1. ArrayList存在的问题2. 链表定义2.1 链表的概念及结构2.2 链表的组合类型 3. 链表的实现3.1 单向、不带头、非循环链表的实现3.2 双向、不带头节点、非循环链表的实现 4.LinkedList的使用4.1 什么是LinkedList4.2 LinkedList的使用4.2.1. LinkedList的构造4.2.2. L…

基于Java SSM框架实现药品销售系统项目【项目源码+论文说明】

基于java的SSM框架实现药品销售系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个药品销售系统 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述药品销…

【Node.js】fs与path模块的基础使用

文章目录 前言一、什么叫做模块二、fs模块2.1 fs模块是干什么的?2.2 fs模块的使用导入fs模块读取文件的内容写入文件内容处理路径问题path路径模块 总结 前言 在Node.js中,fs模块(文件系统模块)是一个重要的核心模块,…

软件设计师——软件工程(五)

📑前言 本文主要是【软件工程】——软件设计师——软件工程的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1f304…

如何在群晖NAS部署office服务实现多人远程协同办公编辑文档

文章目录 本教程解决的问题是:1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 本教程解决的问题是: 1.Word,PPT,Excel等重要文件存在本地环境,如何在编…

项目交付后,PM该如何做复盘总结?

2023已经收尾,那些让我们或焦灼、或紧急、或喜悦、或悲伤的项目也都交付完毕了。为了更好的总结工作成果与反思,各家单位开始一边排练年会舞蹈一边要求员工做出项目交付后复盘方案了,那么,怎样的复盘才会让项目工作更加明确&#…

【SpringBoot3】集成Knife4j、springdoc-openapi作为接口文档

一、什么是springdoc-openapi Springdoc-openapi 是一个用于生成 OpenAPI(之前称为 Swagger)文档的库,专为 Spring Boot 应用程序设计。它可以根据你的 Spring MVC 控制器、REST 控制器和其他 Spring Bean 自动生成 OpenAPI 文档&#xff0c…