用python实现各种文件类型转换

一、word转pdf

先安装win32库:pip install pywin32

from win32com.client import gencache
from win32com.client import constants, gencache

def createPdf(wordPath, pdfPath):
    """
    word转pdf
    :param wordPath: word文件路径
    :param pdfPath:  生成pdf文件路径
    """
    word = gencache.EnsureDispatch('Word.Application')
    doc = word.Documents.Open(wordPath, ReadOnly=1)
    doc.ExportAsFixedFormat(pdfPath,
                            constants.wdExportFormatPDF,
                            Item=constants.wdExportDocumentWithMarkup,
                            CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
    word.Quit(constants.wdDoNotSaveChanges)

createPdf('D:\桌面\论文阅读笔记.docx','D:\桌面\论文阅读笔记.pdf')

运行结果:
在这里插入图片描述
在这里插入图片描述

二、excel转pdf

# Import Module
from win32com import client
  
# Open Microsoft Excel
excel = client.Dispatch("Excel.Application")
  
# Read Excel File
sheets = excel.Workbooks.Open('F:\书籍借阅信息.xlsx')
work_sheets = sheets.Worksheets[0]
  
# Convert into PDF File
work_sheets.ExportAsFixedFormat(0, 'F:\书籍借阅信息.pdf')

# 关闭服务
excel.Quit()

运行结果:
在这里插入图片描述
在这里插入图片描述

三、ppt转pdf

# 1). 导入需要的模块(打开应用程序的模块)
import win32com.client
import os
def ppt2pdf(filename, output_filename):
    """
    PPT文件导出为pdf格式
    :param filename: PPT文件的名称
    :param output_filename: 导出的pdf文件的名称
    :return:
    """
    # 2). 打开PPT程序
    ppt_app = win32com.client.Dispatch('PowerPoint.Application')
    # ppt_app.Visible = True  # 程序操作应用程序的过程是否可视化

    # 3). 通过PPT的应用程序打开指定的PPT文件
    # filename = "C:/Users/Administrator/Desktop/PPT办公自动化/ppt/PPT素材1.pptx"
    # output_filename = "C:/Users/Administrator/Desktop/PPT办公自动化/ppt/PPT素材1.pdf"
    ppt = ppt_app.Presentations.Open(filename)

    # 4). 打开的PPT另存为pdf文件。17数字是ppt转图片,32数字是ppt转pdf。
    ppt.SaveAs(output_filename, 32)
    print("导出成pdf格式成功!!!")
    # 退出PPT程序
    ppt_app.Quit()


# 要处理的目录名称
dirname = 'D:\桌面\智能算法设计与实现'
# 列出指定目录的内容
filenames = os.listdir(dirname)
# for循环依次访问指定目录的所有文件名
for filename in filenames:
    # 判断文件的类型,对所有的ppt文件进行处理(ppt文件以ppt或者pptx结尾的)
    if filename.endswith('ppt') or filename.endswith('pptx'):
        # print(filename)           # PPT素材1.pptx -> PPT素材1.pdf
        # 将filename以.进行分割,返回2个信息,文件的名称和文件的后缀名
        base, ext = filename.split('.')  # base=PPT素材1 ext=pdf
        new_name = base + '.pdf'         # PPT素材1.pdf
        # ppt文件的完整位置: C:/Users/Administrator/Desktop/PPT办公自动化/ppt/PPT素材1.pptx
        filename = dirname + '/' + filename
        # pdf文件的完整位置: C:/Users/Administrator/Desktop/PPT办公自动化/ppt/PPT素材1.pdf
        output_filename = dirname + '/' + new_name
        # 将ppt转成pdf文件
        ppt2pdf(filename, output_filename)

运行结果:
在这里插入图片描述
在这里插入图片描述

四、图片转pdf

from PIL import Image
import os

# 防止字符串乱码
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

def pic2pdf(img_path, pdf_path):
    file_list = os.listdir(img_path)
    for x in file_list:
        if "jpg" in x or 'png' in x or 'jpeg' in x:
            pdf_name = x.split('.')[0]
            im1 = Image.open(os.path.join(img_path, x))
            im1.save(pdf_path + pdf_name + '.pdf', "PDF", resolution=100.0)

if __name__ == '__main__':
    # 待转换图像路径
    img_path = r"D:\桌面\\"
    # 转换后的pdf存放路径
    pdf_path = r'D:\桌面\\'

    pic2pdf(img_path=img_path, pdf_path=pdf_path)

五、pdf转word

先安装:pip install pdf2docx

from pdf2docx import Converter
pdf_file = r'D:\桌面\论文阅读笔记.pdf'
docx_file = r'D:\桌面\论文阅读笔记.docx'
cv = Converter(pdf_file)
cv.convert(docx_file, start=0, end=None)
cv.close()

六、pdf转图片

先安装:pip install pdf2image

from pdf2image import convert_from_path
pages = convert_from_path('D:\桌面\论文阅读笔记.pdf', 500)

# 保存
for page in pages:
    page.save('D:\桌面\论文阅读笔记.jpg', 'JPEG')
# 多图保存
for index, img in enumerate(pages):
    img.save('E:\识别\page_%s.jpg' % (index+1))

如果报错pdf2image.exceptions.PDFInfoNotInstalledError: Unable to get page count. Is poppler installed and in PATH?
则需要安装配置poppler:
Windows的poppler下载地址:http://blog.alivate.com.au/poppler-windows/
解压缩后,将C:\Program Files\poppler-0.68.0\bin(可以放在其他位置)添加进环境变量-系统变量-path中,重启生效:
在这里插入图片描述

七、csv转excel

import pandas as pd
data = pd.read_csv('F:/train.csv',index_col=0)
data.to_excel('F:/train.xlsx',encoding='utf-8')

八、excel转csv

import pandas as pd
data = pd.read_excel('F:/train.xlsx',index_col=0)
data.to_csv('F:/train.csv',encoding='utf-8')

九、PDF转excel

#方法一
from spire.pdf.common import *
from spire.pdf import *
 
# 创建PdfDocument对象
pdf = PdfDocument()
 
# 加载PDF文档
pdf.LoadFromFile("C:/Users/13994/Desktop/123.pdf")
 
# 创建 XlsxLineLayoutOptions 对象来指定转换选项
convertOptions = XlsxLineLayoutOptions(False, True, False, True, False)
 
# 设置转换选项
pdf.ConvertOptions.SetPdfToXlsxOptions(convertOptions)
 
# 将PDF文档保存为Excel XLSX格式
pdf.SaveToFile("C:/Users/13994/Desktop/Pdf转Excel.xlsx", FileFormat.XLSX)
pdf.Close()

spire.pdf这个库只能转10页pdf,更多好像是需要收费的。

#方法二
import camelot.io as camelot
from openpyxl import Workbook

work = Workbook()
sheet = work.active

data = camelot.read_pdf("C:/Users/13994/Desktop/123.pdf", pages='all',flavor='stream')
for i in range(data.n):
    for rows in data[i].data:
        sheet.append(rows)
work.save('C:/Users/13994/Desktop/Pdf转Excel.xlsx')

注意安装camelot是pip install camelot-py[all]。如果安装好后运行程序出现报错TypeError: ‘numpy._DTypeMeta’ object is not subscriptable,参考文章
但是这个库我用着处理表格数据效果并不好。

#提取pdf表格数据并保存到excel中
import pdfplumber
from openpyxl import Workbook
class PDF(object):
    def __init__(self, file_path):
        self.pdf_path = file_path
        # 读取pdf
        try:
            self.pdf_info = pdfplumber.open(self.pdf_path)
            print('读取文件完成!')
        except Exception as e:
            print('读取文件失败:', e)
 
    # 打印pdf的基本信息、返回字典,作者、创建时间、修改时间/总页数
    def get_pdf(self):
        pdf_info = self.pdf_info.metadata
        pdf_page = len(self.pdf_info.pages)
        print('pdf共%s页' % pdf_page)
        print("pdf文件基本信息:\n", pdf_info)
        self.close_pdf()
 
    # 提取表格数据,并保存到excel中
    def get_table(self):
        wb = Workbook()  # 实例化一个工作簿对象
        ws = wb.active  # 获取第一个sheet
        con = 0
        try:
            # 获取每一页的表格中的文字,返回table、row、cell格式:[[[row1],[row2]]]
            for page in self.pdf_info.pages:
                for table in page.extract_tables():
                    for row in table:
                        # 对每个单元格的字符进行简单清洗处理
                        row_list = [cell.replace('\n', ' ') if cell else '' for cell in row]
                        ws.append(row_list)  # 写入数据
                con += 1
                print('---------------分割线,第%s页---------------' % con)
        except Exception as e:
            print('报错:', e)
        finally:
            wb.save('/'.join(self.pdf_path.split('/')[:-1]) + '/pdf_excel.xlsx')
            print('写入完成!')
            self.close_pdf()
 
    # 关闭文件
    def close_pdf(self):
        self.pdf_info.close()
 
 
if __name__ == "__main__":
    file_path = 'C:/Users/13994/Desktop/123.pdf'
    pdf_info = PDF(file_path)
    # pdf_info.get_pdf() # 打印pdf基础信息
    # 提取pdf表格数据并保存到excel中,文件保存到跟pdf同一文件路径下
    pdf_info.get_table()

在试了一圈后,还是发现这个方法最有效,原文

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值