כיצד לעבוד עם טבלות חוטים ב- Python
מדריך זה מראה כיצד לקרוא את טבלאות TTF הנקרא, לקבל ביטים ירוקים של לוח בינארי ולכתוב נתוני לוח משתנים באמצעות TtfFont ב Aspose.Font FOSS עבור Python. TrueType fonts store all data in binary tables identified by 4-character tags. Aspose.Font פוסים מציגים את כל הנתונים בטבלות בינאריות המזהות על ידי תגיות 4 אותיות. TtfTableSet על מנת לקבל גישה לשולחן השם ו TtfFont.get_table_bytes() / TtfFont.set_table_bytes() גישה בינארית ירוקה.
הדרכה שלב אחר צעד
שלב 1: התקנת החבילה
התקנת חבילת Aspose.Font FOSS מ-PyPI באמצעות הפקודה Pip למטה:
pip install "aspose-font>=1.0.0"שלב 2: ייבוא שיעורים נדרשים
ייבוא FontLoader ו TtfFont כדי להעלות קובץ טקסט ולהגיע למערכת הטבלה שלה:
from aspose_font.loader import FontLoader
from aspose_font.ttf.font import TtfFontשלב 3: גישה לשמות השם
להעלות קובץ TTF עם FontLoader.open() גישה למדפים באמצעות ttf_tables רכוש :
ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
tables = ttf_font.ttf_tables
print("kern present:", tables.kern is not None)
print("cmap present:", tables.cmap is not None)שלב 4: לקרוא את שער שולחן ירוק
קרא את הנתונים הבינאריים היבשים עבור טבלה מסוימת על ידי העברת התווית שלה 4 סימנים ל get_table_bytes():
ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
raw = ttf_font.get_table_bytes("name")
print(f"name table: {len(raw)} bytes")שלב 5: כתיבת תיקונים שונה
כתיבת נתונים בינאריים שונה בחזרה לשולחן בשם באמצעות set_table_bytes() עם התגית והבייט תשלום:
ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
modified = b"..." # your modified binary data
ttf_font.set_table_bytes("GSUB", modified)בעיות נפוצות ותקנות
AttributeError: Font has no attribute ttf_tables — ttf_tables הוא על TtfFont, לא הבסיס Font שיעור שימוש ttf_font: TtfFont = FontLoader.open(...) כדי לקבל A דוגמאות של התייחסות.
get_table_bytes החזיר את הוויטות הריקות התווית חייבת להיות בדיוק 4 תווים. (למשל, יש צורך במגוון רחב של מקומות, למשל. "kern" לא "KRN").
שאלות נפוצות שואלים
אילו טבלאות נקראות מופיעות ב- TtfTableSet?
ראש, hhea, maxp, os2, שם, פוסט, cmap, loca, Hmtx ו kern.
האם אני יכול להוסיף שולחן חדש לתוך טופס?
כן.עביר כל תווית 4 ביטים ותא נתונים בייט בתור TtfFont.set_table_bytes(tag, data).