2025年3月31日 星期一 乙巳(蛇)年 正月初一 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

python实现各种文件类型转换(word、pptx、pdf、excel、csv、图片)

时间:08-20来源:作者:点击数:24

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

pdf2docx方法转换

先安装: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()
Spire.PDF方法转换
  • pip install Spire.PDF

通过Python将PDF文件转为Word文档(Doc和Docx)

PdfDocument 类代表一个PDF文档,使用其下的 LoadFromFile() 方法即可从文件载入PDF文档。在载入文档后,我们可以使用 PdfDocument 类下的 SaveToFile() 方法将PDF文档转换为其他格式的文件并保存,包括Doc、Docx、HTML、SVG等格式。在使用SaveToFile()方法时,只需要将保存路径和 FileFormat 枚举类型作为参数传递给该方法即可。

下面是操作步骤介绍:

  • 导入模块。
  • 创建PdfDocument类的实例。
  • 使用 LoadFromFile() 方法载入PDF文件。
  • 使用 SaveToFile() 方法将PDF文档转换为DOC或DOCX格式的Word文档,并关闭实例。

代码示例:

  • from spire.pdf import PdfDocument
  • from spire.pdf import FileFormat
  • # 创建PdfDocument类的实例
  • pdf = PdfDocument()
  • # 载入PDF文件
  • pdf.LoadFromFile("示例.pdf")
  • # 将PDF文件直接转换为Doc文件并保存
  • pdf.SaveToFile("output/PDF转DOC", FileFormat.DOC)
  • # 将PDF文件直接转换为Docx文件并保存
  • pdf.SaveToFile("output/PDF转DOCX", FileFormat.DOCX)
  • # 关闭实例
  • pdf.Close()

通过Python将PDF文档转换为Docx文件并设置文档属性

除了上述方法外,还可以使用PdfToDocConverter类并将文件路径作为参数创建转换实例。使用此类进行转换时,还可以对文件属性进行设置。此方法只能转换为DOC和DOCX文件。

下面是操作步骤介绍:

  • 创建 PdfToDocConverter 的实例。
  • 通过 PdfToDocConverter.DocxOptions 属性下的属性对转换出的Word文档的文档属性进行设置。
  • SaveToFile() 将PDF文件保存为DOC或DOCX文件,参数为True表示转换为DOCX文件,参数为False则表示转换为DOC文件。

代码示例:

  • from spire.pdf import PdfToDocConverter
  • # 创建PdfToDocConverter类的实例
  • converter = PdfToDocConverter("G:/文档/示例.pdf")
  • # 设置转换出的Word文档的文档属性
  • converter.DocxOptions.Title = "企业计划"
  • converter.DocxOptions.Subject = "企业管理及运营的计划草案。"
  • converter.DocxOptions.Tags = "企业, 企业管理, 工作计划"
  • converter.DocxOptions.Categories = "工作计划"
  • converter.DocxOptions.Commments = "本计划为草案,制定了工作计划的大致内容,需要进一步讨论确定详细内容。"
  • converter.DocxOptions.Authors = "李莉"
  • converter.DocxOptions.LastSavedBy = "王银"
  • converter.DocxOptions.Revision = 8
  • converter.DocxOptions.Version = "V4.0"
  • converter.DocxOptions.ProgramName = "Python"
  • converter.DocxOptions.Company = "企业名"
  • converter.DocxOptions.Manager = "企业名"
  • # 将PDF文件直接转换为Doc文件并保存
  • converter.SaveToDocx("output/PDF转DOC设置属性.doc", False)
  • # 将PDF文件直接转换为Doc文件并保存
  • converter.SaveToDocx("output/PDF转DOCX设置属性.docx", True)

总结

以上展示了如何通过Python代码将PDF文件转换为Word文档,包括转换为DOC格式和DOCX格式,以及在转换时设置结果文档的文档属性。Spire.PDF for Python还支持转换PDF文件为其他诸多格式,包括网页文件(HTML)、SVG、JPEG和PNG图片、Tiff、RTF等格式。

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下载地址:https://poppler.freedesktop.org/

解压缩后,将C:\Program Files\poppler-0.68.0\bin(可以放在其他位置)添加进环境变量-系统变量-path中,重启生效:

pdf转txt

  • import PyPDF2
  • def coverPDFToTxt(pdf_file_path=None, word_file_path=None):
  • # 打开pdf文件
  • pdf_file = open(pdf_file_path, 'rb')
  • pdf_reader = PyPDF2.PdfReader(pdf_file)
  • pages = len(pdf_reader.pages)
  • text = ""
  • # 循环遍历每一页,将文本添加到text字符串中
  • for i in range(pages):
  • page = pdf_reader.pages[i]
  • text += page.extract_text()
  • pdf_file.close()
  • with open(word_file_path, 'w', encoding='utf-8') as file:
  • file.write(text)
  • if __name__ == '__main__':
  • coverPDFToTxt('d.pdf','d.txt')

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')

