Přehled

Mnoho formátů dokumentů je úzce svázáno s písmy. Například když uživatel přidá nějaký text do dokumentu DOCX, tento text má vždy nějaké definované písmo. Některé formáty dokumentů obvykle ukládají data písma vložená přímo v souboru dokumentu, jako je PDF. Ostatní, například formáty rodiny Office, se obvykle spoléhají na písma nainstalovaná v operačním systému.

Existuje také spousta formátů písem. Například většina nainstalovaných písem je poskytována ve formátech TTF (TrueType) a OTF (OpenType). Dokumenty Office Open XML také pracují s formátem EOT (Embedded OpenType). Na webu jsou však nejčastěji používané formáty WOFF a WOFF2.

Obsah

Získání všech použitých písem

Nejužitečnější funkcí v kontextu písem je jejich výpis a vrácení. GroupDocs.Viewer poskytuje speciální metodu GetAllFonts() — po načtení dokumentu do instance třídy Viewer stačí tuto metodu zavolat a získáte seznam všech písem použitých v dokumentu. V vráceném seznamu je každé písmo představováno jako instance typu, který implementuje rozhraní IFontInfo. Toto rozhraní obsahuje společné vlastnosti pro každé možné písmo: název rodiny, styl, formát a binární obsah.

Specifické rodiny formátů, jako WordProcessing, Spreadsheet, Presentation a PDF, mají specializované implementace IFontInfo; tyto implementace poskytují další data, která jsou specifická pro konkrétní rodinu formátů. Například typy WordProcessingFontInfo, PresentationFontInfo a PdfFontInfo obsahují boolovskou vlastnost IsEmbedded — příznak, který ukazuje, kde je písmo uloženo (je vloženo v načteném těle dokumentu nebo je nainstalováno v OS). Typ SpreadsheetFontInfo obsahuje spoustu specifických informací pro tabulky: barvu, zda je podtržené nebo přeškrtnuté. WordProcessingFontInfo může obsahovat alternativní název rodiny. A tak dál.

Krátký příklad:

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);
    }
}

Všimněte si, že extrakce písem je podporována jen pro rodiny formátů WordProcessing, Spreadsheet, Presentation a PDF; pro všechny ostatní formáty dokumentů metoda GetAllFonts() vrací prázdné pole.

Zpracování chybějících písem

Situace, kdy byl dokument vytvořen na počítači autora a používá písmo „AAA“, a poté je zpracován pomocí GroupDocs.Viewer na počítači klienta, kde písmo „AAA“ chybí, je typická. V takovém případě se GroupDocs.Viewer pokusí nahradit toto písmo pomocí složitých pravidel substituce písem: analyzuje metadata dokumentu, alternativní názvy chybějícího písma, nastavení dokumentu, nastavení OS, seznam všech dostupných písem nainstalovaných v OS a tak dále. Nakonec, pokud je z nějakého důvodu OS „čistá“ a nemá nainstalována žádná písma, nahradí GroupDocs.Viewer chybějící písmo tím, které je vloženo přímo v sestavení GroupDocs.Viewer (DLL); toto písmo slouží jako „poslední možnost“, pokud nejsou k dispozici žádná jiná písma. Například pro rodinu formátů WordProcessing GroupDocs.Viewer interně ukládá volně dostupné písmo „Fanwood“.

V tuto chvíli provádí GroupDocs.Viewer substituci písem „tichým“ způsobem během vykreslování dokumentu (když je zavolána metoda Viewer.View()) — neobjevují se žádné zprávy ani události, které by informovaly o aktivaci mechanizmu substituce písem, které písmo chybí a kterým je nahrazeno, ani o konkrétním dokumentu. Takovou funkci je obtížné implementovat, protože není jasné, jaký typ oznámení by měl být vydán, v jaké formě a jak jej lze využít na straně klienta.

GroupDocs.Viewer však poskytuje uživatelům dva možné způsoby, jak tuto situaci řešit: ručně určit chybějící písmo a ručně nahradit chybějící písmo.

Určení chybějícího písma

Když uživatel zpočátku , že nějaký dokument používá písmo „AAA“, a také , že toto písmo „AAA“ není nainstalováno na cílovém počítači, kde má být dokument vykreslen, a uživatel má binární obsah tohoto písma „AAA“, může ho specifikovat před voláním metody Viewer.View().

Pro určení jednoho nebo více vlastních písem, která nejsou nainstalována v cílovém operačním systému, by měl uživatel přidat vlastní zdroj(e) písem. Zdroj písma je ve skutečnosti složka, ve které se nachází jedno nebo více písem. Je reprezentován třídou FolderFontSource. Třída FontSettings má metodu SetFontSources() pro přidání zdrojů písem do GroupDocs.Viewer.

