この記事はword、excel、powerpointなどMicrosoft Officeで書いた書類のファイルから画像に変換する方法についてまとめます。
wordから画像への変換
wordから画像へ変換する方法をgoogleで検索してみたら、aspose
というモジュールを使うという方法を見つけました。
でもこれは有料なので、あまりおすすめできません。
他の方法なら結局wordから直接画像ファイルに変換する方法は見つからないので、まずwordからpdfに変換して、その後pdfから画像に変換することになります。
wordからpdfに変換するにはdocx2pdf
というモジュールは便利です。
そしてpdfから画像に変換するにはpdf2image
というモジュールは便利です。
どれもモジュールの名前はそのままですね。
インストールはpipで簡単にできます。
pip install docx2pdf
pip install pdf2image
docx2pdf
の使い方はすごく簡単です。特に説明しなくてもコードを見ればすぐわかるくらい。
pdf2image
の使い方について、この記事を参考に
pdf2image
ではjpg、png、gif、bmp、tiffなど色んな画像の種類ができるが、ここではpngにします。
docx2pdf
とpdf2image
を使ってwordを画像に変換するコードはこのように書きます。
import docx2pdf
import pdf2image
import os
word_file = r'hoge.docx' # 入力wordファイルの名前
img_path = r'fugaimage' # 出力の画像を置くフォルダ
dpi = 72 # 解像度(指定しなければ200になってたなり大きい)
# まずはpdfにする
pdf_file = word_file+'.pdf' # pdfファイルの名前(すぐ削除するからどうでもいいけど)
docx2pdf.convert(word_file,pdf_file)
# フォルダが既存でなければまずは作成
if(not os.path.exists(img_path)):
os.mkdir(img_path)
# pdfから画像を取得する
lis_img = pdf2image.convert_from_path(pdf_file,dpi)
for i,img in enumerate(lis_img,1): # 一枚ずつ保存する
img.save(os.path.join(img_path,str(i)+'.png'))
os.remove(pdf_file) # すべて終わった後pdfを削除する
こうやって指定したフォルダにwordの中の各ページがそれぞれ画像に出力されます。
.pngの代わりに.jpgや.gifなどが欲しい場合、拡張子を変えてもいいです。
変換したいwordが1ページしかない場合なら、簡単にこう書けばいいです。
word_file = r'hoge.docx'
img_file = r'fugaimage.png'
dpi = 72
pdf_file = word_file+'.pdf'
docx2pdf.convert(word_file,pdf_file)
pdf2image.convert_from_path(pdf_file,dpi)[0].save(img_file)
os.remove(pdf_file)
excelから画像への変換
wordと同じように、簡単で直接画像ファイルに変換する方法はないようです。
ちなみにこれもaspose
でできるようですが、やはり有料なのでこの方法はひとまず不採用にします。
まずexcelをpdfに変換してからpdfから画像に変換するということになります。
excelからpdfに変換できるモジュールとしてcomtypes
やwin32com
があります。この2つはとても似ていますが、win32com
がよく知られているようなので、ここではwin32com
を使うという方法で行きます。
win32com
でexcelからpdfに変換する方法についてはこの記事を参考に
その他に、win32com
で色々excelを扱う方法についてはこの記事を参考に
ちなみに、実はwin32com
がwordをpdfに変換することもできます。この記事を参考に
でもwordの場合はやっぱりdocx2pdf
を使う方が便利なので、ここでwin32com
はexcelにだけ適用します。
win32com
とpdf2image
を使ってexcelをpngに変換するコードはこうなります。
import win32com.client
import pdf2image
import os
excel_file = r'hoge.xlsx'
img_path = r'fugaimage'
dpi = 72
pdf_file = excel_file+'.pdf'
app = win32com.client.Dispatch('Excel.Application')
wb = app.Workbooks.Open(excel_file)
wb.ExportAsFixedFormat(0,pdf_file)
app.Quit()
if(not os.path.exists(img_path)):
os.mkdir(img_path)
lis_img = pdf2image.convert_from_path(pdf_file,dpi)
for i,img in enumerate(lis_img,1):
img.save(os.path.join(img_path,str(i)+'.png'))
os.remove(pdf_file)
ほとんどwordの場合とは同じなので、詳しい説明は省略します。
powerpointから画像への変換
次はppt(powerpoint)です。実はwordとexcelと違って、pptは簡単に直接画像に変換できる方法があります。
それができるモジュールはwin32com
とcomtypes
です。excelと同じようにこれを使ってpdfに変換することもできますが、pptの場合はpdfだけでなく、各種の画像ファイルに変換することもできます。
この記事も参考に
同じ方法はwordとexcelに使うことはできないのは残念です。
win32com
を使ってpptからpngに変換するコードはこんな感じです。
import win32com.client
ppt_file = r'hoge.pptx' # pptファイル
img_path = r'fugaimage' # 画像を入れるフォルダ
app = win32com.client.Dispatch('Powerpoint.Application')
ppt = app.Presentations.Open(ppt_file)
ppt.SaveAs(img_path,18)
ppt.Close()
app.Quit()
ここで.SaveAs()
の中の18
という数字はpngに変換するという意味です。その他にもいっぱいあります。例えば
- 16: gif
- 17: jpg
- 18: png
- 19: bmp
- 21: tif
- 32: pdf
こうやってwin32com
を使ったらpowerpointファイルを画像にもpdfにも簡単に変換できて便利です。