Giới thiệu
Embedded OpenType (EOT) là một định dạng phông chữ gọn nhẹ ban đầu được phát triển để nhúng phông chữ TrueType vào các trang web. Một tệp EOT bao bọc một phông chữ TTF hoặc OTF với một tiêu đề có kích thước cố định chứa các trường siêu dữ liệu mô tả kích thước phông, phiên bản, bộ ký tự và quyền nhúng. Mặc dù phát triển web hiện đại đã phần lớn chuyển sang WOFF/WOFF2, các tệp EOT vẫn còn được sử dụng trong các tài liệu kế thừa và ứng dụng doanh nghiệp.
Aspose.Font FOSS cho Python cung cấp quyền truy cập trực tiếp vào nội bộ phông chữ EOT thông qua lớp EotFont và đối tác EotHeader. Bạn có thể tải tệp EOT bằng FontLoader.open, đọc các trường tiêu đề, duyệt TtfFont bên trong, và tuần tự hoá kết quả trở lại thành byte hoặc thành tệp bằng Font.save. Thư viện được xuất bản trên PyPI với tên aspose-font và được cấp phép theo MIT License. Nó không có bất kỳ phụ thuộc thương mại bắt buộc nào và hoạt động với runtime Python 3 tiêu chuẩn.
Các tính năng chính
Tải phông chữ EOT
Sử dụng FontLoader.open để tải một tệp EOT từ đường dẫn hoặc đối tượng bytes. Phương thức trả về một thể hiện EotFont khi phát hiện chữ ký EOT:
from aspose_font import FontLoader, EotFont
font = FontLoader.open("fonts/sample.eot")
assert isinstance(font, EotFont)
print(font.font_name) # e.g. "Roboto"
print(font.font_family) # e.g. "Roboto"
print(font.num_glyphs) # number of glyphs in the inner font
FontLoader.open đọc phần mở rộng tệp và magic header để tự động phát hiện định dạng. Không cần đối số font_type cho các tệp phông chữ thông thường.
Đọc siêu dữ liệu EotHeader
EotFont phô bày các trường tiêu đề trực tiếp dưới dạng thuộc tính trên lớp. Chúng tương ứng với các trường được định nghĩa trong đặc tả nhị phân EOT:
from aspose_font import FontLoader, EotFont, EotSerializer
# Load EOT — FontLoader returns an EotFont instance for .eot files
loaded = FontLoader.open("fonts/sample.eot")
# Serialize back to bytes to confirm the font loaded correctly
eot_bytes = EotSerializer.serialize(loaded)
print(f"EOT data loaded: {len(eot_bytes)} bytes")
# Base Font properties work on any loaded font
print("Font name:", loaded.font_name)
print("Glyphs :", loaded.num_glyphs)
Lớp EotFont phô bày các siêu dữ liệu tiêu đề sau dưới dạng thuộc tính:
eot_version(int) — phiên bản định dạng EOT (ví dụ:0x00020002)flags(int) — cờ quyền nhúngcharset(int) — định danh bộ ký tự (0 = ANSI, 1 = DEFAULT)italic(int) — cờ in nghiêng (0 hoặc 1)weight(int) — độ dày phông chữ (ví dụ, 400 cho Regular, 700 cho Bold)fs_type(int) — OS/2 các bit nhúng fsType
Sử dụng flags và fs_type để xác định liệu phông chữ có cho phép cắt con hoặc nhúng hay không, điều này liên quan khi xử lý phông chữ cho các dây chuyền phân phối lại.
Truy cập TtfFont nội bộ
Mỗi EotFont bao bọc một phông chữ TrueType chuẩn. Thuộc tính inner_font trả về thể hiện TtfFont, cho phép bạn truy cập đầy đủ bộ bảng TrueType:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/sample.eot")
# Metrics are accessible directly from the loaded font
metrics = loaded.metrics
print("Units per em :", metrics.units_per_em)
print("Ascender :", metrics.ascender)
print("Descender :", metrics.descender)
print("Line gap :", metrics.line_gap)
Thuộc tính inner_font trên EotFont trả về thể hiện TtfFont đã được bao bọc, cung cấp quyền truy cập vào toàn bộ bộ bảng TrueType, các cặp kern và các bảng mã.
Chuỗi hoá EOT thành byte
EotSerializer.serialize chuyển đổi bất kỳ đối tượng Font nào thành chuỗi byte EOT thô:
from aspose_font import FontLoader, EotFont, EotSerializer
font = FontLoader.open("fonts/sample.eot")
assert isinstance(font, EotFont)
eot_bytes = EotSerializer.serialize(font)
with open("output/sample_copy.eot", "wb") as fh:
fh.write(eot_bytes)
print(f"Serialized {len(eot_bytes)} bytes")
Chuyển đổi TTF sang EOT
EotSerializer.serialize chấp nhận bất kỳ thể hiện Font nào, vì vậy bạn có thể tải một TTF và chuỗi hoá nó trực tiếp thành byte EOT:
from aspose_font import FontLoader, EotFont, EotSerializer
ttf = FontLoader.open("fonts/Roboto-Regular.ttf")
eot_bytes = EotSerializer.serialize(ttf)
with open("output/Roboto-Regular.eot", "wb") as fh:
fh.write(eot_bytes)
reloaded = FontLoader.open("output/Roboto-Regular.eot")
assert isinstance(reloaded, EotFont)
print("Converted and verified:", reloaded.font_name)
Chỉ số Phông chữ và Cặp Kerning
Đối tượng EotFont kế thừa toàn bộ giao diện Font, vì vậy các chỉ số và mã hoá có sẵn trực tiếp mà không cần đi qua inner_font:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/sample.eot")
metrics = loaded.metrics
print(f"Ascender : {metrics.ascender}")
print(f"Descender: {metrics.descender}")
print(f"Line gap : {metrics.line_gap}")
print(f"Underline: {metrics.underline_position}")
for pair in loaded.get_kern_pairs():
print(f" Kern: {pair}")
Bắt đầu nhanh
Cài đặt thư viện:
.venv/bin/pip install aspose-font
Tải và kiểm tra phông chữ EOT:
from aspose_font import FontLoader, EotFont, EotSerializer
loaded = FontLoader.open("sample.eot")
# Base font info
print(f"Font name : {loaded.font_name}")
print(f"Glyphs : {loaded.num_glyphs}")
# Metrics
metrics = loaded.metrics
print(f"UPM : {metrics.units_per_em}")
print(f"Ascender : {metrics.ascender}")
# Serialize the loaded font back to EOT bytes
eot_bytes = EotSerializer.serialize(loaded)
print(f"Serialized: {len(eot_bytes)} bytes")
Các định dạng được hỗ trợ
| Định dạng | Phần mở rộng | Đọc | Ghi |
|---|---|---|---|
| TTF | .ttf | ✓ | — |
| OTF | .otf | ✓ | — |
| EOT | .eot | ✓ | — |
| CFF | .cff | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
| WOFF | .woff | ✓ | — |
| WOFF2 | .woff2 | ✓ | — |
Tất cả các định dạng được liệt kê ở trên đều được hỗ trợ tải lên qua FontLoader.open. Viết ra một định dạng cụ thể sử dụng Font.save hoặc EotSerializer.serialize cho EOT.
Mã nguồn mở & Giấy phép
Aspose.Font FOSS cho Python được phát hành theo Giấy phép MIT. Bạn có thể sử dụng nó trong các dự án cá nhân, thương mại và mã nguồn mở mà không mất phí. Mã nguồn có sẵn trên GitHub và gói được phân phối qua PyPI dưới dạng aspose-font.