Spaces:
Sleeping
Sleeping
Update README.md
Browse files
README.md
CHANGED
|
@@ -691,4 +691,51 @@ if st.button("🚀 Generate PDFs from all Markdown Files", type="primary"):
|
|
| 691 |
display_file_explorer()
|
| 692 |
|
| 693 |
|
| 694 |
-
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 691 |
display_file_explorer()
|
| 692 |
|
| 693 |
|
| 694 |
+
```
|
| 695 |
+
|
| 696 |
+
|
| 697 |
+
|
| 698 |
+
💡 Deeper Dive: Pages and Fonts in ReportLab
|
| 699 |
+
Why emojis don't "just work."
|
| 700 |
+
ReportLab is powerful, but it requires you to be explicit about resources like fonts.
|
| 701 |
+
|
| 702 |
+
Here’s a breakdown:
|
| 703 |
+
📖 Pages: The Canvas for Your Content
|
| 704 |
+
Think of a ReportLab page as a painter's canvas.
|
| 705 |
+
|
| 706 |
+
Size & Orientation: When you choose a layout like A4 or landscape(letter), you're picking the physical dimensions of your canvas.
|
| 707 |
+
|
| 708 |
+
Margins: The margins (topMargin, leftMargin, etc.) define the printable area, like taping off the borders of the canvas. You can only draw inside these lines.
|
| 709 |
+
|
| 710 |
+
The "Story": Your content (paragraphs, images, etc.) is collected into a list called a story.
|
| 711 |
+
|
| 712 |
+
The SimpleDocTemplate: This is the "artist" that takes your story and automatically paints it onto the canvas. When it runs out of space on one page, it intelligently grabs a new, identical canvas and continues drawing. You don't have to manage page breaks manually unless you want to.
|
| 713 |
+
|
| 714 |
+
🔤 Fonts: The Stencils for Your Text
|
| 715 |
+
Think of fonts as sets of stencils.
|
| 716 |
+
|
| 717 |
+
Standard Fonts: ReportLab comes with a few built-in stencil sets like Helvetica and Times-Roman.
|
| 718 |
+
These are like a basic alphabet kit—they are reliable but only contain standard Latin characters (A-Z, a-z, 0-9, etc.).
|
| 719 |
+
|
| 720 |
+
The Emoji Problem: Emojis (like 👍 or 🚀) are special characters that are not in these basic stencil kits.
|
| 721 |
+
When ReportLab tries to draw an emoji using Helvetica, it can't find a stencil for it and usually draws a blank space or an error character.
|
| 722 |
+
|
| 723 |
+
The Solution (The Fix): To draw emojis, you need a special stencil set that includes them!
|
| 724 |
+
|
| 725 |
+
Get the Font File: You must obtain a font file (like NotoColorEmoji-Regular.ttf) that contains the emoji shapes.
|
| 726 |
+
Google's Noto Fonts are excellent and free.
|
| 727 |
+
Register the Font: You have to explicitly tell ReportLab about your new stencil set
|
| 728 |
+
|
| 729 |
+
using pdfmetrics.registerFont().
|
| 730 |
+
This adds it to the list of available tools.
|
| 731 |
+
Use the Font: You must tell ReportLab exactly when to use the emoji font. The code below does this by finding all emojis in your text and wrapping them in <font name="NotoEmoji">...</font> tags. This tells the "artist" to switch to the emoji stencil for that specific character, then switch back.
|
| 732 |
+
By managing fonts this way, you can create PDFs with a rich mix of text, symbols, and emojis!
|
| 733 |
+
|
| 734 |
+
🐍 Refactored Python Code
|
| 735 |
+
Here is the fully annotated and corrected code.
|
| 736 |
+
|
| 737 |
+
⚠️ Important Setup: For emojis to work, you must download the Noto Color Emoji font.
|
| 738 |
+
|
| 739 |
+
Download the font here: Google Noto Fonts - Noto Color Emoji
|
| 740 |
+
Click "Download family".
|
| 741 |
+
From the downloaded ZIP file, extract NotoColorEmoji-Regular.ttf and place it in the same directory as your Python script.
|