はじめに
Word提出
それはこの世で最も人を不幸にする.
やりたいこと
漢はLaTeX.Wordなど使わない.
しかし単位を落とすわけにもいかない.
せやっ!PDFを埋め込めばええんや!
やったこと
python-docx
とpdf2image
を使って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.