Mengubah Markdown menjadi PDF dan PPTX#
Teks Markdown, misalnya jawaban LLM, bisa diubah menjadi file PDF atau presentasi PowerPoint. Hasilnya bisa ditulis ke file atau diambil sebagai bytes untuk langsung diunduh lewat API.
Sebelum mulai: kamu butuh Zul yang sudah ter-install (Instalasi Zul). Kedua converter di halaman ini memakai extra converter, yang di-install di langkah pertama.
Mengubah Markdown menjadi PDF#
-
Install Zul dengan extra
converter: -
Siapkan teks Markdown. Heading, daftar, tabel, kode, teks tebal, dan teks miring didukung:
markdown = """ # Laporan Mingguan ## Ringkasan Penjualan naik **12%** dibanding minggu lalu. | Produk | Terjual | |--------|---------| | A | 120 | | B | 85 | """Tulis isi Markdown mulai dari tepi kiri, tanpa indentasi tambahan, supaya heading dan tabel dikenali.
-
Buat converter, lalu tulis PDF ke sebuah folder:
from zul.utilities.markdown_converter.md_to_pdf import MarkdownToPDFConverter converter = MarkdownToPDFConverter(page_size="A4", margin="2cm") succeeded = converter.convert(markdown, output_path="output", filename="laporan.pdf")convertmembuat folderoutputjika belum ada dan menulisoutput/laporan.pdf. -
Periksa nilai kembaliannya.
convertmengembalikanTruejika berhasil. Jika gagal, method ini mencetak penyebabnya dan mengembalikanFalse, tanpa melempar exception:
Mengubah tampilan PDF#
Stylesheet bawaan memakai aksen oranye pada heading dan header tabel.
-
Untuk menggantinya, berikan CSS-mu sendiri ke
set_custom_stylessebelum memanggilconvert:converter.set_custom_styles(""" body { font-family: Georgia, serif; font-size: 11pt; } h1 { color: #1a365d; border-bottom: 2px solid #1a365d; } table th { background-color: #1a365d; color: white; } """)CSS itu menggantikan seluruh stylesheet bawaan, dan hanya berlaku untuk objek converter tersebut.
-
Jika CSS-mu perlu ukuran halaman dan margin dari converter, tulis sebagai template: gandakan setiap kurung kurawal, lalu pakai
{page_size}dan{margin}:
Mengubah Markdown menjadi PPTX#
-
Tulis Markdown dengan baris
---sebagai pemisah slide. Setiap bagian menjadi satu slide:markdown = """# Laporan Kuartal 3 --- ## Ringkasan * Pendapatan naik 12% * Terutama dari produk A * Biaya turun 3% --- ## Penjualan per Produk | Produk | Terjual | |--------|---------| | A | 120 | | B | 85 | """Indentasi dua spasi di depan bullet menurunkannya satu level, jadi tulis bullet tingkat teratas mulai dari tepi kiri.
-
Buat service, lalu konversi ke file:
from zul.utilities.markdown_converter.md_to_ppt import DynamicMarkdownToPPTXService service = DynamicMarkdownToPPTXService() service.convert_markdown(markdown, "laporan.pptx")Contoh ini menghasilkan tiga slide berukuran 16:9. Cara setiap elemen Markdown diubah menjadi isi slide ada di Referensi Markdown converter.
Note
Pemisah slide harus berupa baris --- yang berdiri sendiri, dengan baris baru sebelum dan sesudahnya.
Memakai template PowerPoint#
-
Untuk memakai desain perusahaan, berikan file template saat membuat service. Judul dan isi mengisi placeholder pada layout slide template:
service = DynamicMarkdownToPPTXService(template_path="template.pptx") service.convert_markdown(markdown, "laporan.pptx")Slide baru ditambahkan setelah slide yang sudah ada di file template. Jika file template tidak ditemukan, service mencetak peringatan dan membuat slide polos.
-
Tanpa template, atur font dan warna per jenis teks lewat
style_config:from pptx.dml.color import RGBColor service = DynamicMarkdownToPPTXService( style_config={ "h2": {"font_size": 36, "font_color": RGBColor(26, 54, 93)}, "bullet": {"font_size": 20}, } )Judul slide memakai gaya
h2. Jenis teks lain yang bisa diatur ada di Referensi Markdown converter.
Mengirim file lewat API#
Kedua converter punya convert_to_bytes, yang mengembalikan isi file tanpa menulis ke disk.
-
Panggil
convert_to_bytesdi dalam endpoint. Contoh berikut adalah aplikasi FastAPI yang mengembalikan PDF:app.pyfrom fastapi import FastAPI, Response from pydantic import BaseModel from zul.utilities.markdown_converter.md_to_pdf import MarkdownToPDFConverter app = FastAPI() class ReportRequest(BaseModel): markdown: str @app.post("/reports/pdf") def create_pdf(request: ReportRequest) -> Response: pdf_bytes = MarkdownToPDFConverter().convert_to_bytes(request.markdown) if not pdf_bytes: return Response(status_code=500) return Response( content=pdf_bytes, media_type="application/pdf", headers={"Content-Disposition": 'attachment; filename="laporan.pdf"'}, )Jika konversi gagal,
convert_to_bytesmengembalikan bytes kosong (b""). Karena itu endpoint memeriksanya sebelum mengirim respons. -
Untuk PPTX, ganti converter dengan service PPTX dan sesuaikan tipe medianya:
Note
Setiap pemanggilan convert_to_bytes pada service PPTX memulai presentasi baru. convert_markdown berbeda: method itu menambah slide ke presentasi yang sudah ada di objek service, jadi memanggilnya dua kali pada objek yang sama menggandakan slide.
Memeriksa hasilnya#
Saat PDF berhasil dibuat, convert mencetak lokasi file:
✓ PDF berhasil disimpan di: output/laporan.pdf
✓ Absolute path: /home/kamu/proyek/output/laporan.pdf
Path absolut mengikuti folder kerjamu, dan di Windows pemisah foldernya adalah \.
Saat PPTX berhasil dibuat, convert_markdown mencetak nama file dan jumlah slide:
Buka kedua file untuk memastikan isinya sesuai.
Halaman terkait#
- Referensi Markdown converter untuk semua method, sintaks slide, dan kunci gaya.
- Menambah endpoint untuk menaruh endpoint unduhan di proyek hasil
zul build hexa. - Memanggil LLM dan embedding untuk menghasilkan Markdown dari LLM.