Come caricare i caratteri? | Soluzione API per C ++

Panoramica

Per rispondere alla domanda, come caricare i caratteri, prima dobbiamo apprendere che qualsiasi carattere è fisicamente una serie di byte in cui i dati sono rappresentati in un formato. Pertanto, per il caricamento del carattere corretto è necessario conoscere due parametri chiave:

Oggetti e parametri richiesti per il caricamento del carattere

Aspose.Font per C ++ fornisce oggetto FontDefiniton per avvisare due parametri chiave richiesti per il caricamento del carattere.

Dopo aver creato e avviato FontDefiniton Oggetto, devi solo chiamare il metodo statico Aspose.Font.Font.Open() e passare oggetto appena inizializzato FontDefiniton come parametro per caricare il carattere desiderato e ottenere un riferimento su di esso.

Descriviamolo con lo pseudocodice:

1using Aspose::Font;
2    ...
3
4    // Initialize object FontDefinition with appropriate properties
5    System::SharedPtr<FontDefinition> fontDef = System::MakeObject<FontDefinition>();
6    System::SharedPtr<Font> desiredFont = Aspose::Font::Font::Open(fd);

Il risultato finale del caricamento del carattere sta ottenendo un tipo di tipo Aspose.Font.Font. Class Aspose.Font.Font è una classe di carattere di base di Aspose.Font per la libreria C ++. Rappresenta la principale funzionalità del lavoro con i caratteri.

Essere caricato un carattere in Aspose.Font.Font Digitare oggetto che sarai in grado di rendere il testo con questo carattere, ottenere dati di codifica e metriche di carattere. Sarai anche in grado di modificare o salvare questo carattere e molti altri.

Per avviare l’oggetto FontDefiniton dobbiamo fornire FontDefinition() 2 parametri di font, - il tipo di formato e l’oggetto che descrive l’archiviazione per i dati binari del carattere. Il primo parametro viene avvisato con enumerazione FontType.

Per semplificare il lavoro con il secondo parametro, Aspose.Font offre una serie di oggetti che danno accesso universale ai dati binari del carattere indipendentemente da dove viene posizionato il carattere.

Questo accesso universale è collegato a una cosa come un flusso di byte. Quindi, indipendentemente da dove viene inserito il carattere - in un file su un disco, all’interno di un altro file, array di byte in memoria - in ogni caso, gli oggetti speciali Aspose.Font forniranno un accesso al flusso di byte, relativi al carattere desiderato.

Descriviamo questi oggetti:

  1. StreamSource classe. Questa classe di base astratta definisce le proprietà e i metodi che danno accesso al flusso di byte di carattere. GetFontstream() di questa classe restituisce un flusso, relativo ai dati del carattere binario. Proprietà offset punti sulla posizione in questo flusso, da dove dobbiamo iniziare a leggere i dati.

  2. Due classi più usate ereditate dalla base StreamSource:

Come iniziare le lezioni?

Ecco esempi dell’iniziazione di queste classi. 1.Supponiamo che il carattere sia nel file chiamato lora.ttf. In questo caso, per ottenere l’accesso al flusso di byte di questo carattere dobbiamo creare l’oggetto di tipo FilesystemStreamSource usando questo singolo costruttore:

1    System::SharedPtr<FileSystemStreamSource> fontSource = System::MakeObject<FileSystemStreamSource>("Lora.ttf");
  1. Se i dati binari del carattere si trovano in un array binario definito dalla variabile Fontarray byte [], allora un oggetto di tipo ByteContentStreamSource fornirà un accesso al flusso di dati del carattere, in base alla variabile Fontarray. Per ottenere l’accesso al flusso di byte di carattere, dobbiamo creare un oggetto di tipo ByteContentStreamSource per ottenere l’accesso al flusso, relativo all’array di byte di carattere usando codice come questo:
1    System::SharedPtr<ByteContentStreamSource> fontSource = System::MakeObject<ByteContentStreamSource>(fontArray);

Pertanto, per fornire l’accesso ai dati binari del carattere, utilizzare gli oggetti ereditati dalla classe Base StreamSource. Inoltre, chiameremo tali oggetti Font Stream Sources.

Oggetto FontFileDefinition

La maggior parte dei fronti si trova in file normali ma allo stesso tempo, parte dei caratteri può avere origini di dati diverse. Per unirsi a un oggetto Termini File e Font Binary Stream, Aspose.Font Library fornisce oggetto speciale FontFileDefinition.

Questo oggetto ha tali proprietà:

Il più semplice e uno dei costruttori più utilizzati di questo oggetto è il costruttore con la seguente firma: FontFileDefinition (System::SharedPtr System::IO::FileInfo fontFile), usa questo costruttore per i casi in cui il font desiderato è in un file sul rigido disco.

