본문 바로가기
코딩 수업/파이썬 (업무자동화)

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

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

>>맨날 만들기 귀찮아서 프로그램 만듦

>>근데 Google Translate 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

# 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):
    # 여백을 30pt씩 지정 (왼쪽, 오른쪽, 상단, 하단)
    pdf = SimpleDocTemplate(output_pdf_path, pagesize=letter,
                            leftMargin=30, rightMargin=30,
                            topMargin=30, bottomMargin=30)
   
    # 페이지 폭에서 좌우 여백(60pt)을 제외한 값
    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=13,
        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)
       
        # 긴 문장은 Paragraph로 감싸서 자동 줄바꿈 적용
        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])

# 엑셀 및 출력 PDF 경로 설정
excel_file_path = r"엑셀파일경로"
output_pdf_path = r"출력파일경로"

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

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

>> 결과물

왼쪽 보고 말해보고 오른쪽 보고 확인하기

완벽하게 번역되면 그 문장은 체득 된 것

>> 결론

은근 재밌네.

다시 시작 ..할..까?

728x90
반응형