Especifique a localização das fontes TrueType

Este tópico descreve o comportamento padrão do Aspose.Words ao procurar fontes TrueType, incluindo diferenças específicas do sistema operacional, e demonstra como especificar fontes de fontes do usuário.

A classe FontSourceBase é usada para especificar várias fontes de fontes. Existem várias implementações da classe FontSourceBase:

Os detalhes de implementação de algumas classes são explicados abaixo.

Carregar fontes do sistema

Existe uma classe SystemFontSource especial que é sempre usada por padrão. Representa todas as fontes TrueType instaladas no sistema. Portanto, é possível criar uma lista de fontes com SystemFontSource e quaisquer outras fontes necessárias:

Uma única instância da classe SystemFontSource é definida por padrão em FontSettings. Em sistemas operacionais diferentes, as fontes podem estar localizadas em locais diferentes. Entretanto, usar uma instância FontSettings para cada documento não é uma solução ideal. Na maioria dos casos, usar DefaultInstance deve ser suficiente.

As instâncias por documento serão necessárias somente se for necessário usar fontes de fontes diferentes para documentos diferentes, o que é um caso raro. O uso de várias instâncias FontSettings diminui o desempenho porque elas não compartilham cache.

Onde Aspose.Words procura fontes TrueType em Windows

Na maioria dos casos, os usuários Windows não enfrentam problemas significativos com fontes perdidas ou layouts incorretos. Normalmente, o Aspose.Words percorre um documento e, quando encontra o link de uma fonte, busca com êxito os dados da fonte na pasta do sistema.

No Windows, o Aspose.Words primeiro pega todas as fontes disponíveis da pasta _%windir%\Fonts. Essa configuração funcionará para você na maioria das vezes. Você só especifica suas próprias pastas de fontes se precisar. Aspose.Words para .NET também procura fontes adicionais registradas na chave de registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts. Além disso, o Windows 10 permite a instalação de fontes para o usuário atual. As fontes são colocadas na pasta %userprofile%\AppData\Local\Microsoft\Windows\Fonts e também especificadas no registro HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Fonts, onde o Aspose.Words procurará por essas fontes.

Se um documento contiver fontes incorporadas, o Aspose.Words poderá ler dados de fontes relevantes do documento e usá-los para criar o layout do documento. Os documentos também podem conter links para fontes que não estão nas pastas do sistema; nesse caso, os seguintes cenários funcionam:

  • Os usuários podem configurar novas fontes de fontes através da classe FontSettings
  • Aspose.Words pode tentar substituir a fonte perdida por uma semelhante

Fontes em sistemas não Windows

Aspose.Words procurará as fontes nas pastas de fontes do sistema. Uma lista dessas pastas pode ser visualizada pelo método GetSystemFontFolders. Se nenhuma fonte suportada for encontrada, o Aspose.Words usará a fonte padrão interna Fanwood.ttf.

Como as métricas de fonte do sistema operacional Windows e não-Windows são diferentes, o Aspose.Words faz todo o possível para encontrar uma fonte semelhante e construir um layout semelhante ao original. No entanto, isso nem sempre é possível. Nestes casos, a classe FontSettings deve ser usada para adicionar fontes personalizadas ou regras de substituição.

Onde Aspose.Words procura fontes TrueType em Linux

Diferentes distribuições Linux podem armazenar fontes em pastas diferentes. O Aspose.Words procura fontes em vários locais. Por padrão, o Aspose.Words procura as fontes em todos os seguintes locais: /usr/share/fonts /usr/local/share/fonts /usr/X11R6/lib/X11/fontsEste comportamento padrão funcionará para a maioria das distribuições Linux, mas não é garantido que funcione o tempo todo; nesse caso, talvez seja necessário especificar explicitamente o local das fontes do tipo true. Para fazer isso, você precisa saber onde as fontes TrueType estão instaladas em sua distribuição Linux.

Onde Aspose.Words procura fontes TrueType no Mac OS X

Aspose.Words procura fontes na pasta /Library/Fonts, que é o local padrão para fontes TrueType no Mac OS X. Embora essa configuração funcione para você na maioria das vezes, pode ser necessário especificar suas próprias pastas de fontes no caso quando Você precisa.

Carregar fontes da pasta

Se o documento que está sendo processado contiver links para fontes que não estão no sistema, ou você não quiser adicioná-los à pasta do sistema, ou não tiver permissões, a melhor solução seria adicionar uma pasta com suas próprias fontes usando o método SetFontsSources. Isto permitirá substituir a fonte do sistema por uma fonte do usuário. O Aspose.Words não procurará mais fontes no registro ou na pasta Windows\Font e, em vez disso, procurará apenas fontes nas pastas especificadas. O método GetFontSources retornará os valores correspondentes.

Especifique uma ou várias pastas de fontes

Os métodos SetFontsFolder e SetFontsFolders são atalhos para o método SetFontSources com uma ou várias instâncias FolderFontSource. Esses métodos são usados para indicar onde o Aspose.Words deve procurar fontes. Se uma pasta não existir ou não estiver acessível, o Aspose.Words simplesmente a ignorará. Se todas as pastas, incluindo as fontes para a substituição da fonte, forem ignoradas, o Aspose.Words usará a fonte Fanwood como padrão.

