본문 바로가기
AI Developer/Python

[Python] 문서 자동화 (docx-template)

by 성 언 2023. 9. 13.

[Python] 문서 자동화 (docx-template)에 대해 학습 후 정리한 포스팅 입니다.

 

 

 

이번 포스팅에서는 [Python] 문서 자동화 (docx-template)에 대해 학습합니다.

 

 

I) docx-template 이란?

docx-template는 Python에서 사용할 수 있는 라이브러리로, Word 문서의 템플릿을 쉽게 채울 수 있게 해줍니다.

즉, 문서 자동화를 위한 라이브러리입니다. 아래 링크에서 자세한 document를 확인할 수 있습니다.

 

Welcome to python-docx-template’s documentation! — python-docx-template 0.9.x documentation

RichText When you use {{ }} tag in your template, it will be replaced by the string contained within var variable. BUT it will keep the current style. If you want to add dynamically changeable style, you have to use both : the {{r }} tag AND a RichText obj

docxtpl.readthedocs.io

 

 

II) docx-template 설치

pip install docxtpl

conda install docxtpl --channel conda-forge

위 명령어들을 통해 pip, conda 환경에서 설치할 수 있습니다.

 

 

III) docx-template 기본 사용법

1) 변수 넣기
{{ company_name }}이 있는 my_word_template.docx를 준비합니다.

from docxtpl import DocxTemplate

doc = DocxTemplate("my_word_template.docx")
context = {'company_name': "World company"}
doc.render(context)
doc.save("generated_doc.docx")

코드를 실행하면 {{ company_name }} 위치에 World company가 삽입되어 generated_doc.docx로 생성됩니다.


2) 템플릿 태그

  • 변수 치환: {{ variable_name }}
  • 조건문, 반복문 등의 Jinja2 태그: {% if ... %}, {% for ... %}
  • 문단, 테이블 행, 테이블 열, 런(글자 스타일 그룹)을 관리하기 위한 특별한 태그:
    • {%p jinja2_tag %}: 문단
    • {%tr jinja2_tag %}: 테이블 행
    • {%tc jinja2_tag %}: 테이블 열
    • {%r jinja2_tag %}: 런

3) RichText

 스타일을 동적으로 변경할 수 있는 텍스트 객체입니다.

from docxtpl import RichText
rt = RichText('Some text')

 

4) 이미지 삽입

from docxtpl import InlineImage
myimage = InlineImage(tpl, 'path_to_image.png', width=Mm(20))

 

 

5) 서브 문서

sd = tpl.new_subdoc('path_to_subdoc.docx')

 

 

IV) 포트폴리오 자동화 실습

자신의 포트폴리오를 자동으로 작성해주는 프로그램을 만들어봅시다.

 

1) portfolio_template.docx 생성

그전에 일단 반복될 수 있는 요소를 변수로 처리하여 portfolio_template.docx를 만들겠습니다.

변수안의 내용이 채워져 portfolio_result.docx의 문서로 저장되는 코드를 작성하겠습니다.

프로젝트의 개수에 따라 프로젝트 테이블의 행이 결정됩니다.

 

2) 코드 생성

from docxtpl import DocxTemplate, InlineImage
from docx.shared import Mm

tpl = DocxTemplate('portfolio_template.docx')
myimage = InlineImage(tpl, image_descriptor='cat.jpg', width=Mm(40), height=Mm(40))
context = {
    'name' : '홍길동',
    'introduce' : '안녕하세요. 저는 홍길동입니다.',
    'image' : myimage,
    'project_1': '프로젝트1: AI 프로젝트',
    'project_2': '프로젝트2: 앱 개발',
    'experience': '코딩 교육 봉사',
    'career': 'ㅇㅇ회사 2023-03-02~2023-09-05',
    'education': 'ㅇㅇ대학교 2023-03-02~2023-09-05',
    'certification': '정보처리기사',
    'awards': '교내 SW 경진대회 1등',
    'col_labels': ['역할', '기간', '느낀점', '기술'],
    'tbl_contents': [
        {'label': 'AI 프로젝트', 'cols': ['AI 모델링', '2023-09-01~09-05', '개발자의 기본 역량', 'Tensorflow']},
        {'label': '앱 개발', 'cols': ['백엔드 API 개발', '2023-08-01~09-05', '협업의 중요성', 'Node.js']},
        {'label': '웹 페이지 개발', 'cols': ['프론트엔드 개발', '2023-06-01~08-05', '유지보수의 중요성', 'react']},
    ],
}

tpl.render(context)
tpl.save('portfolio_result.docx')

 

 

3) 결과물 확인 (portfolio_result.docx)

자동으로 포트폴리오가 예쁘게 생성된 것을 확인할 수 있습니다.

보고서 템플릿, 코드, 결과를 첨부하며 이번 포스팅 마무리 하겠습니다.

portfolio_result.docx
0.05MB
portfolio_template.docx
0.02MB
test.py
0.00MB

 

 

 

<Summary>

- [Python] 문서 자동화 (docx-template)

- docx-template 이란?

- docx-template 설치

- docx-template 기본 사용법

- 포트폴리오 자동화 실습

 

 

 

 

*유의사항

- AI 산업기능요원이 공부하여 남긴 정리입니다.

 

댓글