Ecco un esempio di avvio di tale oggetto per il carattere Montserrat che si trova nel file C:\Windows\Fonts\Montserrat.ttf:

1    System::SharedPtr<FontFileDefinition> fileDef = System::MakeObject<FontFileDefinition>(System::MakeObject<System::IO::FileInfo>(u"C:\\Windows\\Fonts\\Montserrat.ttf"));

Inoltre, fontFileDefinition può fare riferimento al carattere Montserrat usando i seguenti costruttori:

1    System::SharedPtr<FontFileDefinition> fileDef = System::MakeObject<FontFileDefinition>(System::MakeObject<FileSystemStreamSource>(u"C:\\Windows\\Fonts\\Montserrat.ttf"));
2
3    System::SharedPtr<FontFileDefinition> fileDef = System::MakeObject<FontFileDefinition>(u"ttf", System::MakeObject<FileSystemStreamSource>(u"C:\\Windows\\Fonts\\Montserrat.ttf"));

Il parametro fileExtension deve corrispondere all’estensione standard per il formato del font. Ad esempio, se il formato del font è TrueType, il valore del parametro fileExtension può essere ttf o ttc (se il file del font è una raccolta di font TrueType). Se il formato del font è Embedded Open Type, il valore del parametro fileExtension deve essere eot.

La tabella seguente mostra la più spesso utilizzata in Aspose.Font per i formati di file di carattere C ++. Ci sono con i valori di corrispondenza che dovrebbe assumere il parametro fileextension.

