Overzicht
Veel documentformaten zijn nauw verbonden met lettertypen. Bijvoorbeeld, wanneer een gebruiker tekst toevoegt aan een DOCX‑document, heeft die tekst altijd een gedefinieerd lettertype. Sommige documentformaten slaan de lettertype‑gegevens gewoonlijk ingebed op in het documentbestand zelf, zoals PDF. Andere, zoals de Office‑familieformaten, vertrouwen meestal op de lettertypen die op het besturingssysteem zijn geïnstalleerd.
Er bestaan ook talloze lettertype‑formaten. Bijvoorbeeld, de meeste geïnstalleerde lettertypen worden aangeboden in TTF (TrueType) en OTF (OpenType) formaten. Office Open XML‑documenten werken ook met het EOT (Embedded OpenType) formaat. Op het web zijn echter WOFF en WOFF2 de meest gebruikte formaten.
Inhoudsopgave
- Overzicht
- Alle gebruikte lettertypen ophalen
- De ontbrekende lettertypen verwerken
- Ontbrekend lettertype specificeren
- Het ontbrekende lettertype vervangen
- Lettertypen uitsluiten voor HTML
- Conclusie
- Zie ook
- Gratis proefversie downloaden
Alle gebruikte lettertypen ophalen
De meest bruikbare functionaliteit in het kader van lettertypen is ze te vermelden en terug te geven. GroupDocs.Viewer biedt een speciale methode GetAllFonts() — wanneer het document is geladen in een instantie van de Viewer‑klasse, roep je deze methode aan om een lijst van alle lettertypen te verkrijgen die in dit document worden gebruikt. In de geretourneerde lijst wordt elk lettertype gepresenteerd als een instantie van een type dat een IFontInfo interface implementeert. Deze interface bevat gemeenschappelijke eigenschappen voor elk mogelijk lettertype: een familienaam, stijl, formaat en binaire inhoud.
Specifieke families van formaten, zoals WordProcessing, Spreadsheet, Presentation en PDF, hebben gespecialiseerde implementaties van de IFontInfo; deze implementaties bieden meer gegevens die specifiek zijn voor de betreffende formatenfamily. Bijvoorbeeld, de typen WordProcessingFontInfo, PresentationFontInfo en PdfFontInfo bevatten de booleaanse eigenschap IsEmbedded — een vlag die aangeeft waar dit lettertype is opgeslagen (is het ingebed in de geladen document‑body of geïnstalleerd in het OS). Het type SpreadsheetFontInfo bevat veel Spreadsheet‑specifieke lettertype‑gegevens: de kleur, of het onderstreept of doorgestreept is. WordProcessingFontInfo kan een alternatieve familienaam bevatten. En zo verder.
Een kort voorbeeld staat hieronder:
using GroupDocs.Viewer;
// ...
const string filename = "sample.docx";
string inputPath = "\full\path\" + filename;
using (Viewer viewer = new Viewer(inputPath))
{
Fonts.IFontInfo[] allFonts = viewer.GetAllFonts();
Console.WriteLine("{0} fonts found in the '{1}' document", allFonts.Length, filename);
foreach (Fonts.IFontInfo font in allFonts)
{
Console.WriteLine("Font '{0}' of '{1}' style has {2} bytes and is of '{3}' format",
font.FamilyName,
font.Style,
font.Content.Length,
font.Format);
}
}
Houd er rekening mee dat lettertype‑extractie alleen wordt ondersteund voor de WordProcessing-, Spreadsheet-, Presentation- en PDF‑families van formaten; voor alle andere documentformaten geeft de methode GetAllFonts() een lege array terug.
De ontbrekende lettertypen verwerken
De situatie waarin een document op de machine van de auteur is aangemaakt en een lettertype “AAA” gebruikt, en vervolgens wordt verwerkt met GroupDocs.Viewer op de machine van een klant waar lettertype “AAA” ontbreekt, is typisch. In zo’n geval probeert GroupDocs.Viewer dit lettertype te substitueren met behulp van gecompliceerde substitutieregels: het analyseert de metadata van het document, alternatieve namen van het ontbrekende lettertype, instellingen van het document, instellingen van het OS, de lijst van alle beschikbare lettertypen die in het OS zijn geïnstalleerd, enzovoort. Uiteindelijk, wanneer om welke reden dan ook het OS “schoon” is en geen enkel geïnstalleerd lettertype bevat, zal GroupDocs.Viewer het ontbrekende lettertype substitueren met het lettertype dat ingebed zit in de GroupDocs.Viewer‑assembly (DLL); dit lettertype fungeert als een “laatste redmiddel” voor het geval er geen andere lettertypen beschikbaar zijn. Bijvoorbeeld, voor de WordProcessing‑familieformaat slaat GroupDocs.Viewer intern het gratis lettertype “Fanwood” op.
Op dit moment voert GroupDocs.Viewer de lettertype‑substitutie stills uit tijdens het renderen van het document (wanneer de methode Viewer.View() wordt aangeroepen) — er verschijnen geen berichten of events wanneer het substitutiemechanisme wordt geactiveerd, welk lettertype ontbreekt en waarmee het wordt vervangen, en voor welk exact document. Deze functionaliteit is moeilijk te implementeren omdat het onduidelijk, vaag en ambigu is welke vorm van notificatie moet worden uitgegeven en hoe deze aan de client‑kant kan worden benut.
GroupDocs.Viewer biedt echter twee mogelijke manieren om zo’n situatie op te lossen: handmatig het ontbrekende lettertype specificeren en handmatig het ontbrekende lettertype substitueren.
Ontbrekend lettertype specificeren
Wanneer de gebruiker aanvankelijk weet dat een document lettertype “AAA” gebruikt, en tevens weet dat dit lettertype “AAA” niet geïnstalleerd is op de doelmachine waar het document moet worden gerenderd, en de gebruiker beschikt over de binaire inhoud van dit lettertype “AAA”, kan hij het voor het aanroepen van de methode Viewer.View() specificeren.
Om één of meerdere aangepaste lettertypen, die niet in het doel‑OS zijn geïnstalleerd, te specificeren, moet de gebruiker aangepaste lettertype‑bronnen toevoegen. Een lettertype‑bron is feitelijk een map waarin één of meerdere lettertypen zich bevinden. Deze wordt gerepresenteerd door de klasse FolderFontSource. De klasse FontSettings biedt de methode SetFontSources() om lettertype‑bronnen aan GroupDocs.Viewer toe te voegen.
De volgende code‑snippet demonstreert dit. Stel dat het document “sample.docx” een zeldzaam lettertype “AAA.ttf” gebruikt dat niet op het doel‑OS is geïnstalleerd. De gebruiker plaatst het bestand “AAA.ttf” in de map "C:\custom_fonts" en maakt vervolgens een instantie van de klasse FolderFontSource die naar deze map verwijst. Deze instantie wordt doorgegeven aan de statische klasse FontSettings, waarna het bestand “sample.docx” wordt gerenderd naar HTML. Het resultaat is dat het “AAA”‑lettertype wordt gebruikt in het gegenereerde HTML‑document.
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
using GroupDocs.Viewer.Fonts;
// ...
// Specify the font source.
FolderFontSource fontSource =
new FolderFontSource(@"C:\custom_fonts", SearchOption.TopFolderOnly);
FontSettings.SetFontSources(fontSource);
using (Viewer viewer = new Viewer("sample.docx"))
{
// Create an HTML file.
HtmlViewOptions viewOptions = HtmlViewOptions.ForEmbeddedResources();
viewer.View(viewOptions);
}
Het ontbrekende lettertype vervangen
Wanneer de gebruiker aanvankelijk weet dat een document lettertype “AAA” gebruikt, en tevens weet dat dit lettertype “AAA” niet geïnstalleerd is op de doelmachine, maar geen toegang heeft tot de binaire inhoud van dit lettertype, kan hij een ander lettertype “BBB” opgeven dat in plaats van het ontbrekende “AAA” wordt gebruikt. In tegenstelling tot het vorige geval gebeurt dit via de weergave‑opties die vervolgens worden doorgegeven aan de methode Viewer.View().
Deze optie heet [DefaultFontName](https://reference.groupdocs.com/viewer/net/groupdocs.viewer.options/baseviewoptions/defaultfontname/) en is een eigenschap van het type string, gedeclareerd in de abstracte klasse BaseViewOptions. Hierdoor is ze gemeenschappelijk voor alle renderingsopties: HtmlViewOptions, PdfViewOptions, PngViewOptions en JpgViewOptions.
Wanneer deze optie wordt gespecificeerd, gebruikt GroupDocs.Viewer dit lettertype tijdens het renderen in plaats van niet‑beschikbare lettertypen. Bijvoorbeeld, als het document een lettertype bevat met niet‑Engelse tekens, stel dan de standaardlettertype‑naam in om ervoor te zorgen dat GroupDocs.Viewer elk ontbrekend lettertype vervangt door één met dezelfde tekenset. Uiteraard moet het lettertype dat in de eigenschap DefaultFontName wordt opgegeven geïnstalleerd zijn op het besturingssysteem waarop GroupDocs.Viewer het document rendert.
De volgende code‑snippet laat zien hoe de standaardlettertype‑naam wordt ingesteld:
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...
using (Viewer viewer = new Viewer("sample.pptx"))
{
// Create options for rendering HTML document with embedded resources
HtmlViewOptions viewOptions = HtmlViewOptions.ForEmbeddedResources();
// Specify a default font name is the options
viewOptions.DefaultFontName = "Courier New";
// Render input PPTX to output HTML
viewer.View(viewOptions);
}
Lettertypen uitsluiten voor HTML
Wanneer documenten naar het HTML‑formaat worden gerenderd, exporteert GroupDocs.Viewer standaard alle gebruikte lettertypen naar het HTML‑document. Dit garandeert een correcte weergave, ongeacht of de vereiste lettertypen op het kijkapparaat aanwezig zijn. Lettertypen kunnen in het resulterende HTML‑document worden opgeslagen als externe bronnen (HtmlViewOptions.ForExternalResources) of rechtstreeks in de HTML‑markup worden ingebed via het data‑URI‑schema met base64‑codering (HtmlViewOptions.ForEmbeddedResources). Het exporteren van lettertypen naar HTML wordt ondersteund door bijna alle documentformaten die zelf lettertypen ondersteunen: Microsoft Office (behalve Excel), OpenDocument‑formaten, e‑mails, PDF, e‑Books enzovoort.
Soms is deze functionaliteit echter ongewenst. Wanneer lettertypen worden opgenomen, neemt de grootte van het geproduceerde HTML‑document aanzienlijk toe. Als de doelmachine of het apparaat waarop het HTML‑document moet worden weergegeven alle gebruikte lettertypen al geïnstalleerd heeft, kan de browser deze systeem‑geïnstalleerde lettertypen gebruiken.
Om aan zulke eisen te voldoen, biedt GroupDocs.Viewer de mogelijkheid om lettertypen uit te sluiten van het geproduceerde HTML‑document. Dit kan op twee manieren worden gedaan: alle lettertypen uitsluiten en specifieke lettertypen uitsluiten.
Beide opties worden in de klasse HtmlViewOptions weergegeven als verschillende eigenschappen:
ExcludeFontsis een vlag die de export van alle gebruikte lettertypen naar het geproduceerde HTML‑document uitschakelt wanneer hij is ingeschakeld (true). Standaard is deze optie uitgeschakeld (false).FontsToExcludeis een lijst van strings, waarbij elke string één lettertype‑naam vertegenwoordigt die moet worden uitgesloten. Standaard is deze lijst leeg — er worden geen lettertypen uitgesloten. Let op: deze optie werkt alleen als de eigenschapExcludeFontsis uitgeschakeld (false).
Twee code‑snippets hieronder illustreren beide mogelijkheden: de eerste laat ExcludeFonts zien, de tweede FontsToExclude.
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...
using (Viewer viewer = new Viewer("sample.docx"))
{
// Create an HTML file.
var viewOptions = HtmlViewOptions.ForEmbeddedResources();
viewOptions.ExcludeFonts = true;
viewer.View(viewOptions);
}
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...
using (Viewer viewer = new Viewer("presentation.pptx"))
{
// Create an HTML file.
var viewOptions = HtmlViewOptions.ForEmbeddedResources();
viewOptions.FontsToExclude.Add("Times New Roman");// Exclude the Times New Roman font.
viewOptions.FontsToExclude.Add("Arial");// Exclude the Arial font.
viewer.View(viewOptions);
}
Conclusie
GroupDocs.Viewer richt zich primair op het renderen van documenten van verschillende formaten naar de algemeen gebruikte “viewable” formaten — HTML, PDF, JPEG en PNG. In de afgelopen periode hebben we echter verschillende handige functies toegevoegd op het gebied van lettertype‑verwerking die het mogelijk maken om gebruikte lettertypen te bekijken, hun export af te stemmen en lettertype‑substitutie aan te passen.
Zie ook
- Alle gebruikte lettertypen in het geladen document ophalen
- Aangepaste lettertypen instellen
- Ontbrekend lettertype vervangen
- Lettertypen uitsluiten bij renderen naar HTML
Gratis proefversie downloaden
Je kunt een gratis proefversie van GroupDocs.Viewer voor .NET downloaden via releases.groupdocs.com. Je kunt ook een tijdelijke licentie verkrijgen om alle functies en mogelijkheden zonder beperkingen uit te proberen via hier.