Fonts für das Rendern von Tabellenkalkulationen mit C++ konfigurieren
Mögliche Verwendungsszenarien
Die Aspose.Cells-APIs ermöglichen das Rendern von Tabellenkalkulationen in Bildformaten sowie die Umwandlung in PDF- und XPS-Formate. Damit die Konvertierungsqualität maximiert wird, müssen die in der Tabelle verwendeten Fonts im Standard-Font-Verzeichnis des Betriebssystems vorhanden sein. Wenn die benötigten Fonts nicht vorhanden sind, versucht die Aspose.Cells-API, die erforderlichen Fonts durch verfügbare zu ersetzen.
Auswahl von Schriftarten
Unten ist der Prozess, den die Aspose.Cells-APIs im Hintergrund durchführen:
- Die API versucht, die Schriftarten im Dateisystem zu finden, die dem exakten Schriftartnamen entsprechen, der in der Tabelle verwendet wird.
- Wenn die API die Fonts mit genau demselben Namen nicht finden kann, versucht sie, die Standardschriftart gemäß der DefaultStyle.Font-Eigenschaft der Arbeitsmappe zu verwenden.
- Wenn die API die in der Arbeitsmappe definierte Schriftart unter DefaultStyle.Font nicht finden kann, versucht sie, die Schriftart gemäß der PdfSaveOptions.PaginatedSaveOptions(PaginatedSaveOptions_Impl impl)* oder ImageOrPrintOptions.DefaultFont-Eigenschaft zu verwenden.
- Wenn die API die Schriftart unter PdfSaveOptions.PaginatedSaveOptions(PaginatedSaveOptions_Impl impl)* oder ImageOrPrintOptions.DefaultFont nicht finden kann, versucht sie, die Schriftart unter FontConfigs.DefaultFontName festzulegen.
- Wenn die API die Schriftart unter FontConfigs.DefaultFontName nicht finden kann, versucht sie, die am besten geeignete Schriftart aus allen verfügbaren Schriftarten auszuwählen.
- Schließlich, wenn die API keine Schriftarten auf dem System findet, rendert sie die Tabelle mit Arial.
Benutzerdefinierte Schriftartordner einstellen
Die Aspose.Cells-APIs durchsuchen das Standard-Schriftartenverzeichnis des Betriebssystems nach den benötigten Fonts. Wenn die benötigten Fonts im Systemfont-Verzeichnis nicht vorhanden sind, durchsuchen die APIs benutzerdefinierte (benutzerdefinierte) Verzeichnisse. Die Klasse FontConfigs bietet mehrere Möglichkeiten, benutzerdefinierte Schriftartenverzeichnisse festzulegen, wie unten beschrieben:
- FontConfigs.SetFontFolder: Diese Methode ist nützlich, wenn nur ein Ordner festgelegt werden soll.
- FontConfigs.SetFontFolders: Diese Methode ist nützlich, wenn die Fonts in mehreren Ordnern liegen und der Benutzer alle Ordner separat festlegen möchte, anstatt alle Fonts in einem einzigen Ordner zu kombinieren.
- FontConfigs.SetFontSources: Dieser Mechanismus ist nützlich, wenn der Benutzer Schriftarten aus mehreren Ordnern, einer einzigen Schriftartdatei oder Schriftartdaten aus einem Byte-Array laden möchte.
#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();
}
Schriftarten-Ersatzmechanismus
Aspose.Cells APIs bieten auch die Möglichkeit, Ersatzschriftarten für Darstellungszwecke anzugeben. Dieser Mechanismus ist hilfreich, wenn die benötigte Schriftart auf dem Computer, auf dem die Konvertierung erfolgt, nicht verfügbar ist. Benutzer können eine Liste von Schriftartnamen als Alternative zur ursprünglich benötigten Schriftart bereitstellen. Um dies zu erreichen, haben die Aspose.Cells APIs die FontConfigs.SetFontSubstitutes Methode freigegeben, die zwei Parameter akzeptiert. Der erste Parameter ist vom Typ string und sollte der Name der zu ersetzenden Schriftart sein. Der zweite Parameter ist ein Array vom Typ string. Benutzer können eine Liste von Schriftartnamen als Ersatz für den ursprünglichen Schriftartnamen (im ersten Parameter angegeben) angeben.
Hier ist ein einfaches Verwendungsszenario:
#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();
}
Informationssammlung
Neben den oben genannten Methoden bieten die Aspose.Cells APIs auch Möglichkeiten, Informationen darüber zu sammeln, welche Quellen und Ersetzungen festgelegt wurden:
- Die FontConfigs.GetFontSources-Methode gibt ein Array vom Typ FontSourceBase zurück, das die Liste der angegebenen Schriftquellen enthält. Wenn keine Quellen festgelegt wurden, gibt die FontConfigs.GetFontSources-Methode ein leeres Array zurück.
- Die FontConfigs.GetFontSubstitutes-Methode akzeptiert einen Parameter vom Typ string, mit dem Sie den Schriftartnamen angeben können, für den eine Ersetzung festgelegt wurde. Wenn für den angegebenen Schriftartnamen keine Ersetzung festgelegt wurde, gibt die FontConfigs.GetFontSubstitutes-Methode null zurück.