見出し画像

Pythonライブラリ(PDF化):docx2pdf/pywin32

1.概要

 PDFファイルを作成するライブラリを紹介します。それぞれのライブラリは「pip install ライブラリ名」でインストールできます。

【PDF化ライブラリ】
●docx2pdf:★死ぬほど簡単。WORDのみ
●pywin32:Windowsユーザーだけ使用可能
●reportlab:結構コードが長くてめんどくさい・・・・・・
●xlwings:有料版なら使用可能

2.サンプルファイル準備

 PDF化するためのファイルを適当に作成しておきます。手動でもよいですが、参考までにコード作りました。

[In]
with open('note_PDF.txt', 'w') as f:
    f.write('Hello world!(Text)')

import openpyxl as pyxl

book = pyxl.Workbook()
sheet = book.active
sheet['A1'] = 'Hello World!(Excel)'
book.save('note_PDF.xlsx')

import docx
doc = docx.Document()
doc.add_heading('WORDタイトル')
doc.add_paragraph('Hello World!(Word)')
doc.save('note_PDF.docx')

 参考までにPDF化をするときのファイル選択は手動で記載もOKですが、サンプルコードでは下記を使用して一括で取得します。

[In]
import glob, os
from typing import List

#拡張子を指定してファイルを抽出
def globfiles(name, exts:List):
    output = []
    files = glob.glob(f'{name}*')
    for file in files:
        for ext in exts:
            if file.endswith(ext):
                output.append(file)
    return output

print(glob.glob('note_PDF.*'))
print(globfiles('note_PDF', ['.txt', '.xlsx', '.docx']))
[Out]
['note_PDF.docx', 'note_PDF.ipynb', 'note_PDF.txt', 'note_PDF.xlsx'] #globで直接
['note_PDF.docx', 'note_PDF.txt', 'note_PDF.xlsx'] #関数使用

3.PDF化ライブラリ

3-1.WordのPDF化:docx2pdf

 文字通りWORDファイル(docx)をPDF化するライブラリです。

 処理は2行でPDF化できます。

[In]
from docx2pdf import convert

convert('note_PDF.docx')

 なお|別の拡張子⦅txt, xlsx⦆をPDF化するとエラーが生じるためWORDのみとなります。

3-2.ExcelのPDF化:pywin32

  pywin32はもともとPDF化ライブラリではなくWindowsの機能を使用するライブラリです。

 Windowsの機能をpywin32で操作してExcelをPDF化します。

[In]
import win32com.client as win32
import os 

#win32に渡すパスは絶対パスで指定
files = globfiles('note_PDF', ['.txt', '.xlsx', '.docx']) #output->['note_PDF.txt', 'note_PDF.xlsx', 'note_PDF.docx']
files_abs = [os.path.abspath(file) for file in files]


app = win32.Dispatch("Excel.Application") #Excelを起動
app.Visible = True
app.DisplayAlerts = False
path_excel = files_abs[2] #Excelの絶対パスを指定 output->'c:\\Users\\KIYO\\Desktop\\note\\02_pythonライブラリ\\2022年01月_note_PDF\\note_PDF.xlsx''c:\\Users\\KIYO\\Desktop\\note\\02_pythonライブラリ\\2022年01月_note_PDF\\note_PDF.xlsx'
path_pdf = path_excel.replace('.xlsx', '.pdf') #上のパスを拡張子.pdfに変更

book = app.Workbooks.Open(path_excel) #Excelファイルを開く
book.ExportAsFixedFormat(0, path_pdf) #PDFに変換※引数0はPDFファイルに変換を指定

app.Quit() #Excelを終了

あとがき

 txtファイルのPDF化してないけど今のところ自分に需要がないため飛ばしました。使う場面が出たら更新します。
 コロナになって在宅が増えてから電子押印の自動化を試みたけどスキル的な難しさだけでなくISOでの社内調整もめんどくさかったのは今でも思い出すな・・・・

いいなと思ったら応援しよう!