python实现文档转换(只支持Windows操作系统)

安装软件
  • 如果使用微软Office转换,那需要在Windows电脑上安装微软Office办公软件
  • 如果使用金山WPS转换,那需要在Windows电脑上安装金山WPS办公软件
pypiwin32实现文档转换
  • pypiwin32安装
  • pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pypiwin32

说明:只要目标文件后缀名不变,那么FileFormat就不会变化,所以wps、doc、docx转docx的FileFormat都是12

doc / docx =》 pdf

注意:下面代码适用于微软Word,如果使用金山WPS,需要把代码中的 Word.Application 换成 Kwps.Application

  • 代码
  • from win32com.client import DispatchEx
  • import sys
  • soft = DispatchEx('Word.Application')
  • try:
  • doc = soft.Documents.Open("word源文件全路径")
  • doc.SaveAs("生成pdf文档全路径", FileFormat=17)
  • doc.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • soft.Quit()

例如:

  • from win32com.client import DispatchEx
  • import sys
  • soft = DispatchEx('Word.Application')
  • try:
  • doc = soft.Documents.Open("C:\\test\\20221020\\111.docx")
  • doc.SaveAs("C:\\test\\20221020\\111.pdf", FileFormat=17)
  • doc.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • soft.Quit()

拓展

如果大家想看到具体使用的软件,可以在try语句下方添加soft.Visible = True,不过所用软件会在任务栏一闪而过,所以要注意下任务栏,完整代码如下:

  • from win32com.client import DispatchEx
  • import sys
  • soft = DispatchEx('Word.Application')
  • try:
  • soft.Visible = True
  • doc = soft.Documents.Open("C:\\test\\20221020\\111.docx")
  • doc.SaveAs("C:\\test\\20221020\\111.pdf", FileFormat=17)
  • doc.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • soft.Quit()
xls / xlsx =》 pdf

注意:下面代码适用于微软Excel,如果使用金山WPS,需要把代码中的 Excel.Application 换成 Ket.Application,但是经过我的测试,发现目前不支持金山WPS

  • 代码
  • from win32com.client import DispatchEx
  • import sys
  • soft = DispatchEx('Excel.Application')
  • try:
  • doc = soft.Workbooks.Open("excel源文件全路径")
  • doc.SaveAs("生成pdf文档全路径", FileFormat=57)
  • doc.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • soft.Quit()

例如:

  • from win32com.client import DispatchEx
  • import sys
  • soft = DispatchEx('Excel.Application')
  • try:
  • doc = soft.Workbooks.Open("C:\\test\\20221020\\333.xlsx")
  • doc.SaveAs("C:\\test\\20221020\\333.pdf", FileFormat=57)
  • doc.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • soft.Quit()
ppt / pptx =》 pdf

注意:下面代码适用于微软PPT,如果使用金山WPS,需要把代码中的 Powerpoint.Application 换成 Kwpp.Application

  • 代码
  • from win32com.client import DispatchEx
  • import sys
  • soft = DispatchEx('Powerpoint.Application')
  • try:
  • doc = soft.Presentations.Open("ppt源文件全路径")
  • doc.SaveAs("生成pdf文档全路径", FileFormat=32)
  • doc.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • soft.Quit()

例如:

  • from win32com.client import DispatchEx
  • import sys
  • soft = DispatchEx('Powerpoint.Application')
  • try:
  • doc = soft.Presentations.Open("C:\\test\\20221020\\555.pptx")
  • doc.SaveAs("C:\\test\\20221020\\555.pdf", FileFormat=32)
  • doc.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • soft.Quit()
doc / docx =》 html

注意:下面代码适用于微软Word,如果使用金山WPS,需要把代码中的 Word.Application 换成 Kwps.Application

  • 代码
  • from win32com.client import DispatchEx
  • import sys
  • soft = DispatchEx('Word.Application')
  • try:
  • doc = soft.Documents.Open("word源文件全路径")
  • doc.SaveAs("生成html网页全路径", FileFormat=17)
  • doc.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • soft.Quit()

例如:

  • from win32com.client import DispatchEx
  • import sys
  • soft = DispatchEx('Word.Application')
  • try:
  • doc = soft.Documents.Open("C:\\test\\20221020\\111.docx")
  • doc.SaveAs("C:\\test\\20221020\\111.html", FileFormat=10)
  • doc.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • soft.Quit()
wps =》 doc / docx

