网站首页 > java教程 正文
在 Web 应用程序或者项目的某些批处理程序中,将 Excel 转换为 PDF 文件的需求是常见的。对于 Excel 转换 PDF 的方法,从使用方便性和开发效率上来讲,使用 Python 语言目前没有合适的方法来进行转换,所以必须借助使用其他语言的方法来实现,本次我们采用 Java 语言来进行 Excel 转换 PDF,然后由 Python 语言调用来实现整个转换过程。
开发工具 |
Idea |
Java |
Spire.XLS for Java |
PyCharm |
flask |
1.Excel 转换 PDF
采用 Java 语言来实现,通过 Spire.XLS for Java 组件,组件下载地址:
https://www.e-iceblue.cn/Downloads/Free-Spire-XLS-JAVA.html
如下图:
开发工具采用 IDEA,项目结构如下图:
将下载的组件 Spire.Xls.jar 放到项目的libs目录下,并将jar文件引入项目,选择 File -> Project Structure,单击Modules,单击+,如下图:
Excel2PDF类代码:
package com.zhqy.excel2pdf;
import com.spire.xls.*;
public class Excel2PDF {
public static void excel2pdf(String excelFileName, String pdfFileName) {
//加载Excel文档
Workbook wb = new Workbook();
wb.loadFromFile(excelFileName);
//调用方法保存为PDF格式
wb.saveToFile(pdfFileName, FileFormat.PDF);
}
public static void workbook2pdf(String excelFileName, int workbookIndex, String pdfFileName) {
//加载Excel文档
Workbook wb = new Workbook();
wb.loadFromFile(excelFileName);
//获取第2个工作表
Worksheet sheet = wb.getWorksheets().get(workbookIndex);
//调用方法保存为PDF格式
sheet.saveToPdf(pdfFileName);
}
}
Main类代码:
package com.zhqy.excel2pdf;
public class Main {
public static void main(String[] args) {
if (args.length != 2 && args.length != 3) {
System.out.println("Usage: java com.zhqy.excel2pdf.Main <excel file name> [<excel workbook index>] <pdf file name>");
return;
}
String excelFileName, pdfFileName;
int workbookIndex;
excelFileName = args[0];
if (args.length == 2) {
pdfFileName = args[1];
Excel2PDF.excel2pdf(excelFileName, pdfFileName);
}
if (args.length == 3) {
workbookIndex = Integer.parseInt(args[1]);
pdfFileName = args[2];
Excel2PDF.workbook2pdf(excelFileName, workbookIndex, pdfFileName);
}
}
}
可以直接使用 Main 类进行命令行操作来完成转换工作。
将 Java 类打包,选择 File -> Project Structure,单击 Artifacts,如下图:
2.在 Python Web 项目中使用
Web 项目采用 flask 框架,具体的 flask 项目不在此赘述,Python 调用 Java 程序采用 jpype,安装:
pip3 install jpype1
在项目中增加一个包 utils,在包中创建 excel2pdf.py,代码如下:
# coding: utf-8
import jpype
import os
def excel2pdf(excel_file_name, pdf_file_name):
# JVM默认路径、Jar文件路径
jvm_path = jpype.getDefaultJVMPath()
ext_classpath = '/excel2pdf.jar'
jvm_arg = '-Djava.class.path=' + ext_classpath
# 启动JVM
if not jpype.isJVMStarted():
jpype.startJVM(jvm_path, jvm_arg)
# 测试输出
jpype.java.lang.System.out.println('hello world! ')
# Excel转PDF类
Excel2PDF = jpype.JClass('com.zhqy.excel2pdf.Excel2PDF')
Excel2PDF.excel2pdf(excel_file_name, pdf_file_name)
def workbook2pdf(excel_file_name, workbook_index, pdf_file_name):
# JVM默认路径、Jar文件路径
jvm_path = jpype.getDefaultJVMPath()
ext_classpath = '/excel2pdf.jar'
jvm_arg = '-Djava.class.path=' + ext_classpath
# 启动JVM
if not jpype.isJVMStarted():
jpype.startJVM(jvm_path, jvm_arg)
# 测试输出
jpype.java.lang.System.out.println('hello world! ')
# Excel转PDF类
Excel2PDF = jpype.JClass('com.zhqy.excel2pdf.Excel2PDF')
Excel2PDF.workbook2pdf(excel_file_name, workbook_index, pdf_file_name)
jar 文件需要复制到某个目录,本例中直接复制到了 python 项目所在磁盘的根目录,所以有下面的代码:
ext_classpath = '/excel2pdf.jar'
接下来就可以直接在 flask 项目中调用 utils 包中的方法进行文件格式转换。
猜你喜欢
- 2024-10-19 PDF转word工具分享!这5个转换工具,超级好用!
- 2024-10-19 电子书格式转换器|支持ePub、Azw3、Mobi、Doc、PDF、TXT文件
- 2024-10-19 扫呀 js 控制扫描仪,支持国产系统、ocr,pdf 导出的免费工具来了
- 2024-10-19 java如何生成动态Word文件(java动态生成图片)
- 2024-10-19 Java 将word文档转换为PNG、XPS、RTF等格式
- 2024-10-19 word转pdf软件有哪些?这几个方法教你轻松转换
- 2024-10-19 Java 转换PDF为图片时设置图片的背景透明度
- 2024-10-19 Stimulsoft v2019.2.3发布,HTML文本导出为PDF格式不再是难题
- 2024-10-19 Spire.Doc for Java 10.6.0 增强了 Word 到 PDF 和 HTML 的转换
- 2024-10-19 Java 将PPT转换为OFD(java 导出ppt)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)