# เพิ่มฟอนต์ก่อนเรียกใช้ add_page เพื่อหลีกเลี่ยง error
from fpdf import FPDF
class PDF(FPDF):
self.set_font("THSarabun", "B", 20)
self.cell(0, 10, "สรุปขั้นตอนการทำฮัจย์ อุมเราะห์ ตอวาฟ และสะอี", ln=True, align="C")
self.ln(5)
def chapter_title(self, title):
self.set_font("THSarabun", "B", 18)
self.set_fill_color(230, 230, 250)
self.cell(0, 10, title, ln=True, fill=True)
self.ln(2)
def chapter_body(self, body):
self.set_font("THSarabun", "", 16)
self.multi_cell(0, 10, body)
self.ln()
pdf = PDF()
# เพิ่มฟอนต์ภาษาไทยก่อนเพิ่มหน้า
font_path_regular = "/mnt/data/THSarabunNew.ttf"
font_path_bold = "/mnt/data/THSarabunNew-Bold.ttf"
pdf.add_font("THSarabun", "", font_path_regular, uni=True)
pdf.add_font("THSarabun", "B", font_path_bold, uni=True)
pdf.add_page()
# ข้อมูลเนื้อหา
sections = {
"1. ฮัจย์": """
- เป็นภาคบังคับสำหรับผู้ที่มีความสามารถ
- ทำเฉพาะวันที่ 8–13 ซุลฮิจญะฮ์
- ขั้นตอนหลัก: เอี๊ยะห์รอม > ตอวาฟ > สะอี > ยืนอะรอฟะห์ > ขว้างหิน > ตะฮัลลุล > ตอวาฟวะดาอ์
""",
"2. อุมเราะห์": """
- เป็นซุนนะห์มุอักกะดะห์ ทำได้ตลอดปี
- ขั้นตอน: เอี๊ยะห์รอม > ตอวาฟ > สะอี > ตะฮัลลุล (ตัดผม/โกนหัว)
""",
"3. ตอวาฟ": """
- เริ่มที่หะญัร อัสวัด กล่าว 'บิสมิลลาฮ์ วัลลอฮุอักบัร'
- เวียนรอบกะอ์บะฮ์ 7 รอบ ทวนเข็มนาฬิกา กะอ์บะฮ์อยู่ด้านซ้าย
- แตะรุกนุลยะมานี (ถ้าทำได้) และกล่าวดุอาอ์ระหว่างทาง
- หลังจบ 7 รอบ ละหมาด 2 รอกาอะห์หลังมักกอมอิบรอฮีม และดื่มน้ำซัมซัม
""",
"4. สะอี": """
- เริ่มที่เนินซอฟา หันหน้าไปทางกะอ์บะฮ์ กล่าวดุอาอ์
- เดินไปมัรวะห์ (1 รอบ) และกลับซอฟา (2 รอบ) ทำครบ 7 รอบ (จบที่มัรวะห์)
- ผู้ชายให้วิ่งเบาๆ ที่ระหว่างไฟเขียว (ไมละนีน)
- เสร็จแล้วตัดผมหรือโกนหัว (ตะฮัลลุล)
"""
}
# สร้างเนื้อหา
for title, body in sections.items():
pdf.chapter_title(title)
pdf.chapter_body(body)
# บันทึกไฟล์ PDF
pdf_path = "/mnt/data/สรุปขั้นตอนฮัจย์_อุมเราะห์_ตอวาฟ_สะอี.pdf"
pdf.output(pdf_path)
pdf_path
IyDguYDguJ7guLTguYjguKHguJ/guK3guJnguJXguYzguIHguYjguK3guJnguYDguKPguLXguKLguIHguYPguIrguYkgYWRkX3BhZ2Ug4LmA4Lie4Li34LmI4Lit4Lir4Lil4Li14LiB4LmA4Lil4Li14LmI4Lii4LiHIGVycm9yCmZyb20gZnBkZiBpbXBvcnQgRlBERgoKY2xhc3MgUERGKEZQREYpOgogICAgZGVmIGhlYWRlcihzZWxmKToKICAgICAgICBzZWxmLnNldF9mb250KCJUSFNhcmFidW4iLCAiQiIsIDIwKQogICAgICAgIHNlbGYuY2VsbCgwLCAxMCwgIuC4quC4o+C4uOC4m+C4guC4seC5ieC4meC4leC4reC4meC4geC4suC4o+C4l+C4s+C4ruC4seC4iOC4ouC5jCDguK3guLjguKHguYDguKPguLLguLDguKvguYwg4LiV4Lit4Lin4Liy4LifIOC5geC4peC4sOC4quC4sOC4reC4tSIsIGxuPVRydWUsIGFsaWduPSJDIikKICAgICAgICBzZWxmLmxuKDUpCgogICAgZGVmIGNoYXB0ZXJfdGl0bGUoc2VsZiwgdGl0bGUpOgogICAgICAgIHNlbGYuc2V0X2ZvbnQoIlRIU2FyYWJ1biIsICJCIiwgMTgpCiAgICAgICAgc2VsZi5zZXRfZmlsbF9jb2xvcigyMzAsIDIzMCwgMjUwKQogICAgICAgIHNlbGYuY2VsbCgwLCAxMCwgdGl0bGUsIGxuPVRydWUsIGZpbGw9VHJ1ZSkKICAgICAgICBzZWxmLmxuKDIpCgogICAgZGVmIGNoYXB0ZXJfYm9keShzZWxmLCBib2R5KToKICAgICAgICBzZWxmLnNldF9mb250KCJUSFNhcmFidW4iLCAiIiwgMTYpCiAgICAgICAgc2VsZi5tdWx0aV9jZWxsKDAsIDEwLCBib2R5KQogICAgICAgIHNlbGYubG4oKQoKcGRmID0gUERGKCkKCiMg4LmA4Lie4Li04LmI4Lih4Lif4Lit4LiZ4LiV4LmM4Lig4Liy4Lip4Liy4LmE4LiX4Lii4LiB4LmI4Lit4LiZ4LmA4Lie4Li04LmI4Lih4Lir4LiZ4LmJ4LiyCmZvbnRfcGF0aF9yZWd1bGFyID0gIi9tbnQvZGF0YS9USFNhcmFidW5OZXcudHRmIgpmb250X3BhdGhfYm9sZCA9ICIvbW50L2RhdGEvVEhTYXJhYnVuTmV3LUJvbGQudHRmIgpwZGYuYWRkX2ZvbnQoIlRIU2FyYWJ1biIsICIiLCBmb250X3BhdGhfcmVndWxhciwgdW5pPVRydWUpCnBkZi5hZGRfZm9udCgiVEhTYXJhYnVuIiwgIkIiLCBmb250X3BhdGhfYm9sZCwgdW5pPVRydWUpCgpwZGYuYWRkX3BhZ2UoKQoKIyDguILguYnguK3guKHguLnguKXguYDguJnguLfguYnguK3guKvguLIKc2VjdGlvbnMgPSB7CiAgICAiMS4g4Liu4Lix4LiI4Lii4LmMIjogIiIiCi0g4LmA4Lib4LmH4LiZ4Lig4Liy4LiE4Lia4Lix4LiH4LiE4Lix4Lia4Liq4Liz4Lir4Lij4Lix4Lia4Lic4Li54LmJ4LiX4Li14LmI4Lih4Li14LiE4Lin4Liy4Lih4Liq4Liy4Lih4Liy4Lij4LiWCi0g4LiX4Liz4LmA4LiJ4Lie4Liy4Liw4Lin4Lix4LiZ4LiX4Li14LmIIDjigJMxMyDguIvguLjguKXguK7guLTguIjguI3guLDguK7guYwKLSDguILguLHguYnguJnguJXguK3guJnguKvguKXguLHguIE6IOC5gOC4reC4teC5iuC4ouC4sOC4q+C5jOC4o+C4reC4oSA+IOC4leC4reC4p+C4suC4nyA+IOC4quC4sOC4reC4tSA+IOC4ouC4t+C4meC4reC4sOC4o+C4reC4n+C4sOC4q+C5jCA+IOC4guC4p+C5ieC4suC4h+C4q+C4tOC4mSA+IOC4leC4sOC4ruC4seC4peC4peC4uOC4pSA+IOC4leC4reC4p+C4suC4n+C4p+C4sOC4lOC4suC4reC5jAoiIiIsCiAgICAiMi4g4Lit4Li44Lih4LmA4Lij4Liy4Liw4Lir4LmMIjogIiIiCi0g4LmA4Lib4LmH4LiZ4LiL4Li44LiZ4LiZ4Liw4Lir4LmM4Lih4Li44Lit4Lix4LiB4LiB4Liw4LiU4Liw4Lir4LmMIOC4l+C4s+C5hOC4lOC5ieC4leC4peC4reC4lOC4m+C4tQotIOC4guC4seC5ieC4meC4leC4reC4mTog4LmA4Lit4Li14LmK4Lii4Liw4Lir4LmM4Lij4Lit4LihID4g4LiV4Lit4Lin4Liy4LifID4g4Liq4Liw4Lit4Li1ID4g4LiV4Liw4Liu4Lix4Lil4Lil4Li44LilICjguJXguLHguJTguJzguKEv4LmC4LiB4LiZ4Lir4Lix4LinKQoiIiIsCiAgICAiMy4g4LiV4Lit4Lin4Liy4LifIjogIiIiCi0g4LmA4Lij4Li04LmI4Lih4LiX4Li14LmI4Lir4Liw4LiN4Lix4LijIOC4reC4seC4quC4p+C4seC4lCDguIHguKXguYjguLLguKcgJ+C4muC4tOC4quC4oeC4tOC4peC4peC4suC4ruC5jCDguKfguLHguKXguKXguK3guK7guLjguK3guLHguIHguJrguLHguKMnCi0g4LmA4Lin4Li14Lii4LiZ4Lij4Lit4Lia4LiB4Liw4Lit4LmM4Lia4Liw4Liu4LmMIDcg4Lij4Lit4LiaIOC4l+C4p+C4meC5gOC4guC5h+C4oeC4meC4suC4rOC4tOC4geC4siDguIHguLDguK3guYzguJrguLDguK7guYzguK3guKLguLnguYjguJTguYnguLLguJnguIvguYnguLLguKIKLSDguYHguJXguLDguKPguLjguIHguJnguLjguKXguKLguLDguKHguLLguJnguLUgKOC4luC5ieC4suC4l+C4s+C5hOC4lOC5iSkg4LmB4Lil4Liw4LiB4Lil4LmI4Liy4Lin4LiU4Li44Lit4Liy4Lit4LmM4Lij4Liw4Lir4Lin4LmI4Liy4LiH4LiX4Liy4LiHCi0g4Lir4Lil4Lix4LiH4LiI4LiaIDcg4Lij4Lit4LiaIOC4peC4sOC4q+C4oeC4suC4lCAyIOC4o+C4reC4geC4suC4reC4sOC4q+C5jOC4q+C4peC4seC4h+C4oeC4seC4geC4geC4reC4oeC4reC4tOC4muC4o+C4reC4ruC4teC4oSDguYHguKXguLDguJTguLfguYjguKHguJnguYnguLPguIvguLHguKHguIvguLHguKEKIiIiLAogICAgIjQuIOC4quC4sOC4reC4tSI6ICIiIgotIOC5gOC4o+C4tOC5iOC4oeC4l+C4teC5iOC5gOC4meC4tOC4meC4i+C4reC4n+C4siDguKvguLHguJnguKvguJnguYnguLLguYTguJvguJfguLLguIfguIHguLDguK3guYzguJrguLDguK7guYwg4LiB4Lil4LmI4Liy4Lin4LiU4Li44Lit4Liy4Lit4LmMCi0g4LmA4LiU4Li04LiZ4LmE4Lib4Lih4Lix4Lij4Lin4Liw4Lir4LmMICgxIOC4o+C4reC4mikg4LmB4Lil4Liw4LiB4Lil4Lix4Lia4LiL4Lit4Lif4LiyICgyIOC4o+C4reC4mikg4LiX4Liz4LiE4Lij4LiaIDcg4Lij4Lit4LiaICjguIjguJrguJfguLXguYjguKHguLHguKPguKfguLDguKvguYwpCi0g4Lic4Li54LmJ4LiK4Liy4Lii4LmD4Lir4LmJ4Lin4Li04LmI4LiH4LmA4Lia4Liy4LmGIOC4l+C4teC5iOC4o+C4sOC4q+C4p+C5iOC4suC4h+C5hOC4n+C5gOC4guC4teC4ouC4pyAo4LmE4Lih4Lil4Liw4LiZ4Li14LiZKQotIOC5gOC4quC4o+C5h+C4iOC5geC4peC5ieC4p+C4leC4seC4lOC4nOC4oeC4q+C4o+C4t+C4reC5guC4geC4meC4q+C4seC4pyAo4LiV4Liw4Liu4Lix4Lil4Lil4Li44LilKQoiIiIKfQoKIyDguKrguKPguYnguLLguIfguYDguJnguLfguYnguK3guKvguLIKZm9yIHRpdGxlLCBib2R5IGluIHNlY3Rpb25zLml0ZW1zKCk6CiAgICBwZGYuY2hhcHRlcl90aXRsZSh0aXRsZSkKICAgIHBkZi5jaGFwdGVyX2JvZHkoYm9keSkKCiMg4Lia4Lix4LiZ4LiX4Li24LiB4LmE4Lif4Lil4LmMIFBERgpwZGZfcGF0aCA9ICIvbW50L2RhdGEv4Liq4Lij4Li44Lib4LiC4Lix4LmJ4LiZ4LiV4Lit4LiZ4Liu4Lix4LiI4Lii4LmMX+C4reC4uOC4oeC5gOC4o+C4suC4sOC4q+C5jF/guJXguK3guKfguLLguJ9f4Liq4Liw4Lit4Li1LnBkZiIKcGRmLm91dHB1dChwZGZfcGF0aCkKCnBkZl9wYXRo
# เพิ่มฟอนต์ก่อนเรียกใช้ add_page เพื่อหลีกเลี่ยง error
from fpdf import FPDF
class PDF(FPDF):
def header(self):
self.set_font("THSarabun", "B", 20)
self.cell(0, 10, "สรุปขั้นตอนการทำฮัจย์ อุมเราะห์ ตอวาฟ และสะอี", ln=True, align="C")
self.ln(5)
def chapter_title(self, title):
self.set_font("THSarabun", "B", 18)
self.set_fill_color(230, 230, 250)
self.cell(0, 10, title, ln=True, fill=True)
self.ln(2)
def chapter_body(self, body):
self.set_font("THSarabun", "", 16)
self.multi_cell(0, 10, body)
self.ln()
pdf = PDF()
# เพิ่มฟอนต์ภาษาไทยก่อนเพิ่มหน้า
font_path_regular = "/mnt/data/THSarabunNew.ttf"
font_path_bold = "/mnt/data/THSarabunNew-Bold.ttf"
pdf.add_font("THSarabun", "", font_path_regular, uni=True)
pdf.add_font("THSarabun", "B", font_path_bold, uni=True)
pdf.add_page()
# ข้อมูลเนื้อหา
sections = {
"1. ฮัจย์": """
- เป็นภาคบังคับสำหรับผู้ที่มีความสามารถ
- ทำเฉพาะวันที่ 8–13 ซุลฮิจญะฮ์
- ขั้นตอนหลัก: เอี๊ยะห์รอม > ตอวาฟ > สะอี > ยืนอะรอฟะห์ > ขว้างหิน > ตะฮัลลุล > ตอวาฟวะดาอ์
""",
"2. อุมเราะห์": """
- เป็นซุนนะห์มุอักกะดะห์ ทำได้ตลอดปี
- ขั้นตอน: เอี๊ยะห์รอม > ตอวาฟ > สะอี > ตะฮัลลุล (ตัดผม/โกนหัว)
""",
"3. ตอวาฟ": """
- เริ่มที่หะญัร อัสวัด กล่าว 'บิสมิลลาฮ์ วัลลอฮุอักบัร'
- เวียนรอบกะอ์บะฮ์ 7 รอบ ทวนเข็มนาฬิกา กะอ์บะฮ์อยู่ด้านซ้าย
- แตะรุกนุลยะมานี (ถ้าทำได้) และกล่าวดุอาอ์ระหว่างทาง
- หลังจบ 7 รอบ ละหมาด 2 รอกาอะห์หลังมักกอมอิบรอฮีม และดื่มน้ำซัมซัม
""",
"4. สะอี": """
- เริ่มที่เนินซอฟา หันหน้าไปทางกะอ์บะฮ์ กล่าวดุอาอ์
- เดินไปมัรวะห์ (1 รอบ) และกลับซอฟา (2 รอบ) ทำครบ 7 รอบ (จบที่มัรวะห์)
- ผู้ชายให้วิ่งเบาๆ ที่ระหว่างไฟเขียว (ไมละนีน)
- เสร็จแล้วตัดผมหรือโกนหัว (ตะฮัลลุล)
"""
}
# สร้างเนื้อหา
for title, body in sections.items():
pdf.chapter_title(title)
pdf.chapter_body(body)
# บันทึกไฟล์ PDF
pdf_path = "/mnt/data/สรุปขั้นตอนฮัจย์_อุมเราะห์_ตอวาฟ_สะอี.pdf"
pdf.output(pdf_path)
pdf_path