Pythonライブラリ(PDF化):docx2pdf/pywin32
1.概要
PDFファイルを作成するライブラリを紹介します。それぞれのライブラリは「pip install ライブラリ名」でインストールできます。
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での社内調整もめんどくさかったのは今でも思い出すな・・・・