python convierte pdf a imágenes por lotes | convierte pdf a jpg/png | convierte word a pdf por lotes | python convierte word a imágenes por lotes

Este artículo presenta un método para hacer esto utilizando una secuencia de comandos de Python, que se implementa en base a las bibliotecas PyMuPDF, pdf2image y win32com, que pueden ayudarlo a convertir rápidamente documentos de Word en archivos PDF y convertir archivos PDF en imágenes PNG.

1. Instale las bibliotecas y el software necesarios

Antes de que pueda comenzar a usar este script, debe instalar los módulos de Python necesarios y el software asociado. En concreto, necesitas instalar las tres bibliotecas PyMuPDF, pdf2image y win32com, así como el software Microsoft Word y el programa Poppler. Los módulos de Python se pueden instalar con el siguiente comando:

pip install PyMuPDF 
pip install pdf2image 
pip install pypiwin32

La biblioteca PyMuPDF se usa para convertir archivos PDF a imágenes; la biblioteca pdf2image se usa para convertir archivos PDF a imágenes PNG; la biblioteca pypiwin32 se usa para interactuar con el software Microsoft Word y convertir documentos. Además, debe descargar e instalar el software Microsoft Word y agregar la ruta del programa Poppler a la variable de entorno del sistema.

2. Cargue y convierta un documento de Word

Una vez que haya instalado las bibliotecas y el software necesarios, estará listo para comenzar a usar el script. El script se divide principalmente en tres partes, que son la conversión de documentos de Word a archivos docx, la conversión de archivos docx a archivos PDF y la conversión de archivos PDF a imágenes PNG.

Primero, necesitamos cargar y convertir el documento de Word. En el código, usamos el método os.listdir() para leer todos los nombres de archivo en la ruta especificada y luego usamos el método split() para dividir el nombre de archivo en nombre de archivo y sufijo de archivo según ".". Si el sufijo del archivo es "doc", la aplicación de Word se abre con la biblioteca win32com y se crea una nueva aplicación de Word a partir del objeto de documento con el método Dispatch(). Luego, abra el archivo actual en la ruta correspondiente y conviértalo a un archivo de formato docx. Finalmente, cierre la aplicación Word y espere 3 segundos para que el sistema libere recursos.

for i in os.listdir(path):
    file_name,file_suffix = i.split(".") 
    if file_suffix == "doc":
        word = Dispatch('Word.Application')
        doc = word.Documents.Open(path+f"{
      
      i}")
        # 将 Word 文档转换为 docx 格式文件
        doc.SaveAs(path+f"{
      
      file_name}.docx",FileFormat=12)
        print(i,"转换完成")
        doc.Close()
        word.Quit()
        sleep(3)        

El método SaveAs() acepta dos parámetros, que son la ruta del archivo de salida y el formato del archivo de salida. Entre ellos, el parámetro FileFormat se usa para especificar el formato del archivo de salida, y 12 indica que la salida es un archivo de formato docx.

3. Cargue y convierta documentos pdf

Modifique el código de apelación para:

# 将 Word 文档转换为 docx 格式文件
        doc.SaveAs(path+f"{
      
      file_name}.docx",FileFormat=17)

El parámetro FileFormat se utiliza para especificar el formato del archivo de salida y 17 significa que la salida es un archivo en formato PDF.

4. Convierte archivos PDF a imágenes PNG

Después de completar la conversión del archivo PDF, podemos convertirlo a una imagen PNG. En el código, usamos la biblioteca PyMuPDF para abrir el archivo PDF en la ruta especificada y obtener el número total de páginas del archivo. Luego, use el método convert_from_path() en la biblioteca pdf2image para iterar a través de cada página en el PDF y convertirlo en una imagen PNG. Finalmente, guarde la imagen PNG en la ruta especificada y genere el progreso de la conversión.

for filename in os.listdir(path):
    if filename.endswith(".pdf"):
        # 获取当前 PDF 文件的总页数
        doc = fitz.open(path + filename)
        total_pages = doc.page_count
        doc.close()
        
        print(f"正在转换 {
      
      filename},共 {
      
      total_pages} 页...")
        for i, page in enumerate(convert_from_path(path + filename, grayscale=False), start=1):
            # 构造文件名
            output_filename = os.path.splitext(filename)[0] + "_" + str(i) + ".png"
            # 保存图片
            page.save(path_images + output_filename, "png")
            # 输出转换进度
            print(f"已完成第 {
      
      i}/{
      
      total_pages} 页的转换")

Cinco, código completo

# -*- coding: utf-8 -*-
"""
Created on Wed May 31 17:10:27 2023

@author: ypzhao
"""

import os
import fitz
from pdf2image import convert_from_path
from time import sleep
from win32com.client import Dispatch

# 定义PDF文件路径和输出区间路径
# 待转换pdf文件路径
path = "C:/Users/ypzhao/Desktop/pdf/"
# doc/docx转换后的路径
path_convert = "C:/Users/ypzhao/Desktop/pdf/"
# 转换后的图片路径
path_images = "C:/Users/ypzhao/Desktop/images/"
print("-----doc开始转换为docx-----")

for i in os.listdir(path):
    file_name,file_suffix = i.split(".") 
    if file_suffix == "doc":
        word = Dispatch('Word.Application')
        doc = word.Documents.Open(path+f"{
      
      i}")
        doc.SaveAs(path+f"{
      
      file_name}.docx",FileFormat=12)
        print(i,"转换完成")
        doc.Close()
        word.Quit()
        sleep(3)

print("-----开始转换为pdf-----")
for i in os.listdir(path):
    file_name,file_suffix = i.split(".") 
    if file_suffix == "docx":
        word = Dispatch('Word.Application')
        doc = word.Documents.Open(path+f"{
      
      i}")
        doc.SaveAs(path_convert+f"{
      
      file_name}.pdf",FileFormat=17)
        print(i,"...转换完成")
        doc.Close()
        word.Quit()
        sleep(3)
    else:
        pass


# 循环遍历PDF文件,并转换为图片
for filename in os.listdir(path):
    if filename.endswith(".pdf"):
        # 获取当前 PDF 文件的总页数
        doc = fitz.open(path + filename)
        total_pages = doc.page_count
        doc.close()
        
        print(f"正在转换 {
      
      filename},共 {
      
      total_pages} 页...")
        #按照原图输出pdf文件为word
        #若想黑白输出pdf为图片格式,修改grayscale=False为grayscale=True
        for i, page in enumerate(convert_from_path(path + filename, grayscale=False), start=1):
            # 构造文件名
            output_filename = os.path.splitext(filename)[0] + "_" + str(i) + ".png"
            # 保存图片
            page.save(path_images + output_filename, "png")
            # 输出转换进度
            print(f"已完成第 {
      
      i}/{
      
      total_pages} 页的转换")

print("-----已完成所有转换-----")

resultado de la operación

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_58857684/article/details/130974124
Recomendado
Clasificación