Configurare i caratteri per il rendering dei fogli di calcolo con C++

Possibili Scenari di Utilizzo

Le API di Aspose.Cells consentono di rendere i fogli di calcolo in formati immagine e di convertirli in PDF e XPS. Per massimizzare la fedeltà della conversione, è necessario che i caratteri usati nel foglio di calcolo siano disponibili nella directory dei font predefiniti del sistema operativo. Se i font richiesti non sono presenti, le API di Aspose.Cells tenteranno di sostituire i font richiesti con quelli disponibili.

Selezione dei font

Di seguito il processo seguito dalle API di Aspose.Cells:

  1. L’API cerca di trovare i font nel file system corrispondenti al nome esatto del font utilizzato nel foglio di calcolo.
  2. Se l’API non trova i font con lo stesso nome, tenta di usare il font di default specificato sotto la proprietà DefaultStyle.Font del Workbook.
  3. Se l’API non può trovare il font definito sotto la proprietà DefaultStyle.Font del workbook, tenta di usare il font specificato sotto PdfSaveOptions.PaginatedSaveOptions(PaginatedSaveOptions_Impl impl)* o la proprietà ImageOrPrintOptions.DefaultFont.
  4. Se l’API non può localizzare il font definito sotto la proprietà PdfSaveOptions.PaginatedSaveOptions(PaginatedSaveOptions_Impl impl)* o ImageOrPrintOptions.DefaultFont, tenta di utilizzare il font specificato sotto la proprietà FontConfigs.DefaultFontName.
  5. Se l’API non può localizzare il font definito sotto la proprietà FontConfigs.DefaultFontName, tenta di selezionare i font più adatti tra tutti quelli disponibili.
  6. Infine, se l’API non trova font sul sistema, renderizza il foglio di calcolo usando Arial.

Impostazione delle cartelle dei font personalizzate

Le API di Aspose.Cells cercano i font necessari nella directory dei font di default del sistema operativo. Se i font richiesti non sono disponibili nella directory di sistema, le API cercano tramite directory personalizzate (definite dall’utente). La classe FontConfigs offre vari modi per impostare directory di font personalizzate, come dettagliato di seguito:

  1. FontConfigs.SetFontFolder: Questo metodo è utile se c’è solo una cartella da impostare.
  2. FontConfigs.SetFontFolders: Questo metodo è utile quando i font risiedono in più cartelle, e l’utente desidera impostare tutte le cartelle separatamente invece di combinarle in una sola.
  3. FontConfigs.SetFontSources: Questo meccanismo è utile quando l’utente desidera caricare font da più cartelle, un singolo file font o dati di font da un array di byte.
#include <iostream>
#include <fstream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;

Vector<uint8_t> GetDataFromFile(const U16String& file)
{
    std::string f = file.ToUtf8();
    // open a file 
    std::ifstream fileStream(f, std::ios::binary);

    if (!fileStream.is_open()) {
        std::cerr << "Failed to open the file." << std::endl;
        return 1;
    }

    // Get file size
    fileStream.seekg(0, std::ios::end);
    std::streampos fileSize = fileStream.tellg();
    fileStream.seekg(0, std::ios::beg);

    // Read file contents into uint8_t array
    uint8_t* buffer = new uint8_t[fileSize];
    fileStream.read(reinterpret_cast<char*>(buffer), fileSize);
    fileStream.close();

    Vector<uint8_t>data(buffer, fileSize);
    delete[] buffer;

    return data;
}

int main()
{
    Aspose::Cells::Startup();

    U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
    U16String fontFolder1 = srcDir + u"Arial";
    U16String fontFolder2 = srcDir + u"Calibri";
    U16String fontFile = srcDir + u"arial.ttf";

    FontConfigs::SetFontFolder(fontFolder1, true);

    Vector<U16String> fontFolders{ fontFolder1 , fontFolder2 };

    FontConfigs::SetFontFolders(fontFolders, false);

    FolderFontSource sourceFolder(fontFolder1, false);
    FileFontSource sourceFile(fontFile);
    Vector<uint8_t> fontData = GetDataFromFile(fontFile);
    MemoryFontSource sourceMemory(fontData);

    Vector<FontSourceBase> fontSources{ sourceFolder ,sourceFile ,sourceMemory };

    FontConfigs::SetFontSources(fontSources);

    Aspose::Cells::Cleanup();
}

Meccanismo di sostituzione del font

Le API di Aspose.Cells offrono anche la possibilità di specificare font sostitutivi per scopi di rendering. Questo meccanismo è utile quando un font richiesto non è disponibile sulla macchina su cui deve avvenire la conversione. Gli utenti possono fornire un elenco di nomi di font come alternativa al font originariamente richiesto. Per farlo, le API di Aspose.Cells hanno esposto il metodo FontConfigs.SetFontSubstitutes, che accetta due parametri. Il primo parametro è di tipo string, che dovrebbe essere il nome del font da sostituire. Il secondo parametro è un array di tipo string. Gli utenti possono fornire una lista di nomi di font come sostituzione per il nome del font originale (specificato nel primo parametro).

Ecco uno scenario di utilizzo semplice:

#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;

int main()
{
    Aspose::Cells::Startup();

    // Substituting the Arial font with Times New Roman & Calibri
    Vector<U16String> substituteFonts{ u"Times New Roman", u"Calibri" };
    FontConfigs::SetFontSubstitutes(u"Arial", substituteFonts);

    Aspose::Cells::Cleanup();
}

Raccolta informazioni

Oltre ai metodi sopra menzionati, le API di Aspose.Cells forniscono anche mezzi per raccogliere informazioni sulle fonti e sostituzioni impostate:

  1. Il metodo FontConfigs.GetFontSources restituisce un array di tipo FontSourceBase contenente l’elenco delle fonti di font specificate. Se nessuna fonte è stata impostata, il metodo FontConfigs.GetFontSources restituirà un array vuoto.
  2. Il metodo FontConfigs.GetFontSubstitutes accetta un parametro di tipo string, consentendoti di specificare il nome del font per cui è stata impostata una sostituzione. Se non è stata impostata nessuna sostituzione per il nome del font specificato, il metodo FontConfigs.GetFontSubstitutes restituirà null.

Argomenti Avanzati