Python は PDF をバッチで画像に変換します | PDF を jpg/png に変換します | Word を PDF にバッチで変換します | Python は Word をバッチで画像に変換します

この記事では、Python スクリプトを使用してこれを行う方法を紹介します。このスクリプトは、PyMuPDF、pdf2image、win32com ライブラリに基づいて実装されており、Word ドキュメントを PDF ファイルにすばやく変換したり、PDF ファイルを PNG 画像に変換したりするのに役立ちます。

1. 必要なライブラリとソフトウェアをインストールします

このスクリプトの使用を開始する前に、必要な Python モジュールと関連ソフトウェアをインストールする必要があります。具体的には、PyMuPDF、pdf2image、win32com の 3 つのライブラリと、Microsoft Word ソフトウェアおよび Poppler プログラムをインストールする必要があります。Python モジュールは次のコマンドでインストールできます。

pip install PyMuPDF 
pip install pdf2image 
pip install pypiwin32

PyMuPDF ライブラリは PDF ファイルを画像に変換するために使用され、pdf2image ライブラリは PDF ファイルを PNG 画像に変換するために使用され、pypiwin32 ライブラリは Microsoft Word ソフトウェアと対話してドキュメントを変換するために使用されます。さらに、Microsoft Word ソフトウェアをダウンロードしてインストールし、Poppler プログラムのパスをシステム環境変数に追加する必要があります。

2. Word 文書をロードして変換する

必要なライブラリとソフトウェアをインストールしたら、スクリプトを使用できるようになります。このスクリプトは主に、Word 文書から docx ファイルへの変換、docx ファイルから PDF ファイルへの変換、PDF ファイルから PNG 画像への変換の 3 つの部分に分かれています。

まず、Word 文書をロードして変換する必要があります。コードでは、os.listdir() メソッドを使用して、指定されたパスの下にあるすべてのファイル名を読み取り、次に、split() メソッドを使用して、ファイル名を「.」に従ってファイル名とファイル拡張子に分割します。ファイルのサフィックスが「doc」の場合、Win32com ライブラリを使用して Word アプリケーションが開かれ、Dispatch() メソッドを使用してドキュメント オブジェクトから新しい Word アプリケーションが作成されます。次に、対応するパスにある現在のファイルを開き、docx 形式のファイルに変換します。最後に、Word アプリケーションを閉じ、システムがリソースを解放するまで 3 秒待ちます。

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)        

SaveAs() メソッドは、出力ファイル パスと出力ファイル形式の 2 つのパラメータを受け入れます。このうち、FileFormat パラメータは出力ファイルの形式を指定するために使用され、12 は出力が docx 形式のファイルであることを示します

3. PDF ドキュメントをロードして変換する

アピール コードを次のように変更します。

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

FileFormat パラメータは出力ファイルの形式を指定するために使用され、17 は出力が PDF 形式ファイルであることを意味します。

4. PDF ファイルを PNG 画像に変換する

PDF ファイルの変換が完了したら、PNG 画像に変換できます。コードでは、PyMuPDF ライブラリを使用して、指定されたパスにある PDF ファイルを開き、ファイルの総ページ数を取得します。次に、pdf2image ライブラリの Convert_from_path() メソッドを使用して、PDF の各ページを反復処理し、PNG 画像に変換します。最後に、PNG 画像を指定したパスに保存し、変換の進行状況を出力します。

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} 页的转换")

5、完全なコード

# -*- 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("-----已完成所有转换-----")

演算結果

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/m0_58857684/article/details/130974124