フォント設定によるスプレッドシートのレンダリング(C++)
可能な使用シナリオ
Aspose.CellsのAPIは、スプレッドシートを画像形式にレンダリングしたり、PDFやXPSに変換したりする機能を提供します。変換精度を最大化するためには、スプレッドシートで使用されるフォントがオペレーティングシステムのデフォルトフォントディレクトリに存在する必要があります。必要なフォントが存在しない場合、Aspose.Cellsは利用可能なフォントで置き換えを試みます。
フォントの選択
以下は、Aspose.Cells APIが裏で実行するプロセスです:
- API は、スプレッドシートで使用されている正確なフォント名と一致するフォントをファイルシステムで検索しようとします。
- APIが正確な名前のフォントを見つけられない場合、WorkbookのDefaultStyle.Fontプロパティで指定された既定のフォントを使用しようとします。
- APIがWorkbookのDefaultStyle.Fontプロパティで定義されたフォントを見つけられない場合、PdfSaveOptions.PaginatedSaveOptions(PaginatedSaveOptions_Impl impl)*またはImageOrPrintOptions.DefaultFontプロパティで指定されたフォントを使用しようとします。
- APIがPdfSaveOptions.PaginatedSaveOptions(PaginatedSaveOptions_Impl impl)*またはImageOrPrintOptions.DefaultFontプロパティで定義されたフォントを見つけられない場合、FontConfigs.DefaultFontNameプロパティで指定されたフォントを使用しようとします。
- FontConfigs.DefaultFontNameプロパティで定義されたフォントを見つけられない場合、利用可能なすべてのフォントから最も適したフォントを選択しようとします。
- 最終的に、APIがファイルシステム上のフォントを見つけられない場合、スプレッドシートをArialを使用してレンダリングします。
カスタムフォントフォルダの設定
Aspose.Cells APIは、必要なフォントをオペレーティングシステムの既定のフォントディレクトリから検索します。必要なフォントがシステムのフォントディレクトリにない場合、APIはカスタム(ユーザー定義)ディレクトリを検索します。FontConfigsクラスは、以下の詳細な方法でカスタムフォントディレクトリを設定する手段を提供します:
1.FontConfigs.SetFontFolder: このメソッドは1つのフォルダだけを設定する場合に有用です。
- FontConfigs.SetFontFolders:この方法は、複数のフォルダにフォントが存在し、すべてのフォルダを個別に設定したい場合に便利です。
- FontConfigs.SetFontSources:この仕組みは、複数のフォルダ、単一のフォントファイル、またはバイト配列からフォントデータをロードしたい場合に役立ちます。
#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();
}
フォントの代替メカニズム
Aspose.Cells APIはまた、レンダリング目的の代替フォントを指定する機能も提供しています。この仕組みは、変換を行うマシンに必要なフォントがない場合に役立ちます。ユーザーは、必要なフォント名のリストを代替フォントとして提供できます。このために、Aspose.Cells APIはFontConfigs.SetFontSubstitutesメソッドを公開しており、2つのパラメータを受け取ります。最初のパラメータはstring型で、置換が必要なフォント名を指定します。2つ目のパラメータはstring型の配列で、元のフォント名(最初のパラメータに指定)に代わるフォント名のリストを提供できます。
簡単な使用例はこちら:
#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();
}
情報収集
上記の方法に加え、Aspose.Cells APIは設定されたフォントの情報や代替設定を収集する手段も提供しています:
- FontConfigs.GetFontSourcesメソッドは、指定されたフォントソースのリストを含むFontSourceBase型の配列を返します。フォントソースが設定されていない場合、FontConfigs.GetFontSourcesメソッドは空の配列を返します。
- FontConfigs.GetFontSubstitutesメソッドは、置換設定がされたフォント名を指定できるstring型のパラメータを受け取ります。指定したフォント名に対する置換設定がない場合、FontConfigs.GetFontSubstitutesメソッドはnullを返します。