Memuat font dari file, stream, dan array byte di Java
Muat dan inisialisasi font TrueType (TTF), OpenType (OTF), WOFF/WOFF2, Embedded OpenType (EOT), Type1, dan Compact Font Format (CFF) secara terprogram menggunakan Aspose.Font untuk Java. Muat font dengan mudah dari jalur disk, file sistem, stream byte, atau array dalam memori tanpa bergantung pada Java AWT native atau instalasi font yang bergantung pada sistem operasi.
Untuk membuka dan bekerja dengan font apa pun di Aspose.Font untuk Java, diperlukan dua parameter utama:
- Format Font (FontType): Mengidentifikasi kategori umum (misalnya, FontType.TTF, FontType.Type1, FontType.CFF).
- Sumber Biner Font (StreamSource/FontFileDefinition): Membungkus stream biner yang mendasarinya, terlepas dari apakah stream tersebut berada di disk, dalam database, atau di dalam stream dokumen (misalnya, PDF/DOCX).
- Kelas utama
FontDefinitionmengikat parameter-parameter ini, sehinggaFont.open(fontDefinition) dapat mengembalikan objekcom.aspose.font.Fontyang terpadu.
Bagaimana cara memuat font menggunakan java.io.File?
Cara paling sederhana untuk memuat font yang tersimpan di drive disk lokal menggunakan FontFileDefinition(File file).
import com.aspose.font.*;
import java.io.File;
import java.nio.file.Paths;
public class LoadFontFromFile {
public static void main(String[] args) {
// Step 1: Define path to font file
String fontPath = Paths.get("data", "Montserrat-Regular.ttf").toString();
// Step 2: Create FontFileDefinition from java.io.File
FontFileDefinition fileDef = new FontFileDefinition(new File(fontPath));
// Step 3: Create FontDefinition (extension is auto-detected from FontFileDefinition)
FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
// Step 4: Open and load font instance
Font font = Font.open(fontDef);
System.out.println("Successfully loaded font: " + font.getFontName());
}
}Bagaimana cara memuat font menggunakan FileSystemStreamSource?
Menyediakan penanganan ekstensi file secara eksplisit untuk mendeteksi format secara akurat saat memuat font dari jalur disk.
import com.aspose.font.*;
import java.nio.file.Paths;
public class LoadFontFromStreamSource {
public static void main(String[] args) {
String fontPath = Paths.get("data", "Montserrat-Regular.ttf").toString();
// Pass 'ttf' explicitly to ensure proper format mapping
FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(fontPath));
FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
Font font = Font.open(fontDef);
System.out.println("Loaded Font Name: " + font.getFontName());
}
}Bagaimana cara memuat font dari sumber stream langsung (tanpa FontFileDefinition)?
Teruskan FileSystemStreamSource langsung ke FontDefinition untuk menyederhanakan proses pemuatan.
import com.aspose.font.*;
import java.nio.file.Paths;
public class LoadFontDirectStream {
public static void main(String[] args) {
String fontPath = Paths.get("data", "Montserrat-Regular.ttf").toString();
// Provide FontType, file extension, and StreamSource directly
FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new FileSystemStreamSource(fontPath));
Font font = Font.open(fontDef);
System.out.println("Loaded Font Name: " + font.getFontName());
}
}Bagaimana cara memuat font dari array byte dalam memori (byte[])?
Ideal untuk memuat font yang diambil dari database, permintaan jaringan, penyimpanan cloud, atau aset PDF/DOCX yang disematkan menggunakan ByteContentStreamSource.
import com.aspose.font.*;
import java.nio.file.Files;
import java.nio.file.Paths;
public class LoadFontFromByteArray {
public static void main(String[] args) throws Exception {
String fontPath = Paths.get("data", "Montserrat-Regular.ttf").toString();
// Read font binary data into byte array
byte[] fontBytes = Files.readAllBytes(Paths.get(fontPath));
// Initialize FontDefinition with ByteContentStreamSource
FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new ByteContentStreamSource(fontBytes));
// Open font from memory
Font font = Font.open(fontDef);
System.out.println("Loaded Font from Memory: " + font.getFontName());
}
}Instalasi dan Penyiapan
Sertakan Aspose.Font untuk Java dalam proyek Anda melalui Maven.
Package Manager Console Command
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-font</artifactId>
<version>Latest</version>
</dependency>
Pertanyaan Umum
1. Mengapa saya harus meneruskan FontType dan fileExtension saat memuat font?
FontType mewakili keluarga format secara keseluruhan (misalnya, FontType.TTF), tetapi beberapa format file yang berbeda termasuk dalam keluarga tersebut (seperti .ttf, .eot, dan .ttc). Menentukan fileExtension memastikan bahwa pustaka menggunakan parser yang tepat untuk format container tertentu.
2. Bisakah saya memuat font langsung dari bidang BLOB dalam database?
Ya. Ambil data BLOB sebagai array byte[] dan gunakan ByteContentStreamSource untuk menginisialisasi FontDefinition tanpa menulis data ke disk.
3. Bagaimana cara memuat font ketika data biner dimulai pada offset tertentu di dalam file?
Gunakan konstruktor FontFileDefinition(String fileExtension, StreamSource streamSource, long offset), dengan meneruskan offset byte tempat data font dimulai.