Edited at

Wordを〇す


はじめに


Word提出


それはこの世で最も人を不幸にする.


やりたいこと

漢はLaTeX.Wordなど使わない.

しかし単位を落とすわけにもいかない.

せやっ!PDFを埋め込めばええんや!


やったこと

python-docxpdf2imageを使ってPDFを埋め込みます.

コードは下記においてあります.pipenv使えます.

https://github.com/S-aiueo32/kill-docx

(追記) 若干コード修正したのでmasterにあるコードとは別の違う感じになってます.READMEを参照されたし.


コード

置いてあるコードと順番とかは異なりますが,ざっくりと説明します.

まずは使うものだけインポートします.

from docx import Document

from docx.shared import Mm # 寸法
from pdf2image import convert_from_path

Documentインスタンス生成とマージン&用紙サイズの指定.今回はA4を想定しています.

# Documentのインスタンス

doc = Document()

# セクションごとにマージン&用紙サイズの指定
# 今回は空のDocumentなので1つしかセクションは入ってない
sections = doc.sections
for section in sections:
section.top_margin = 0
section.bottom_margin = 0
section.left_margin = 0
section.right_margin = 0
section.page_height = Mm(297)
section.page_width = Mm(210)

Documentにパラグラフを追加して,パラグラフの操作用インスタンスを生成.

p = doc.add_paragraph() 

r = p.add_run()

PDFファイルをビットマップ画像に変換して,出力ファイルリストを返却するヘルパーを定義します.

def save_pages(filename):

pages = convert_from_path(str(src_dir / filename)) # PILイメージのリストを返してくる
out_files = []
for i, page in enumerate(pages):
out_file = src_dir / f'{filename.replace(".pdf", "")}_{i:0>4}.png'
out_files.append(out_file)
page.save(out_file) # 保存
return out_files

ページの画像化と画像の追加.

image_paths = save_pages(args.filename)

for image_path in image_paths:
r.add_picture(str(image_path), height=Mm(297), width=Mm(210))

ファイルの保存.終わり.

doc.save('./output.docx')


結果

こうなる.


まとめ

良い子はマネしないでね.


Special Thanks

🐓

Zongker, Doug. "Chicken chicken chicken: Chicken chicken." Annals of Improbable Research 12 , no. 5 (2006): 16--21.