Help us understand the problem. What is going on with this article?

Wordを〇す

More than 1 year has passed since last update.

はじめに

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.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away