LoginSignup
160
85

More than 3 years have passed since last update.

Wordを〇す

Last updated at Posted at 2019-07-28

はじめに

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')

結果

こうなる.
chicken.JPG

まとめ

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

Special Thanks

🐓

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
160
85