您当前的位置:首页 > 计算机 > 编程开发 > Python

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

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

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

原图:

处理后:

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