1. 자동화 보고서
보고서 자동화의 세계에 오신 것을 환영합니다! 보고서를 만드는 것이 버튼 하나로 끝날 수 있길 꿈꿔본 적이 있다면, 이제 제대로 찾아오셨습니다. 오늘은 템플릿을 사용하여 자동화된 보고서를 만드는 법을 배워볼 겁니다. 이 과정을 최적화하여 반복작업을 피하고 여러분의 보고서를 가장 자신 있는 Python 스크립트처럼 멋지게 만들어봅시다.
왜 템플릿인가요?
단조롭고 지루한 작업, 특히 보고서 작업은 누구도 좋아하지 않죠. 만약 모든 보고서가 데이터를 받아 사전에 정해진 형식으로 자동 생성된다면 어떨까요? 템플릿을 사용하면 기본 구조를 만들고, 이를 새로운 데이터로 채워 넣을 수 있습니다. 이는 시간과 정신적 스트레스를 줄이고, 보고서를 안정적이고 깔끔하게 만듭니다.
템플릿 사용의 장점:
- 속도와 효율성: 준비된 템플릿은 보고서를 이전보다 더 빨리 작성할 수 있게 합니다.
- 통일된 스타일: 모든 보고서는 동일한 스타일을 가지며, 이는 보기에도 편하고 전문적으로 보입니다.
- 오류 감소: 이미 확인된 구조는 형식 오류를 최소화합니다.
- 수정의 용이성: 템플릿에서의 변경 사항이 모든 보고서에 적용되며 관리가 쉬워집니다.
2. 간단한 보고서 템플릿 생성
ReportLab에서 PDF 템플릿의 기본 요소
ReportLab에서 보고서 템플릿을 생성하려면 다음과 같은 기본 구성 요소를 사용할 수 있습니다:
- 텍스트와 제목: 텍스트 요소를 사용하여 제목, 부제목 및 본문 텍스트를 만드세요.
- 테이블: 데이터를 표 형식으로 나타낼 때 사용됩니다.
- 그래픽 요소: 라인, 사각형, 원 및 기타 도형으로 시각적으로 꾸밀 수 있습니다.
- 이미지: 로고 및 기타 이미지를 추가하여 전문적인 디자인을 제공합니다.
SimpleDocTemplate를 사용하여 템플릿 만들기
ReportLab의 SimpleDocTemplate
클래스를 사용하면 사전에 정의된 구조를 가진 PDF를 쉽게 생성할 수 있습니다. 이 클래스는 elements
리스트를 통해 텍스트, 테이블 및 기타 요소를 추가하여 구조화된 문서를 만드는 것을 지원합니다.
텍스트와 테이블을 포함한 PDF 보고서 템플릿 생성
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle
from reportlab.lib import colors
# 보고서 템플릿 생성 함수
def create_pdf_template(filename="report_template.pdf"):
doc = SimpleDocTemplate(filename, pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# 보고서 제목
title_style = ParagraphStyle(
"TitleStyle",
parent=styles["Title"],
fontSize=20,
textColor=colors.darkblue,
alignment=1,
spaceAfter=20,
)
title = Paragraph("판매 보고서 템플릿", title_style)
elements.append(title)
# 부제목
subtitle_style = ParagraphStyle(
"SubtitleStyle",
parent=styles["Heading2"],
fontSize=14,
textColor=colors.gray,
alignment=1,
spaceAfter=10,
)
subtitle = Paragraph("분기별 보고서", subtitle_style)
elements.append(subtitle)
# 본문 텍스트
intro_text = """
이 보고서 템플릿은 지역 및 제품 카테고리에 대한 판매 데이터를 표시하도록 설계되었습니다.
데이터는 자동으로 업데이트되며, 이를 통해 정기 보고서에 활용할 수 있습니다.
"""
elements.append(Paragraph(intro_text, styles["BodyText"]))
elements.append(Spacer(1, 20))
# 데이터용 테이블
table_data = [["카테고리", "지역", "판매"]]
# 테이블 샘플 데이터 (동적 데이터로 대체 가능)
sample_data = [["제품 A", "북쪽", "1200"], ["제품 B", "남쪽", "1300"], ["제품 C", "서쪽", "1100"]]
table_data.extend(sample_data)
# 테이블 스타일
table_style = TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.grey),
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
('BOTTOMPADDING', (0, 0), (-1, 0), 12),
('BACKGROUND', (0, 1), (-1, -1), colors.beige),
('GRID', (0, 0), (-1, -1), 1, colors.black),
])
table = Table(table_data)
table.setStyle(table_style)
elements.append(table)
# PDF 저장
doc.build(elements)
print(f"보고서 템플릿이 {filename} 이름으로 성공적으로 저장되었습니다.")
# 보고서 템플릿 생성
create_pdf_template()
코드 설명
- 제목과 부제목:
TitleStyle
및SubtitleStyle
스타일을 사용하여 제목과 부제목을 보기 쉽고 시각적으로 돋보이게 만듭니다. - 본문 텍스트: 보고서는 자동화를 위해 설계된 템플릿임을 설명하는 텍스트를 포함합니다.
- 테이블: 테이블은 데이터를 채우기 위해 사용됩니다. (
sample_data
)는 생성 시 실제 값으로 대체될 수 있습니다. - 저장:
SimpleDocTemplate
은 PDF를report_template.pdf
로 저장합니다.
3. 템플릿에 데이터 채우기
템플릿에 데이터를 자동으로 채우기
이제 기본 템플릿이 있으니 데이터를 받아 테이블을 자동으로 채우는 함수를 만들 수 있습니다. 이는 데이터가 데이터베이스, API 또는 파일에서 나오는 보고서를 작성할 때 유용합니다.
템플릿을 자동으로 채우는 함수
def fill_pdf_template(data, filename="filled_report.pdf"):
doc = SimpleDocTemplate(filename, pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# 보고서 제목
title = Paragraph("판매 보고서", styles["Title"])
elements.append(title)
# 부제목
subtitle = Paragraph("지정된 기간의 판매 데이터", styles["Heading2"])
elements.append(subtitle)
elements.append(Spacer(1, 20))
# 데이터로 테이블 채우기
table_data = [["카테고리", "지역", "판매"]] + data
table = Table(table_data)
# 테이블 스타일 적용
table.setStyle(TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.grey),
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
('BOTTOMPADDING', (0, 0), (-1, 0), 12),
('BACKGROUND', (0, 1), (-1, -1), colors.beige),
('GRID', (0, 0), (-1, -1), 1, colors.black),
]))
elements.append(table)
# PDF 저장
doc.build(elements)
print(f"보고서가 {filename} 이름으로 성공적으로 저장되었습니다.")
# 템플릿 채울 데이터 예시
data = [
["제품 A", "북쪽", "1200"],
["제품 B", "남쪽", "1300"],
["제품 C", "서쪽", "1100"],
]
# 템플릿에 데이터 채우기
fill_pdf_template(data)
GO TO FULL VERSION