Visão Geral
Muitos formatos de documentos estão intimamente ligados às fontes. Por exemplo, quando um usuário adiciona algum texto a um documento DOCX, esse texto sempre tem uma fonte definida. Alguns formatos de documento normalmente armazenam os dados da fonte incorporados no próprio arquivo, como o PDF. Mas outros, como os formatos da família Office, geralmente dependem das fontes instaladas no sistema operacional.
Existem também diversos formatos de fonte. Por exemplo, a maioria das fontes instaladas é apresentada nos formatos TTF (TrueType) e OTF (OpenType). Documentos Office Open XML também trabalham com o formato EOT (Embedded OpenType). Na web, porém, WOFF e WOFF2 são os formatos mais usados.
Sumário
- Visão Geral
- Obtendo todas as fontes usadas
- Processando as fontes ausentes
- Especificando a fonte ausente
- Substituindo a fonte ausente
- Excluindo as fontes para HTML
- Conclusão
- Veja também
- Obtenha um teste gratuito
Obtendo todas as fontes usadas
O recurso mais útil no contexto de fontes é listar e retorná‑las. O GroupDocs.Viewer fornece um método especial GetAllFonts() — quando o documento é carregado na instância da classe Viewer, chame esse método para obter uma lista de todas as fontes usadas neste documento. Na lista retornada, cada fonte será apresentada como uma instância do tipo que implementa a interface IFontInfo. Essa interface contém propriedades comuns a qualquer fonte possível: nome da família, estilo, formato e conteúdo binário.
Famílias específicas de formatos, como WordProcessing, Spreadsheet, Presentation e PDF, têm implementações especializadas da IFontInfo; essas implementações fornecem mais dados que são específicos da família de formatos em questão. Por exemplo, os tipos WordProcessingFontInfo, PresentationFontInfo e PdfFontInfo contêm a propriedade booleana IsEmbedded — um indicativo de onde essa fonte está armazenada (incorporada no corpo do documento carregado ou instalada no SO). O tipo SpreadsheetFontInfo contém muitos dados de fonte específicos de planilhas: sua cor, se está sublinhada ou tachada. WordProcessingFontInfo pode conter o nome alternativo da família. E assim por diante.
Um exemplo curto está abaixo:
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);
}
}
Observe que a extração de fontes é suportada apenas para as famílias WordProcessing, Spreadsheet, Presentation e PDF; para todos os demais formatos de documento o método GetAllFonts() retorna um array vazio.
Processando as fontes ausentes
A situação em que um documento foi criado na máquina do autor e usa a fonte “AAA”, e depois é processado com o GroupDocs.Viewer em alguma máquina do cliente, onde a fonte “AAA” está ausente, é típica. Nesse caso o GroupDocs.Viewer tenta substituir essa fonte usando regras complexas de substituição: ele analisa os metadados do documento, nomes alternativos da fonte ausente, configurações do documento, configurações do SO, lista de todas as fontes disponíveis instaladas no SO e assim por diante. Finalmente, se por algum motivo o SO estiver “limpo”, sem nenhuma fonte instalada, o GroupDocs.Viewer substituirá a fonte ausente por aquela que está incorporada dentro do assembly (DLL) do GroupDocs.Viewer; essa fonte servirá como “último recurso” caso nenhuma outra fonte esteja disponível. Por exemplo, para os formatos da família WordProcessing, o GroupDocs.Viewer armazena internamente a fonte livre “Fanwood”.
No momento, o GroupDocs.Viewer realiza a operação de substituição de fonte “silenciosamente” durante a renderização do documento (quando o método Viewer.View() é invocado) — não há mensagens ou eventos que indiquem que o mecanismo de substituição foi ativado, qual fonte está ausente e por qual foi substituída, nem para qual documento exato. Esse recurso é difícil de implementar porque não está claro que tipo de notificação deveria ser emitida, em que formato e como o cliente poderia utilizá‑la.
Entretanto, o GroupDocs.Viewer oferece aos usuários duas maneiras possíveis de resolver essa situação: especificar manualmente a fonte ausente e substituir manualmente a fonte ausente.
Especificando a fonte ausente
Quando o usuário inicialmente sabe que algum documento usa a fonte “AAA”, e também sabe que essa fonte “AAA” não está instalada na máquina de destino, onde o documento será renderizado, e o usuário possui o conteúdo binário dessa fonte “AAA”, ele pode especificá‑la antes de chamar o método Viewer.View().
Para especificar uma ou várias fontes personalizadas, que não estão instaladas no sistema operacional de destino, o usuário deve adicionar fontes‑fonte personalizadas. Fonte‑fonte é, na prática, uma pasta onde uma ou muitas fontes estão localizadas. Ela é representada pela classe FolderFontSource. E a classe FontSettings possui o método SetFontSources() para adicionar as fontes‑fonte ao GroupDocs.Viewer.
O trecho de código a seguir demonstra isso. Suponha que o documento “sample.docx” use alguma fonte rara “AAA.ttf”, que não está instalada no sistema operacional de destino. O usuário coloca o arquivo “AAA.ttf” na pasta "C:\custom_fonts" e então cria uma instância da classe FolderFontSource que aponta para essa pasta. Essa instância é passada para a classe estática FontSettings, e então o arquivo “sample.docx” é renderizado para o formato HTML. Como resultado, a fonte “AAA” será usada no documento HTML de saída.
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);
}
Substituindo a fonte ausente
Quando o usuário inicialmente sabe que algum documento usa a fonte “AAA”, e também sabe que essa fonte “AAA” não está instalada na máquina de destino, onde o documento deve ser renderizado, mas o usuário não tem acesso ao conteúdo binário dessa fonte “AAA”, ele pode especificar outra fonte “BBB”, que será utilizada em vez da “AAA” ausente. Diferente do caso anterior, isso deve ser feito usando as opções de visualização, que são então passadas ao método Viewer.View().
Essa opção chama‑se “DefaultFontName”, é uma propriedade do tipo string, declarada na classe abstrata BaseViewOptions, portanto é comum a todas as opções de renderização: HtmlViewerOptions, PdfViewOptions, PngViewOptions e JpgViewOptions.
Quando essa opção é especificada, o GroupDocs.Viewer usa essa fonte durante a renderização em vez de quaisquer fontes indisponíveis. Por exemplo, se o documento inclui uma fonte contendo caracteres não‑latinos, especifique o nome da fonte padrão para garantir que o GroupDocs.Viewer substitua qualquer fonte ausente por uma que possua o mesmo conjunto de caracteres. Obviamente, a fonte cujo nome é definido na propriedade DefaultFontName deve estar instalada no sistema operacional onde o GroupDocs.Viewer renderiza o documento.
O trecho de código a seguir mostra como definir o nome da fonte padrão:
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);
}
Excluindo as fontes para HTML
Ao renderizar documentos para o formato HTML, o GroupDocs.Viewer, por padrão, exporta todas as fontes usadas para o documento HTML. Isso garante a exibição correta, independentemente de as fontes exigidas existirem no dispositivo do visualizador. As fontes podem ser armazenadas no documento HTML resultante como recursos externos (HtmlViewOptions.ForExternalResources) ou incorporadas diretamente ao markup HTML usando o esquema data URI por meio de codificação base64 (HtmlViewOptions.ForEmbeddedResources). A exportação de fontes para HTML é suportada por quase todos os formatos de documento que suportam fontes: Microsoft Office (exceto Excel), formatos OpenDocument, e‑mails, PDF, eBooks etc.
Entretanto, às vezes esse recurso é indesejado. Na prática, quando as fontes são incluídas, elas aumentam significativamente o tamanho do documento HTML gerado. Assim, quando a máquina ou dispositivo de destino, onde o HTML será exibido, já possui todas as fontes usadas instaladas, o navegador pode utilizar essas fontes do sistema.
Para atender a essa necessidade, o GroupDocs.Viewer possui a capacidade de excluir fontes do documento HTML produzido, e isso pode ser feito de duas maneiras: excluir todas as fontes ou excluir apenas fontes específicas.
Ambas as opções são representadas na classe HtmlViewOptions como propriedades diferentes:
ExcludeFontsé um sinalizador que desativa a exportação de todas as fontes usadas para o documento HTML produzido, quando ativado (true). Por padrão, essa opção está desativada (false).FontsToExcludeé uma lista de strings, cada uma representando o nome de uma fonte que deve ser excluída do documento HTML produzido. Por padrão, a lista está vazia — nenhuma fonte é excluída. Observe que essa opção funciona apenas se a propriedadeExcludeFontsestiver desativada (false).
Dois trechos de código abaixo demonstram ambas as possibilidades: o primeiro mostra o uso de ExcludeFonts, enquanto o segundo demonstra 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);
}
Conclusão
O GroupDocs.Viewer tem foco principal em renderizar documentos de diferentes formatos para os amplamente difundidos formatos “visualizáveis” — HTML, PDF, JPEG e PNG. Mas, durante o último período, adicionamos vários recursos úteis relacionados ao processamento de fontes que permitem revisar e examinar as fontes usadas, ajustar sua exportação e controlar a substituição de fontes.
Veja Também
- Obtendo todas as fontes usadas no documento carregado
- Definir fontes personalizadas
- Substituir fonte ausente
- Excluir fontes ao renderizar para HTML
Obtenha um teste gratuito
Você pode baixar uma versão de teste gratuito do GroupDocs.Viewer para .NET em releases.groupdocs.com. Também pode adquirir uma licença temporária para experimentar todos os recursos e funcionalidades sem restrições aqui.