O exemplo a seguir demonstra como definir a pasta ou fonte, que o Aspose.Words usará posteriormente para procurar fontes TrueType durante a renderização ou incorporação de fontes:

Você pode baixar o arquivo de modelo deste exemplo em Aspose.Words GitHub.

Um parâmetro booleano extra controla se as fontes são verificadas recursivamente em todas as pastas, verificando, portanto, todas as pastas secundárias de uma pasta especificada. O exemplo a seguir demonstra como configurar o Aspose.Words para procurar fontes TrueType em várias pastas ao renderizar ou incorporar fontes:

Observe as prioridades. Se houver fontes com o mesmo nome de família e estilo em fontes de fontes diferentes, o Aspose.Words selecionará a fonte da fonte com prioridade mais alta. Veja a descrição do campo “Prioridade” abaixo.

Se você não quiser usar fontes do sistema, o Aspose.Words permite ignorá-las e usar apenas suas próprias fontes:

Propriedade Prioritária

A propriedade Priority é usada quando há fontes com o mesmo nome de família e estilo em fontes de fontes diferentes. Neste caso, o Aspose.Words seleciona a fonte da fonte com o valor de prioridade mais alto. Por exemplo, há uma versão antiga da fonte na pasta do sistema e o cliente adicionou uma nova versão da mesma fonte em uma pasta personalizada.

Carregar fontes do Stream

Aspose.Words fornece a classe StreamFontSource, que permite carregar fontes do stream. Para usar a fonte de fonte de fluxo, o usuário precisa criar uma classe derivada de StreamFontSource e fornecer uma implementação do método OpenFontDataStream. O método OpenFontDataStream pode ser chamado várias vezes. Pela primeira vez, ele será chamado quando o Aspose.Words verificar as fontes de fontes fornecidas para obter uma lista de fontes disponíveis. Posteriormente, poderá ser chamado se a fonte for usada no documento para analisar os dados da fonte e incorporar os dados da fonte em alguns formatos de saída. StreamFontSource pode ser útil porque permite carregar os dados da fonte somente quando necessário, e não armazená-los na memória durante a vida útil do Configurações de fonte.

StreamFontSource é uma alternativa ao MemoryFontSource, pois sempre é possível carregar um stream na memória e passá-lo para MemoryFontSource. A diferença é que o MemoryFontSource fica armazenado na memória o tempo todo, e o StreamFontSource é carregado sob demanda e descartado na hora. Mas pode ser carregado diversas vezes, conforme descrito acima. Em alguns casos, o MemoryFontSource é preferível e, em outros, o StreamFontSource.

Salvar e carregar um cache de pesquisa de fontes

Ao pesquisar uma fonte pela primeira vez, o Aspose.Words itera sobre as fontes de fontes especificadas pelo usuário e forma um cache de pesquisa de fontes com base nos dados dessas fontes. Assim, o cache irá coletar informações sobre as fontes disponíveis: família da fonte, estilo, nome completo da fonte, entre outros. Nas chamadas subsequentes, o Aspose.Words procura informações sobre a fonte desejada por seu nome no cache de pesquisa de fontes e, em seguida, analisa os arquivos especificados para usar a fonte.

O procedimento para analisar todos os arquivos de fontes disponíveis para inicializar o cache é bastante demorado. Aspose.Words permite salvar e carregar o cache usando o método SaveSearchCache para resolver o problema de desempenho. Ou seja, o usuário pode carregar um cache salvo anteriormente de um arquivo e pular a etapa de análise de todos os arquivos de fontes disponíveis.

O exemplo de código a seguir mostra como preparar fontes de fontes e gerar cache de pesquisa de fontes antecipadamente:

// Prepare font sources and generate font search cache beforehand.
FileFontSource fileSource = new FileFontSource(filePath, fileSourcePriority, fileSourceKey);
MemoryFontSource memorySource = new MemoryFontSource(fontData, memorySourcePriority, memorySourceKey);
StreamFontSource streamSource = new SteamFontSourceMemoryImpl(streamSourcePriority, streamSourceKey);

FontSettings settings = new FontSettings();

settings.SetFontsSources(new FontSourceBase[] { fileSource, memorySource, streamSource });
settings.SaveSearchCache(cacheOutputStream);

O exemplo de código a seguir mostra como definir fontes de fontes e carregar o cache de pesquisa antes de processar documentos:

// Set font sources and load search cache before processing documents. Note that sources should be the same as when saving font search cache.
FileFontSource fileSource = new FileFontSource(filePath, fileSourcePriority, fileSourceKey);
MemoryFontSource memorySource = new MemoryFontSource(fontData, memorySourcePriority, memorySourceKey);
StreamFontSource streamSource = new SteamFontSourceMemoryImpl(streamSourcePriority, streamSourceKey);

FontSettings settings = new FontSettings();

settings.SetFontsSources(new FontSourceBase[] { fileSource, memorySource, streamSource }, cacheInputStream);

Obtenha uma lista de fontes disponíveis

Se quiser obter a lista de fontes disponíveis, que, por exemplo, podem ser usadas para renderizar um documento PDF, você pode usar o método GetAvailableFonts, conforme mostrado no exemplo de código a seguir. A classe PhysicalFontInfo especifica informações sobre a fonte física disponível para o mecanismo de fonte Aspose.Words: