前言

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

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

低代码开发平台是什么?

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

除了Adobe之外,还有什么方法可以将Excel转为PDF?的更多相关文章

  1. 永远不要在循环之外调用wait方法

    1. 前言 随着摩尔定律的失效,Amdahl定律成为了多核计算机性能发展的指导.对于现在的java程序员们来说,并发编程越来越重要和习以为常.很惭愧和恐慌的是我对java的并发编程一直是只知道概念,入 ...

  2. python-封装方法用于读取excel

    1.实现获取excel某张表的行数.单元格数据 #coding=utf-8 import xlrd #获取excel文件 data = xlrd.open_workbook('file_path/xx ...

  3. 编辑方法分享之如何编辑PDF文件内容

    我们现在在工作中会经常使用到PDF文件,还会有遇到需要编辑PDF文件的时候,PDF文件的编辑问题一直是个大难题.很多朋友在面对PDF文件的时候束手无策,不知道该怎么对它进行编辑.下面小编就教给大家一个 ...

  4. C#双面打印解决方法(打印word\excel\图片)

    最近需要按顺序打印word.excel.图片,其中有的需要单面打印,有的双面.网上查了很多方法.主要集中在几个方式解决 1.word的print和excel的printout里设置单双面 2.prin ...

  5. Java 将Excel转为SVG的方法

    本文以Java示例展示如何将Excel文档转为SVG格式.通过本文中的方法,在将Excel转为SVG时,如果sheet工作表中手动设置了分页,则将每个分页的内容单独保存为一个svg文件,如果sheet ...

  6. Adobe CS6系列PJ方法

    PJ中国人都懂得... 今天舍友问我photoshop cs6的PJ方法,我想这个问题大家都会遇到把,我这就小介绍下啦,很简单的... 我这里用PSCS6来介绍,其它软件都是一样的.而且PJ文件都是一 ...

  7. 破解 Adobe 系列的最佳方法,手把手教

    此方法是个人认为最方便的而且最安全的方法(可以避免下载到可能捆绑病毒的破解版本) 1.首先到Adobe的官网上下载 Creative Cloud: 打开官网上creative cloud 的下载页面: ...

  8. Adobe Flash builder破解方法

    Flash Builder 4 有许多新的特性,可以结合新的功能使用新的Flex 4框架创建出更炫的应用.基于用户的反馈,对以数据中心的开发也进行了优化:对类如配置从服务器返回的数据类型这样的任务,也 ...

  9. Django ORM必会13条之外的查询方法

    基于双下划线的查询 # 价格 大于 小于 大于等于 小于等于 filter(price__gt=') # 筛选出大于90 filter(price__lt=') # 筛选出小于90 filter(pr ...

  10. oracle数据库查询分组之外的数据方法

    select * from (select t.*,row_number() over(partition by 分组字段 order by rownum) rn from 表名 t where 条件 ...

随机推荐

  1. 一文带你了解EiPaaS和EiPaaS的国际趋势

    摘要:EiPaaS (Enterprise Integration Platform as a Service) 是企业级的集成平台和服务. 本文分享自华为云社区<初识EiPaaS和EiPaaS ...

  2. 火山引擎 DataTester 应用故事:一个 A/B 测试,将产品 DAU 提升了数十万

      更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 疫情让线下的需求大量转移到线上,催生出了远程办公.网络授课.线上健身等新的生态现象.如何更好地为用户服务,提升 ...

  3. 对话 BitSail Contributor | 姚泽宇:新生火焰,未来亦可燎原

    2022 年 10 月,字节跳动 BitSail 数据引擎正式开源.同期,社区推出 Contributor 激励计划第一期,目前已有 12 位开发者为 BitSail 社区做出贡献,成为了首批 Bit ...

  4. 火山引擎 DataTester:一个 A/B 测试,将一款游戏的核心收益提升了 8%

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着社会节奏及生活方式的改变,休闲游戏在移动游戏市场的占比逐渐升高,据伽马数据发布的<2022 年休闲游戏发 ...

  5. Mindjet MindManager 拖动页面

    常规的软件是按住空格建+鼠标左健 进行拖放,但 MindManager 不支持,如何对Mindjet MindManager 拖动页面? 按住 鼠标右键 直接拖拽 配合 Ctrl+滚轮 放大缩小,一起 ...

  6. MongoDB 读写分离——Windows MongoDB 副本集配置

    本文基于:MongoDB 读写分离--MongoDB 安装 参考:https://docs.mongodb.com/manual/tutorial/deploy-replica-set-for-tes ...

  7. Linux day3:⽹络不通排查流程 linux重要数据文件 系统优化相关 上传下载 文件权限 所属用户及用户组

    目录 ⽹络不通排查流程 linux重要数据文件 etc⽬录下重要的数据⽂件 usr⽬录下重要的数据⽂件 var⽬录下重要的数据⽂件 proc⽬录重要的数据⽂件 系统优化相关 环境变量 下载软件优化操作 ...

  8. mysql--ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

    问题背景: 1.在授权机器上连接mysql 8.0的数据库,账号.密码都没有问题,报错 2.使用 navicat工具连接8.0版本,报错 排查思路: 可能是创建用户没有指定插件使用了8.0自带的插件, ...

  9. Codeforces Round #666 (Div. 2) 题解报告

    https://codeforces.com/contest/1397/problem/A 题意: 给定n个字符串,问重新组合以后是否能构成相同的n个字符串 思路: 直接判断所给的字符串的每种字母是否 ...

  10. uni-app安卓手机无法连接到调试服务

    uni-app连接安卓真机,发现接口调不通,打开Hbuilder下方的调试.可查看失败原因:如下图 解决方法:电脑变热点,手机连这个热点,就能解决手机和pc在同一局域网.具体操作,参照以下网站: ht ...