processFonts method
void
processFonts(
- List<
FontDetails> fontDetails, - ArchiveFile fontTableFile,
- ArchiveFile fontTableRelsFile
Function for processing custom fonts
Implementation
void processFonts(List<FontDetails> fontDetails, ArchiveFile fontTableFile, ArchiveFile fontTableRelsFile) {
final fileContent = utf8.decode(fontTableFile.content);
final fontTableDoc = xml.XmlDocument.parse(fileContent);
final fonts = fontTableDoc.findAllElements("w:font");
if (fonts.isNotEmpty) {
Map<String, Map<String, String>> tempFontMap = {};
for (var font in fonts) {
Map<String, String> tempFontDetails = {};
var fontName = font.getAttribute("w:name");
if (fontName != null) {
var embedReg = font.findAllElements("w:embedRegular");
if (embedReg.isNotEmpty) {
var embedRegRid = embedReg.first.getAttribute("r:id");
if (embedRegRid != null) {
tempFontDetails["embedReg"] = embedRegRid;
}
var fontKey = embedReg.first.getAttribute("w:fontKey");
if (fontKey != null) {
tempFontDetails["fontKey"] = fontKey;
}
}
if (tempFontDetails.isNotEmpty) {
tempFontMap[fontName] = tempFontDetails;
}
}
}
final relFileContent = utf8.decode(fontTableRelsFile.content);
final fontTableRelDoc = xml.XmlDocument.parse(relFileContent);
final relationsships = fontTableRelDoc.findAllElements("Relationship");
if (relationsships.isNotEmpty) {
Map<String, String> relDetails = {};
for (var rel in relationsships) {
var relId = rel.getAttribute("Id");
if (relId != null) {
var target = rel.getAttribute("Target");
if (target != null) {
relDetails[relId] = target;
}
}
}
tempFontMap.forEach((key, value) {
String fileName = "";
String fontKey = "";
value.forEach((key2, value2) {
if (key2 == "embedReg") {
var tempFileName = relDetails[value2];
if (tempFileName != null) {
fileName = tempFileName;
}
} else {
fontKey = value2;
}
});
fontDetails.add(FontDetails(key, fileName, fontKey));
});
}
}
}