注意:下面代码适用于微软Word,如果使用金山WPS,需要把代码中的 Word.Application 换成Kwps.Application

  • 代码
  • from win32com.client import DispatchEx
  • import sys
  • soft = DispatchEx('Word.Application')
  • try:
  • doc = soft.Documents.Open("wps源文件全路径")
  • doc.SaveAs("生成word文档全路径", FileFormat=12)
  • doc.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • soft.Quit()

例如:

  • from win32com.client import DispatchEx
  • import sys
  • soft = DispatchEx('Word.Application')
  • try:
  • doc = soft.Documents.Open("C:\\test\\20221020\\111.wps")
  • doc.SaveAs("C:\\test\\20221020\\111.docx", FileFormat=12)
  • doc.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • soft.Quit()
doc =》 docx

注意:下面代码适用于微软Word,如果使用金山WPS,需要把代码中的 Word.Application 换成 Kwps.Application

  • 代码
  • from win32com.client import DispatchEx
  • import sys
  • soft = DispatchEx('Word.Application')
  • try:
  • doc = soft.Documents.Open("doc源文件全路径")
  • doc.SaveAs("生成docx文档全路径", FileFormat=12)
  • doc.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • soft.Quit()

例如:

  • from win32com.client import DispatchEx
  • import sys
  • soft = DispatchEx('Word.Application')
  • try:
  • doc = soft.Documents.Open("C:\\test\\20221020\\222.doc")
  • doc.SaveAs("C:\\test\\20221020\\222.docx", FileFormat=12)
  • doc.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • soft.Quit()
pdf =》 docx

注意:下面代码适用于Adobe Acrobat DC

  • 代码
  • from win32com.client.dynamic import ERRORS_BAD_CONTEXT
  • from win32com.client import DispatchEx
  • import sys
  • import winerror
  • # 必须加,不然就会出问题
  • ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL)
  • # 打开Adobe Acrobat DC,其中使用DispatchEx()方法可以新开一个进程来做事情,避免影响已经打开的文件
  • soft = DispatchEx("AcroExch.AVDoc")
  • # 文件另存为
  • try:
  • # 打开文档
  • soft.Open("pdf源文件全路径", "")
  • file = soft.GetPDDoc()
  • jsObject = file.GetJSObject()
  • # 另存为
  • jsObject.SaveAs("生成docx文档全路径")
  • file.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • finally:
  • # 退出软件
  • soft.Close(True)

示例:

  • from win32com.client.dynamic import ERRORS_BAD_CONTEXT
  • from win32com.client import DispatchEx
  • import sys
  • import winerror
  • # 必须加,不然就会出问题
  • ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL)
  • # 打开Adobe Acrobat DC,其中使用DispatchEx()方法可以新开一个进程来做事情,避免影响已经打开的文件
  • soft = DispatchEx("AcroExch.AVDoc")
  • # 文件另存为
  • try:
  • # 打开文档
  • soft.Open("C:\\test\\20220301\\智能提取服务接口文档.pdf", "")
  • file = soft.GetPDDoc()
  • jsObject = file.GetJSObject()
  • # 另存为
  • jsObject.SaveAs("C:\\test\\20220301\\智能提取服务接口文档.docx", "com.adobe.acrobat.docx")
  • file.Close()
  • except:
  • print("错误信息:", sys.exc_info())
  • finally:
  • # 退出软件
  • soft.Close(True)
拓展

python去除图片水印

有些图片上传至博客站点后就自动被打上水印,想要二次使用时只有截小图,或者将相关代码案例重操一遍,后来在github偶然翻到python去除水印的脚本,用来也相当好用,脚本我精简过,只保留我自己需要的部分。有想看原文的可以看github的DocumentLightMarkWipeTool项目,也很简短。

  • # 图片处理
  • def imgDeal(img_path, save_path):
  • img = Image.open(img_path)
  • img = levelsDeal(img, 108, 164)
  • img_res = Image.fromarray(img.astype('uint8'))
  • print(u'图片[' + img_path + u']处理完毕')
  • img_res.save(save_path)
  • # 图像矩阵处理
  • def levelsDeal(img, black, white):
  • if white > 255:
  • white = 255
  • if black < 0:
  • black = 0
  • if black >= white:
  • black = white - 2
  • img_array = np.array(img, dtype=int)
  • cRate = -(white - black) / 255.0 * 0.05
  • rgb_diff = img_array - black
  • rgb_diff = np.maximum(rgb_diff, 0)
  • img_array = rgb_diff * cRate
  • img_array = np.around(img_array, 0)
  • img_array = img_array.astype(int)
  • return img_array
  • if __name__ == '__main__':
  • imgDeal("image/水印.png", "results/水印.png")

原图:

处理后:

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