1. PDF์ ํ ์คํธ์ ์ ๋ชฉ ์ถ๊ฐํ๊ธฐ ๊ธฐ์ด
ReportLab์์๋ canvas
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ํ
์คํธ๋ฅผ ์ถ๊ฐํ๋๋ฐ, ์ด๋ฅผ ํตํด ๊ธ๊ผด, ์์, ํฌ๊ธฐ์ ํ
์คํธ ์์น๋ฅผ ์ค์ ํ ์ ์์ด.
์ ๋ชฉ๊ณผ ํ ์คํธ๊ฐ ์๋ ๊ฐ๋จํ PDF ๋ง๋ค๊ธฐ
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
# ์๋ก์ด PDF ํ์ผ ์์ฑ
pdf_file = canvas.Canvas("styled_text.pdf", pagesize=A4)
width, height = A4
# ์ ๋ชฉ ์ถ๊ฐ
pdf_file.setFont("Helvetica-Bold", 20)
pdf_file.drawString(100, height - 100, "ํ๋งค ๋ณด๊ณ ์")
# ๋ณธ๋ฌธ ํ
์คํธ ์ถ๊ฐ
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "์ด ๋ฌธ์๋ ์ง๋ ๋ถ๊ธฐ์ ํ๋งค ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.")
# PDF ์ ์ฅ
pdf_file.save()
์ด ์ฝ๋๋ ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ ํ
์คํธ๊ฐ ํฌํจ๋ PDF ํ์ผ์ ์์ฑํด. ์ฐ๋ฆฌ๋ setFont()
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ํ
์คํธ์ ๊ธ๊ผด๊ณผ ํฌ๊ธฐ๋ฅผ ์ค์ ํด.
2. ํ ์คํธ ์คํ์ผ๋ง๊ณผ ํฌ๋งทํ
ReportLab์ ์ฌ์ฉํ๋ฉด ํ ์คํธ์ ์์, ๊ธ๊ผด, ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํด์ ์คํ์ผ ์๋ ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ์ ๋ง๋ค ์ ์์ด. ์ด๋ ๊ฒ ํ๋ฉด ๋ฌธ์๊ฐ ๋ ๊ฐ๋ ์ฑ์ด ์ข์์ ธ.
ํ ์คํธ ๊ธ๊ผด๊ณผ ํฌ๊ธฐ ๋ณ๊ฒฝํ๊ธฐ
ReportLab์ Helvetica
, Times-Roman
, Courier
๊ฐ์ ๊ธฐ๋ณธ ๊ธ๊ผด์ ์ง์ํด. setFont()
๋ฅผ ์ฌ์ฉํด์ ๊ธ๊ผด ์คํ์ผ(์ผ๋ฐ, ๊ตต๊ฒ, ์ดํค๋ฆญ)๊ณผ ํฌ๊ธฐ๋ฅผ ์ค์ ํ ์ ์์ด.
pdf_file.setFont("Helvetica-Bold", 18) # ๊ตต์ ๊ธ๊ผด๋ก ์ ๋ชฉ
pdf_file.drawString(100, height - 50, "์ฃผ์ ์ ๋ชฉ")
pdf_file.setFont("Helvetica-Oblique", 14) # ์ดํค๋ฆญ์ผ๋ก ๋ถ์ ๋ชฉ
pdf_file.drawString(100, height - 80, "๋ถ์ ๋ชฉ: ๋ถ๊ธฐ๋ณ ๊ฒฐ๊ณผ")
ํ ์คํธ ์์ ๋ณ๊ฒฝํ๊ธฐ
setFillColorRGB()
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ํ
์คํธ์ ์์์ ๋ณ๊ฒฝํ ์ ์์ด. ์ด ๋ฉ์๋๋ 0๋ถํฐ 1๊น์ง์ RGB ๊ฐ์ ๋ฐ์.
pdf_file.setFillColorRGB(0.2, 0.4, 0.6) # ํ๋์
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 110, "์ด ํ
์คํธ๋ ํ๋์์
๋๋ค.")
reportlab.lib.colors
์์ ๋ฏธ๋ฆฌ ์ ์๋ ์์์ ์ฌ์ฉํ ์๋ ์์ด.
from reportlab.lib import colors
pdf_file.setFillColor(colors.red)
pdf_file.drawString(100, height - 140, "๋นจ๊ฐ์ ํ
์คํธ")
3. ์ ๋ ฌ๊ณผ ์ฌ๋ฌ ์ค ํ ์คํธ
ํ
์คํธ๊ฐ ๊ธธ ๊ฒฝ์ฐ, ์ฌ๋ฌ ์ค๋ก ํํํ๋ ๊ฒ์ด ์ข์. ReportLab์ ์๋ ์ค๋ฐ๊ฟ์ ์ง์ํ๋ TextObject
ํด๋์ค๋ฅผ ์ ๊ณตํด.
TextObject
๋ฅผ ์ฌ์ฉํ ์ฌ๋ฌ ์ค ํ
์คํธ
text = """
๋ณด๊ณ ์๋ ์ง๋ ์ธ ๋ฌ ๋์์ ํ๋งค ๋ถ์์ ํฌํจํ๊ณ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ณํ์ ๊ทธ๊ฒ์ด ํ์ฌ์ ์ ์ฒด ์ฑ์ฅ์ ๋ฏธ์น๋ ์ํฅ์ ๊ฒํ ํฉ๋๋ค.
"""
text_object = pdf_file.beginText(100, height - 180)
text_object.setFont("Helvetica", 12)
text_object.setFillColor(colors.darkblue)
for line in text.split("\n"):
text_object.textLine(line)
pdf_file.drawText(text_object)
์ด ์ฝ๋๋ ์ฌ๋ฌ ์ค์ ํ
์คํธ ๋ธ๋ก์ ์์ฑํ๋๋ฐ, ๊ฐ ์ค์ PDF์ ์ถ๊ฐํด. TextObject
๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธด ํ
์คํธ๋ฅผ ์๋์ผ๋ก ํฌ๋งทํ
ํ ์ ์์ด์ ์ข์.
4. ๋จ๋ฝ์ ์ฌ์ฉํ ํ ์คํธ ์คํ์ผ๋ง
reportlab.platypus
๋ชจ๋์ Paragraph
ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด HTML ํ๊ทธ(<b>
, <i>
, <u>
๋ฑ)๋ฅผ ์ง์ํ๋ ์คํ์ผ๋ง๋ ํ
์คํธ๋ฅผ ์ถ๊ฐํ ์ ์์ด. Paragraph
๋ ์ ๋ ฌ๊ณผ ๋ค์ฌ์ฐ๊ธฐ๋ ์ง์ํด์ ํฌ๋งทํ
๋ ํ
์คํธ๋ฅผ ๋ง๋ค ๋ ์ ์ฉํด.
Paragraph
๋ฅผ ์ฌ์ฉํ ๋จ๋ฝ ์์ฑ
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph
# PDF ์ค์
doc = SimpleDocTemplate("styled_paragraphs.pdf", pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# ๊ตต์ ๊ธ๊ผด๊ณผ ์ดํค๋ฆญ ํ
์คํธ๋ก ๋จ๋ฝ ์์ฑ
text = "ํ๋งค ๋ณด๊ณ ์
2023๋
๋ถ๊ธฐ๋ณ ๋ณด๊ณ ์"
paragraph = Paragraph(text, styles["Title"])
elements.append(paragraph)
# ๋ณธ๋ฌธ ํ
์คํธ ์ถ๊ฐ
main_text = """
์ด ๋ณด๊ณ ์๋ ์ง๋ ๋ถ๊ธฐ์ ์ฃผ์ ํ๋งค ๋ฐ์ดํฐ์
ํ์ฌ์ ์ด ์์ต์ ๋ํ ํ๋งค์ ์ํฅ์ ๋ถ์ํ ๋ด์ฉ์ ํฌํจํฉ๋๋ค.
"""
paragraph = Paragraph(main_text, styles["BodyText"])
elements.append(paragraph)
# PDF ์์ฑ
doc.build(elements)
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ Paragraph
๋ฅผ ์ฌ์ฉํด์ ์คํ์ผ๋ง๋ ํ
์คํธ๋ฅผ ์ถ๊ฐํ์ด. HTML ํ๊ทธ๋ฅผ ํฌํจํด์ ๊ตต์ ๊ธ๊ผด๊ณผ ์ดํค๋ฆญ ํ
์คํธ๋ฅผ ๋ง๋ค์๊ณ , getSampleStyleSheet()
๋ ๊ธฐ๋ณธ ์คํ์ผ(์: Title
, BodyText
)์ ์ ๊ณตํด.
GO TO FULL VERSION