본문 바로가기
업무관련

사진대지 파이썬 코드만들기

by 토목기술자장씨 2024. 8. 27.
import os from PIL import Image from reportlab.lib import colors from reportlab.lib.pagesizes import A4 from reportlab.lib.units import mm from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Image as ReportLabImage, Paragraph, Spacer from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont # 폰트 등록 (한글 지원을 위해 나눔고딕 사용) pdfmetrics.registerFont(TTFont('NanumGothic', 'NanumGothic.ttf')) def create_photo_layout(input_folder_path, output_pdf_path): # A4 크기 정의 page_width, page_height = A4 # 스타일 설정 styles = getSampleStyleSheet() title_style = ParagraphStyle('TitleStyle', parent=styles['Heading1'], fontName='NanumGothic', fontSize=24, alignment=1, bold=True) normal_style = ParagraphStyle('NormalStyle', parent=styles['Normal'], fontName='NanumGothic', fontSize=12, alignment=1, leading=14) # leading 추가 # PDF 문서 생성 doc = SimpleDocTemplate(output_pdf_path, pagesize=A4, topMargin=5*mm, bottomMargin=5*mm, leftMargin=10*mm, rightMargin=10*mm) # 내용 리스트 생성 content = [] # 입력 폴더에서 이미지 파일 목록 가져오기 image_files = [f for f in os.listdir(input_folder_path) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp'))] # 이미지 크기 설정 (표 안에 맞도록 조정) img_width = 170 * mm img_height = 110 * mm for i, image_file in enumerate(image_files): if i % 2 == 0: # 새 페이지 시작 if i > 0: content.append(Paragraph("
", normal_style)) # 제목 추가 content.append(Paragraph("사 진 대 지", title_style)) # 제목과 표 사이에 간격 추가 (5mm) content.append(Spacer(1, 5 * mm)) img_path = os.path.join(input_folder_path, image_file) img = Image.open(img_path) img.thumbnail((img_width, img_height)) # 이미지와 정보를 포함하는 표 생성 img_table = [ [ReportLabImage(img_path, width=img.width, height=img.height)], [Paragraph('위치', normal_style), Paragraph('위치명적기', normal_style), Paragraph('일시', normal_style), Paragraph('2024.8.', normal_style)], [Paragraph('내용', normal_style), Paragraph('내용을 적기', normal_style), '', ''] ] table = Table(img_table, colWidths=[42.5*mm, 42.5*mm, 42.5*mm, 42.5*mm]) table.setStyle(TableStyle([ ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('GRID', (0, 0), (-1, -1), 0.5, colors.black), ('BOX', (0, 0), (-1, -1), 1.5, colors.black), ('SPAN', (0, 0), (-1, 0)), ('SPAN', (1, 2), (3, 2)), ('FONTNAME', (0, 0), (-1, -1), 'NanumGothic'), ('TOPPADDING', (0, 1), (-1, -1), 3), # 상단 패딩 추가 ('BOTTOMPADDING', (0, 1), (-1, -1), 3), # 하단 패딩 추가 ])) content.append(table) # PDF 생성 doc.build(content) print(f"PDF가 성공적으로 생성되었습니다: {output_pdf_path}") if __name__ == "__main__": input_folder = r"C:\Users\dbjsj\Desktop\폴더명 적기" output_pdf = os.path.join(input_folder, "사진대지.pdf") create_photo_layout(input_folder, output_pdf)

'업무관련' 카테고리의 다른 글

연도변 조사란?  (0) 2024.09.23