除了Adobe之外,还有什么方法可以将Excel转为PDF?
前言
Java是一种广泛使用的编程语言,它在企业级应用开发中发挥着重要作用。而在实际的开发过程中,我们常常需要处理各种数据格式转换的需求。今天小编为大家介绍下如何使用葡萄城公司的的Java API 组件GrapeCity Documents for Excel(以下简称为GcExcel)将Excel XLSX文件转换为PDF。
在 Java 中将 Excel 电子表格转换为 PDF 的步骤
- 创建 Java Excel API 创建一个 Excel 电子表格
- 使用保存方法将 Excel 电子表格转换为 PDF
- 加载已有的 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。

请按如下步骤转换:
- 创建一个空的 Workbook:
Workbook wb = new com.grapecity.documents.excel.Workbook();
- 通过 Workbook 加载 Excel 文件:
wb.open("resources/销售发票跟踪表.xlsx");
- 通过工作表上的 PageSetup 类,设置页面选项。这样可以将整个工作表导出成为一个页面:
for(IWorksheet sheet : wb.getWorksheets()){
sheet.getPageSetup().setOrientation(PageOrientation.Landscape);
sheet.getPageSetup().setIsPercentScale(false);
sheet.getPageSetup().setFitToPagesWide(1);
sheet.getPageSetup().setFitToPagesTall(1);
}
- 保存为 PDF
wb.save("output/销售发票跟踪表.pdf");
导出的 PDF 文件如下图:

总结
以上就是使用Java将Excel XLSX转换为PDF的全过程,如果您想要了解更多详细信息,可以参考这篇帮助文档。
扩展链接:
除了Adobe之外,还有什么方法可以将Excel转为PDF?的更多相关文章
- 永远不要在循环之外调用wait方法
1. 前言 随着摩尔定律的失效,Amdahl定律成为了多核计算机性能发展的指导.对于现在的java程序员们来说,并发编程越来越重要和习以为常.很惭愧和恐慌的是我对java的并发编程一直是只知道概念,入 ...
- python-封装方法用于读取excel
1.实现获取excel某张表的行数.单元格数据 #coding=utf-8 import xlrd #获取excel文件 data = xlrd.open_workbook('file_path/xx ...
- 编辑方法分享之如何编辑PDF文件内容
我们现在在工作中会经常使用到PDF文件,还会有遇到需要编辑PDF文件的时候,PDF文件的编辑问题一直是个大难题.很多朋友在面对PDF文件的时候束手无策,不知道该怎么对它进行编辑.下面小编就教给大家一个 ...
- C#双面打印解决方法(打印word\excel\图片)
最近需要按顺序打印word.excel.图片,其中有的需要单面打印,有的双面.网上查了很多方法.主要集中在几个方式解决 1.word的print和excel的printout里设置单双面 2.prin ...
- Java 将Excel转为SVG的方法
本文以Java示例展示如何将Excel文档转为SVG格式.通过本文中的方法,在将Excel转为SVG时,如果sheet工作表中手动设置了分页,则将每个分页的内容单独保存为一个svg文件,如果sheet ...
- Adobe CS6系列PJ方法
PJ中国人都懂得... 今天舍友问我photoshop cs6的PJ方法,我想这个问题大家都会遇到把,我这就小介绍下啦,很简单的... 我这里用PSCS6来介绍,其它软件都是一样的.而且PJ文件都是一 ...
- 破解 Adobe 系列的最佳方法,手把手教
此方法是个人认为最方便的而且最安全的方法(可以避免下载到可能捆绑病毒的破解版本) 1.首先到Adobe的官网上下载 Creative Cloud: 打开官网上creative cloud 的下载页面: ...
- Adobe Flash builder破解方法
Flash Builder 4 有许多新的特性,可以结合新的功能使用新的Flex 4框架创建出更炫的应用.基于用户的反馈,对以数据中心的开发也进行了优化:对类如配置从服务器返回的数据类型这样的任务,也 ...
- Django ORM必会13条之外的查询方法
基于双下划线的查询 # 价格 大于 小于 大于等于 小于等于 filter(price__gt=') # 筛选出大于90 filter(price__lt=') # 筛选出小于90 filter(pr ...
- oracle数据库查询分组之外的数据方法
select * from (select t.*,row_number() over(partition by 分组字段 order by rownum) rn from 表名 t where 条件 ...
随机推荐
- 如何只用一个小时定制一个行业AI 模型?
摘要:华为云通过ModelArts Pro提供更多的行业套件和工作流可以供用户直接使用,进一步降低AI行业落地难度,让传统企业客户无需掌握算法知识亦可实现自身业务与AI技术的融合. 去年,在华为开发者 ...
- openGauss内核分析:查询重写
摘要:查询重写优化既可以基于关系代数的理论进行优化,也可以基于启发式规则进行优化. 本文分享自华为云社区<openGauss内核分析(四):查询重写>,作者:酷哥. 查询重写 SQL语言是 ...
- 谁说Redis不能存大key
摘要:推荐使用GaussDB(for Redis)搞定"大key"存储,从根本上解决社区版Redis使用风险. 本文分享自华为云社区<华为云GaussDB(for Redis ...
- 一文读懂配置管理(CM)
配置管理(Configuration Management),是一个用于建立和维护产品性能.功能和物理属性,并与其需求.设计和操作信息在整个生命周期内保持一致的系统工程. 配置管理是 ITIL(Inf ...
- pod内部网络实现
k8s主题系列: 一.k8s网络之设计与实现 二.k8s网络之pod内部网络 三.k8s网络之Flannel网络 四.k8s网络之Calico网络 pod特性 Pod 是 K8S 的最小工作单元.每个 ...
- CodeForces - 469A I Wanna Be the Guy
There is a game called "I Wanna Be the Guy", consisting of n levels. Little X and his frie ...
- Codeforce :466C. Number of Ways (数学)
https://codeforces.com/problemset/problem/466/C 解题说明:此题是一道数学题,若平分分成若干种情况,应当整体(sum)考虑,对sum/3进行分析.它是区分 ...
- vivo 全球商城:从 0 到 1 代销业务的融合之路
代销是 vivo 商城已经落地的成熟业务,本文提供给各位读者 vivo 商城代销业务中两个异构系统业务融合的对接经验和架构思路. 一.业务背景 近两年,内销商城业务的发展十分迅速,vivo 商城系统的 ...
- [网络克隆]利用tiny proxy实现局域网内批量安装WINDOWS操作系统。
说明:本文支持UEFI及BIOS系统克隆.支持UEFI及BIOS网络引导,适用于新旧几乎所有支持网络启动的电脑. 事前准备: 保证被克隆的电脑为同一配置,或者各硬件差异不大,比如CPU同如英特尔8代的 ...
- SpringCloud学习 系列六、服务平滑离线
系列导航 SpringCloud学习 系列一. 前言-为什么要学习微服务 SpringCloud学习 系列二. 简介 SpringCloud学习 系列三. 创建一个没有使用springCloud的服务 ...