Python Web 开发中 Excel 转 PDF 文件
在 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 包中的方法进行文件格式转换。