File size: 4,310 Bytes
6cd90ae 26d8ca3 6cd90ae 6da718d 6cd90ae 6da718d 6cd90ae 55efc3b 6cd90ae 55efc3b 26d8ca3 55efc3b 26d8ca3 55efc3b 6cd90ae 55efc3b 6cd90ae 55efc3b 26d8ca3 55efc3b 26d8ca3 55efc3b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
import gradio as gr
import json
import pandas as pd
from reportlab.lib import colors
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.platypus import Table, TableStyle, Image, SimpleDocTemplate, PageBreak
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
with open('pokemon.json', 'r') as f:
pokemons = json.load(f)
pokemons_types = ["๋ชจ๋ ํ์
"] + sorted(set([t for poke in pokemons for t in poke['types']]))
GEN_RANGE = {
"๋ชจ๋ ์ธ๋": [1, 1017],
"1์ธ๋": [1, 151],
"2์ธ๋": [152, 251],
"3์ธ๋": [252, 386],
"4์ธ๋": [387, 493],
"5์ธ๋": [494, 649],
"6์ธ๋": [650, 721],
"7์ธ๋": [722, 809],
"8์ธ๋": [810, 905],
"9์ธ๋": [906, 1017]
}
with gr.Blocks(title="๋์น๋ ํฌ์ผ๋ชฌ ๋๊ฐ ์์ฑ๊ธฐ ๐") as block:
with gr.Row():
gr.Markdown("# ๋์น๋ ํฌ์ผ๋ชฌ ๋๊ฐ ์์ฑ๊ธฐ ๐")
with gr.Row():
generation = gr.Dropdown(
[f"{k}์ธ๋" for k in range(1, 10)] + ["๋ชจ๋ ์ธ๋"], value="1์ธ๋", label="ํฌ์ผ๋ชฌ ์ธ๋", info="์ํ๋ ํฌ์ผ๋ชฌ ์ธ๋๋ฅผ ์ ํํ์ธ์."
)
poke_types = gr.Dropdown(
pokemons_types, value="๋ชจ๋ ํ์
", label="ํฌ์ผ๋ชฌ ํ์
", info="์ํ๋ ํฌ์ผ๋ชฌ ํ์
์ ์ ํํ์ธ์."
)
button = gr.Button(label="๐ฉ ๋๊ฐ ์์ฑ")
with gr.Row():
with gr.Column():
download = gr.File(label="ํ๋ ๊ธ์จ๋ฅผ ๋๋ฌ์ ๋ค์ด๋ก๋ ๋ฐ์ผ์ธ์.")
df_view = gr.DataFrame(label="ํฌ์ผ๋ชฌ ๋ฆฌ์คํธ", wrap=True, row_count=10)
with gr.Column():
gallery = gr.Gallery(columns=4, label="ํฌ์ผ๋ชฌ ๊ฐค๋ฌ๋ฆฌ")
report = gr.Markdown("## ํ์
๋ณ ํฌ์ผ๋ชฌ ๋ถ์")
def write_pdf(gen, poke_type):
filename = f'ํฌ์ผ๋ชฌ{gen}_{poke_type}.pdf'
# PDF ๋ฌธ์๋ฅผ ์์ฑํฉ๋๋ค.
pdfmetrics.registerFont(TTFont("๋๋๊ณ ๋", "NanumGothic.ttf"))
doc = SimpleDocTemplate(filename, pagesize=A4)
# ํ
์ด๋ธ ์คํ์ผ์ ์ ์ํฉ๋๋ค.
style = TableStyle([
('TEXTCOLOR', (0, 1), (-1, -1), colors.gray),
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('FONTNAME', (0, 0), (-1, -1), '๋๋๊ณ ๋'),
('SIZE', (0, 0), (-1, -1), 50),
('BACKGROUND', (0, 1), (-1, 1), colors.white),
('GRID', (0, 0), (-1, -1), 1, colors.black),
('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
('LEADING', (0, 0), (-1, -1), 14), # ๋ผ์ธ ๊ฐ๊ฒฉ ์กฐ์
('BOTTOMPADDING', (0, 0), (-1, -1), 60),
])
images = []
story = []
data_dict = []
start, end = GEN_RANGE[gen]
for k in range(start, end+1):
name = pokemons[k-1]['name']
number = pokemons[k-1]['number']
types = pokemons[k-1]['types']
image_path = pokemons[k-1]['image_path']
if poke_type == "๋ชจ๋ ํ์
":
condition = True
else:
condition = poke_type in types
if condition:
data_dict.append(
dict(์ด๋ฆ=name, ๋ฒํธ=number, ํ์
='+'.join(types))
)
images.append((image_path, f"{number} {name}"))
# PDF์ ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด๋ฏธ์ง ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ์ธ์.
image = Image(image_path, width=13.5*cm, height=13.5*cm)
# ํ
์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ์ค๋นํฉ๋๋ค.
data = [
[number],
[image], # 2๋ฒ์งธ ํ์ ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐํ ๊ฒ์
๋๋ค.
['+'.join(types)],
[name],
]
# ํ
์ด๋ธ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
table = Table(data)
table.setStyle(style)
story.append(table)
doc.build(story)
df = pd.DataFrame(data_dict)
return df[['๋ฒํธ', '์ด๋ฆ', 'ํ์
']], filename, images
button.click(write_pdf, [generation, poke_types], [df_view, download, gallery])
block.queue(concurrency_count=3)
block.launch() |