Následující úryvek kódu to demonstruje. Předpokládejme, že dokument „sample.docx“ používá nějaké vzácné písmo „AAA.ttf“, které není nainstalováno v cílovém operačním systému. Pak uživatel umístí soubor „AAA.ttf“ do složky "C:\custom_fonts" a vytvoří instanci třídy FolderFontSource, která odkazuje na tuto složku. Tato instance je předána statické třídě FontSettings, a poté je soubor „sample.docx“ vykreslen do HTML formátu. Výsledkem je, že písmo „AAA“ bude použito ve výstupním HTML dokumentu.

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);
}

Nahrazení chybějícího písma

Když uživatel zpočátku , že nějaký dokument používá písmo „AAA“, a také , že toto písmo „AAA“ není nainstalováno na cílovém počítači, kde má být dokument vykreslen, ale uživatel nemá přístup k binárnímu obsahu tohoto písma „AAA“, může specifikovat jiné písmo „BBB“, které bude použito místo chybějícího „AAA“. Na rozdíl od předchozího případu se to provádí pomocí možností zobrazení, které jsou pak předány metodě Viewer.View().

Tato možnost se nazývá [DefaultFontName](https://reference.groupdocs.com/viewer/net/groupdocs.viewer.options/baseviewoptions/defaultfontname/), jedná se o vlastnost typu string deklarovanou v abstraktní třídě BaseViewOptions, takže je společná pro všechny možnosti vykreslování: HtmlViewerOptions, PdfViewOptions, PngViewOptions a JpgViewOptions.

Když je tato možnost nastavena, GroupDocs.Viewer používá během vykreslování toto písmo místo jakýchkoli nedostupných písem. Například pokud dokument obsahuje písmo s nestandardními znaky, můžete nastavit výchozí název písma, aby GroupDocs.Viewer nahradil chybějící písmo tím, které má stejnou znakovou sadu. Samozřejmě, písmo, jehož název je uveden ve vlastnosti DefaultFontName, musí být nainstalováno v operačním systému, ve kterém GroupDocs.Viewer dokument vykresluje.

Následující úryvek ukazuje, jak nastavit výchozí název písma:

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);
}          

Vyloučení písem pro HTML

Při vykreslování dokumentů do formátu HTML GroupDocs.Viewer ve výchozím nastavení exportuje všechna použita písma do HTML dokumentu. Tím se zajišťuje správné zobrazení bez ohledu na to, zda jsou požadovaná písma nainstalována na zařízení uživatele. Písma mohou být uložena v výsledném HTML dokumentu jako externí zdroje (HtmlViewOptions.ForExternalResources) nebo vložena přímo do HTML‑markup pomocí datového schématu URI přes kódování base64 (HtmlViewOptions.ForEmbeddedResources). Export písem do HTML je podporován téměř všemi dokumentovými formáty, které samotná písma podporují: Microsoft Office (kromě Excelu), OpenDocument, e‑maily, PDF, e‑knihy a další.

Někdy však tato funkce není žádoucí. Když jsou písma zahrnuta, výrazně zvyšují velikost vytvořeného HTML dokumentu. Pokud má cílový počítač nebo zařízení, na kterém má být HTML dokument zobrazen, všechna použita písma již nainstalována, může prohlížeč tyto systémová písma použít.

Aby bylo možné tuto potřebu uspokojit, má GroupDocs.Viewer možnost vyloučit písma z výsledného HTML dokumentu, a to lze provést dvěma způsoby: vyloučit všechna písma a vyloučit jen konkrétní písma.

Obě možnosti jsou reprezentovány v třídě HtmlViewOptions jako různé vlastnosti:

  • ExcludeFonts je příznak, který zakáže export všech použitých písem do vytvořeného HTML dokumentu, pokud je nastaven na true. Ve výchozím nastavení je tato volba vypnutá (false).
  • FontsToExclude je seznam řetězců, přičemž každý představuje název písma, které má být z HTML dokumentu vyloučeno. Ve výchozím nastavení je seznam prázdný — žádná písma nejsou vyloučena. Upozorňujeme, že tato volba funguje jen pokud je vlastnost ExcludeFonts nastavená na false.

Níže jsou dva úryvky kódu, které demonstrují oba přístupy: první používá ExcludeFonts, druhý — 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);
}

Závěr

GroupDocs.Viewer je primárně zaměřen na převod dokumentů různých formátů do běžně rozšířených „prohlížitelných“ formátů — HTML, PDF, JPEG a PNG. Během poslední doby jsme však přidali několik užitečných funkcí týkajících se zpracování písem, které umožňují zkoumat použité fonty, ladit jejich export a upravovat substituci písem.

Viz také

Získat bezplatnou zkušební verzi

Bezplatnou zkušební verzi GroupDocs.Viewer pro .NET si můžete stáhnout z releases.groupdocs.com. Dočasnou licenci, která vám umožní vyzkoušet všechny funkce a možnosti bez omezení, získáte zde.