Formato file fontEstensionefile
TrueType, font singolottf
Raccolta di font TrueType`ttc
Web Open Font Formatwoff
Web Open Font Format versione 2.0woff2
Embedded OpenTypeeot
Font Adobe Type 1pfa, pfb, afm, pfm
Compact Font Formatcff, può essere nullo

Se i dati del carattere non iniziano dalla posizione 0 del flusso di byte, utilizzare il seguente costruttore con il parametro offset:

1    FontFileDefinition(System::String fileExtension, System::SharedPtr<Aspose::Font::Sources::StreamSource> streamSource, int64_t offset).

Come avviare l’oggetto FontDefinition?

Ora, quando hai un’idea degli oggetti ereditati dalla classe StreamSource e fornendo accesso al flusso di byte di carattere, e dell’oggetto fontfiledefinition, ti spiegheremo come avviare FontDefiniton oggetto con questi oggetti correttamente per le diverse situazioni.

FontDefiniton L’oggetto fornisce molti costruttori sovraccarichi. La caratteristica comune di tutti i costruttori esistenti è il parametro FontType. Descrive il tipo di formato carattere.

Come accennato in precedenza, a parte il valore FontType, oggetto FontDefiniton dovrebbe essere inizializzato con riferimento ai dati binari del carattere.

I parametri successivi dei costruttori FontDefiniton possono essere utilizzati in questo caso:

Potresti avere una domanda. Perché dovremmo passare il parametro fileextension al FontDefiniton o l’oggetto fontfiledefinition, quando passiamo sempre il parametro FontType che sembra con coincidenza con il suo valore con fileetensions? Il problema è che FontType non coincide sempre con il valore di fileextension. Fontttype definisce il formato di carattere comune ma non il formato di carattere di un file specifico. Alcuni caratteri di un formato possono avere diversi formati di file.

Ad esempio, il valore FontType.TTF definisce il formato TrueType. Ma allo stesso tempo TrueType include alcuni formati di font e contiene file di font con estensioni ttf, eot, ttc, ecc. E se, ad esempio, per il font in formato EOT passiamo a FontDefiniton solo il valore FontType.TTF, come farà questo oggetto a capire che il font appartiene al formato EOT e non a TTF?

Allo stesso modo, il valore del fontttype.Type1 è la definizione comune per i caratteri di questo formato. Allo stesso tempo, i file di caratteri in formato type1 hanno estensioni .pfa, .pfb, .afm, .pfm. Quindi non è possibile definire il formato del file di carattere correttamente basandosi solo sul valore fonte.type1. Quindi, per definire correttamente il formato del carattere dobbiamo specificare il parametro FontType con il valore del parametro fileextension.

Di seguito puoi imparare esempi di FontDefiniton Inizializzazione dell’oggetto e seguendo il caricamento del carattere per diversi casi.

In tutti i casi il risultato del caricamento del carattere finale viene inserito nella variabile di tipo Aspose.Font.Font. Questo tipo è la classe di caratteri di base di Aspose.Font Documentation e oggetti di questo tipo forniscono funzionalità di base comuni per funzionare con i caratteri.

Caricamento del carattere in questo oggetto sarai in grado di rendere il testo con questo carattere, ottenere informazioni di codifica, metriche di carattere, ecc.

Esempi di come caricare i caratteri

Facciamo come esempio, caricando il carattere montserrat dal file C:\Windows\Fonts\Montserrat.ttf

Aggiungi gli spazi dei nomi successivi alla testa del file:

1using Aspose::Font;
2using Aspose::Font::Sources;
3using System::IO;

È possibile caricare questo carattere usando FontDefiniton e fontFileDefinition oggetti in diversi modi:

Caricamento con l’aiuto di System::IO::FileInfo Oggetto

Per soddisfare il caricamento fai il prossimo:

  1. Costruisci percorso al file.
  2. Inizia FontDefiniton Passando ttf as FontType valore.
  3. Ottenere valore calcolato automaticamente fileextension.
  4. Carica il carattere.
 1    // Construct path to the file
 2    System::String fontPath = u"C:\\Windows\\Fonts\\Montserrat.ttf";
 3
 4    // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
 5    System::SharedPtr<FontFileDefinition> fileDef = System::MakeObject<FontFileDefinition>(System::MakeObject<System::IO::FileInfo>(fontPath));
 6
 7    // Based on FileInfo object, fileExtension value is calculated automatically from FileInfo fields.
 8    System::SharedPtr<FontDefinition> fontDef = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, fileDef);
 9	
10    // Load font
11    System::SharedPtr<Font> font = Font::Open(fontDef);

Caricamento con l’aiuto di FilesystemStreamSource Type Object

Prendi i passaggi successivi per eseguire l’operazione:

  1. Costruisci percorso al file.
  2. Inizia FontDefiniton.
  3. Imposta fileextension su ttf.
  4. Carica il carattere.
 1    // Construct path to the file
 2    System::String fontPath = u"C:\\Windows\\Fonts\\Montserrat.ttf";
 3
 4    // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
 5    System::SharedPtr<FontFileDefinition> fileDef = System::MakeObject<FontFileDefinition>(u"ttf", System::MakeObject<FileSystemStreamSource>(fontPath));
 6
 7    // Based on FileSystemStreamSource object, set fileExtension to "ttf"
 8    System::SharedPtr<FontDefinition> fontDef = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, fileDef);
 9		
10    // Load font   
11    System::SharedPtr<Font> font = Font::Open(fontDef);

Caricamento del carattere senza obiettivo FontFileDefinition, con il passaggio di FileSystemStreamSource direttamente a FontDefinition

Le prossime azioni devono essere intraprese per caricare il carattere in questo modo:

  1. Costruisci percorso al file.
  2. Avvia l’oggetto FontDefiniton passando TTF come valore FontType, ttf come valore fileExtension e l’oggetto FileSystemStreamSource. Il parametro fileExtension qui non è un valore duplicato per il parametro FontType.
  3. Carica il carattere.
 1    // Construct path to the file
 2    System::String fontPath = u"C:\\Windows\\Fonts\\Montserrat.ttf";
 3
 4    // Initialize FontDefinition object passing TTF as FontType value, "ttf" as fileExtension value, 
 5    // and FileSystemStreamSource object. Parameter 'fileExtension' here is not duplicate value 
 6    // for parameter 'FontType' and it's needed for correct font format detection
 7    System::SharedPtr<FontDefinition> fontDef = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, u"ttf", System::MakeObject<FileSystemStreamSource>(fontPath));
 8
 9    // Load font	
10    System::SharedPtr<Font> font = Font::Open(fontDef);

Caricamento del carattere con la variabile Byte [] Digita e con l’utilizzo di ByTeContentstreamSource

Per caricare un carattere dall’array di byte è necessario:

  1. Costruisci percorso al file.
  2. Carica i dati binari del carattere nell’array di byte
  3. Inizializza FontDefiniton Passando ``
  4. Carica il carattere.
 1    // Construct path to the file
 2    System::String fontPath = u"C:\\Windows\\Fonts\\Montserrat.ttf";
 3
 4    // Load font binary data into byte array
 5    System::ArrayPtr<uint8_t> fontBytes;
 6
 7    // Initialize FontDefinition object  passing TTF as FontType value, "ttf" as fileExtension value, 
 8    // and ByteContentStreamSource object based on fontBytes array
 9    System::SharedPtr<FontDefinition> fontDef = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, u"ttf", System::MakeObject<ByteContentStreamSource>(fontBytes));
10	
11    // Load font	
12    System::SharedPtr<Font> font = Font::Open(fontDef);

Per ottenere ulteriori esempi di utilizzo di Aspose.Font, vai su aspose.font.examples.cpp.sln Solution, nell’example CPP-Examples della asposa.font documentazione.

In caso di problemi o domande, puoi pubblicarli nella sezione Aspose.Font.Product del Forum di supporto libero e in poche ore il nostro team di supporto chiarirà tutto per te.

Have any questions about Aspose.Font?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.