본문 바로가기
코딩 수업/포트폴리오

[업무자동화][파이썬] 영어 문장 암기 시트 만드는 프로그램 - 영어 문장을 엑셀파일로 저장하면 자동으로 한국어 번역과 함께 암기표를 만들어 pdf로 저장해주는 프로그램 (Python Program to Create an English Sentence Memorization Sheet)

by Jade S. 2025. 3. 6.
728x90
반응형

개발 목적:
업무상 반복적인 작업으로 인한 시간 낭비를 줄이기 위함.

 

개발 후기:
Google Translate API를 사용하기 위해 API 키를 받고 환경변수 설정을 하는 부분이 다소 번거로웠음.

하지만 이 프로그램을 진작에 만들었어야 했다는 생각이 들며, 그만큼 매우 유용하고 편리함. 앞으로 많은 시간 절약이 가능할 것으로 예상됨.

 

import os
from google.cloud import translate_v2 as translate
from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
import pandas as pd
from datetime import datetime

# Google Translate API 클라이언트 설정
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = r"json 경로"
translate_client = translate.Client()

# 영어 문장을 한국어로 번역하는 함수
def translate_text(text, target='ko'):
    result = translate_client.translate(text, target_language=target)
    return result['translatedText']

# 엑셀 파일 읽기 함수
def read_excel(file_path):
    return pd.read_excel(file_path, header=None)  # 첫 번째 행을 헤더 없이 읽기

# PDF 생성 함수
def create_pdf(data, output_pdf_path):
    pdf = SimpleDocTemplate(output_pdf_path, pagesize=letter,
                            leftMargin=5, rightMargin=10,
                            topMargin=10, bottomMargin=5)
   
    page_width = letter[0] - 60  # 페이지 폭에서 여백 제외
    col_width = page_width / 2

    # NanumGothic 폰트 등록
    font_path = r"폰트 경로"
    pdfmetrics.registerFont(TTFont('NanumGothic', font_path))
   
    # Paragraph 스타일 설정
    stylesheet = getSampleStyleSheet()
    para_style = ParagraphStyle(
        'Custom',
        parent=stylesheet['BodyText'],
        fontName='NanumGothic',
        fontSize=12,
        leading=15,
    )
   
    header_style = ParagraphStyle(
        'Header',
        parent=stylesheet['Heading1'],
        fontName='NanumGothic',
        fontSize=14,
        alignment=1,
        spaceAfter=0,
    )

    # 표 데이터 준비
    table_data = [[Paragraph("한국어 번역", header_style), Paragraph("영어 문장", header_style)]]
   
    for index, row in data.iterrows():
        english_text = row.iloc[0]
       
        if pd.isna(english_text) or english_text.strip() == "":
            continue
       
        korean_translation = translate_text(english_text)
       
        para_korean = Paragraph(korean_translation, para_style)
        para_english = Paragraph(english_text, para_style)
        table_data.append([para_korean, para_english])
   
    # 테이블 생성
    table = Table(table_data, colWidths=[col_width, col_width])
   
    # 테이블 스타일 적용
    style = TableStyle([
        ('FONTNAME', (0, 0), (-1, -1), 'NanumGothic'),
        ('VALIGN', (0, 0), (-1, -1), 'TOP'),
        ('TEXTCOLOR', (0, 0), (-1, 0), colors.white),
        ('BACKGROUND', (0, 0), (-1, 0), colors.lightpink),
        ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
        ('FONTSIZE', (0, 0), (-1, -1), 13),
        ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
        ('BACKGROUND', (0, 1), (-1, -1), colors.white),
        ('GRID', (0, 0), (-1, -1), 0.5, colors.gray),
        ('TOPPADDING', (0, 0), (-1, -1), 4),
        ('BOTTOMPADDING', (0, 0), (-1, -1), 4),
    ])
    table.setStyle(style)
   
    pdf.build([table])

# 오늘 날짜 가져오기 (형식: YYYY-MM-DD)
today_date = datetime.today().strftime('%Y-%m-%d')

# 파일 경로 설정 (날짜 포함)
excel_file_path = r"엑셀 파일 경로"
output_pdf_path = rf"결과물 저장 경로\translated_output_{today_date}.pdf"

df = read_excel(excel_file_path)
create_pdf(df, output_pdf_path)

print(f"PDF 파일이 {output_pdf_path}로 저장되었습니다.")

 

결과물:

728x90
반응형