前言
最近在搞知识库,需要把各种 Word、PowerPoint、Excel 文件转换成 PDF 文件,不然 Word 中的表格中的文字提取会出现一些问题;使用 Office 或者 WPS 将大量文件转换成 PDF 需要频繁重复打开文件,点击保存为PDF,然后再关闭,非常繁琐。所以就简单的写了下面的 Python 程序来帮助我转化。
代码
下面的程序需要使用开源 Office 工具 —— libreoffice,安装该工具后才能使用下面的命令行才能使用 libreoffice 中的 PDF 转化功能将文档转化。
import os
import subprocess
from pathlib import Path
from tkinter import Tk, filedialog, messagebox
def convert_to_pdf(input_file):
try:
# Get the directory of the input file
input_dir = os.path.dirname(input_file)
# Prepare output file path
output_file = os.path.join(input_dir, Path(input_file).stem + '.pdf')
# Convert to PDF using LibreOffice
subprocess.run(['soffice', '--headless', '--convert-to', 'pdf', input_file, '--outdir', input_dir],
check=True)
print(f"Converted {input_file} to {output_file}")
return output_file
except Exception as e:
print(f"Error converting file {input_file}: {e}")
return None
def select_files_and_convert():
# Supported file extensions
supported_extensions = [ ('files', '*.doc;*.docx;*.ppt;*.pptx;*.xls;*.xlsx'),
('Word files', '*.doc;*.docx'),
('PowerPoint files', '*.ppt;*.pptx'),
('Excel files', '*.xls;*.xlsx')]
# Create Tkinter root window
root = Tk()
root.withdraw() # Hide the root window
# Open file dialog to select files
files = filedialog.askopenfilenames(title="Select files to convert", filetypes=supported_extensions)
if not files:
messagebox.showinfo("No files selected", "No files were selected for conversion.")
return
# Convert selected files
for file in files:
output_file = convert_to_pdf(file)
if output_file:
# messagebox.showinfo("Success", f"Converted {file} to {output_file}")
print(f"Converted {file} to {output_file}")
else:
# messagebox.showerror("Error", f"Failed to convert {file}")
print(f"Failed to convert {file}")
def main():
select_files_and_convert()
if __name__ == "__main__":
main()
效果展示
效果大致如下,点击运行后,就会弹出选择框,批量选择文件后,就会开始转化。