Manipular e Substituir Fontes TrueType

Aspose.Words Exigência Digite fontes para uma variedade de tarefas, incluindo renderizar documentos para formatos de página fixa, por exemplo, PDF ou XPS. Quando Aspose.Words renderiza um documento, ele precisa executar incorporação e subconjunto de fontes TrueType no documento resultante, que é uma prática normal durante uma geração de documentos, incluindo PDF popular ou XPS formatos. Isso garante que o documento aparecerá o mesmo a qualquer espectador. Além disso, XPS especificação requer fontes para ser sempre incorporado no documento.

Para garantir Aspose.Words mede com precisão os caracteres e incorpora fontes relevantes com sucesso, as seguintes condições devem ser atendidas:

  1. Aspose.Words deve ser capaz de encontrar e acessar arquivos de fonte TrueType no sistema.
  2. Deve haver fontes TrueType suficientes disponíveis para Aspose.Words, preferencialmente com os mesmos nomes de família de fontes que os usados no documento.

Note que a fonte no documento representa uma entidade, como nome da família, estilo, tamanho, cor, que é diferente da TrueType font (physical font) entidade. Aspose.Words resolve a fonte no documento para uma fonte física em alguma fase de processamento. Isso permite que certas tarefas, mais comumente a tarefa de calcular o tamanho do texto durante a construção do layout e incorporação/subconfiguração a formatos de página fixa. Uma série de outras tarefas menos populares, como resolução de fontes e substituição ao carregar HTML ou incorporação/subconfiguração a alguns formatos de fluxo, são igualmente habilitados.

Manipulação de fontes e problemas de desempenho

Todos os mecanismos de manipulação de fontes disponíveis estão contidos no FontSettings classe. Esta classe é responsável por buscar fontes dentro de fontes de fonte definidas, bem como para o processo de Substituição de Fonte, conforme descrito abaixo.

As fontes são analisadas em vários passos:

  1. Obter informações para fonte, resolver de todas as fontes disponíveis.
  2. Parsing as fontes resolvidas para ficar disponível glyphs e métricas (horizontal e vertical).
  3. Parsing as fontes resolvidas para incorporação e subconfiguração.

Quando Aspose.Words encontra uma fonte no documento pela primeira vez, ele tenta obter informações básicas de fonte, como o nome completo da fonte, nome da família, versão, estilo, a partir dos arquivos de fonte localizados em cada fonte de fonte. Depois que todas as fontes são recuperadas, Aspose.Words usa estes detalhes para encontrar os dados de fonte necessários ou um substituto adequado para a fonte solicitada.

Uma vez que o procedimento descrito acima é demorado, pode afetar negativamente o desempenho da aplicação em seu primeiro lançamento. No entanto, cada instância de FontSettings tem seu próprio cache, que poderia reduzir o tempo de processamento de documentos subsequentes. Por exemplo, você pode compartilhar uma instância do FontSettings classe entre diferentes documentos, que permite acelerar o carregamento dos documentos. O exemplo a seguir demonstra isso:

No caso em que FontSettings não é definido explicitamente, Aspose.Words usa o padrão FontSettings instância. Esta instância também é compartilhada automaticamente entre documentos e pode ser extraída da seguinte forma:

Java

FontSettings fontSettings = FontSettings.getDefaultInstance();

Se você tem certeza de que todos os documentos de processamento exigem as mesmas configurações de fonte, então é recomendável configurar e utilizar o padrão FontSettings instância. Suponha que você precisa usar as mesmas fontes de fonte para todos os seus documentos. Neste caso, você pode alterar a instância padrão da seguinte forma:

Disponibilidade e Substituição da fonte

Um texto em um documento pode ser formatado com várias fontes, como Arial, Times New Roman, Verdana e outros. Quando Aspose.Words renderiza um documento, ele tenta selecionar as fontes especificadas no documento.

No entanto, existem situações em que a fonte exata não pode ser encontrada e Aspose.Words deve substituí-lo por uma fonte semelhante em vez. Aspose.Words seleciona a fonte de acordo com o seguinte processo:

  1. Aspose.Words tenta encontrar uma fonte entre as fontes de fonte disponíveis com um nome de fonte exato.
  2. Aspose.Words tenta encontrar a fonte necessária entre as fontes incorporadas no documento original. Alguns formatos de documentos como o DOCX podem conter fontes incorporadas.
  3. Se Aspose.Words é incapaz de localizar a fonte necessária com o nome exato match, e o AltName propriedade definida para esta fonte, então Aspose.Words irá encontrar a fonte definida com AltName do FontInfo classe, que especifica as informações da fonte.
  4. Se Aspose.Words é incapaz de localizar a fonte definida, e AltName não é também definido, então as regras de substituição de fonte são aplicadas one-by-one, como descrito abaixo (quando a substituição apropriada é encontrada, o Processo de Substituição de Fonte pára e o próximo passo não é executado):
    1. Aspose.Words tentará aplicar as configurações de fonte do sistema operacional, se estiverem disponíveis, usando o FontConfig utilidade. Este não…Windows recurso deve ser usado com um sistema operacional compatível com FontConfig. Quase qualquer sistema operacional baseado em Unix já tem um FontConfig biblioteca que é projetada para fornecer configuração de fonte em todo o sistema, personalização e acesso a aplicativos. Caso contrário, esta biblioteca pode ser facilmente instalada pelo usuário.
      Aspose.Words sabe como consultar dados e interpretar os resultados do FontConfig para seus próprios propósitos. Por padrão, o FontConfig O utilitário está desativado. Você pode habilitar o seguinte:
      Java
            fontSettings.getSubstitutionSettings().getFontConfigSubstitution()().setEnabled(true);
            
      
    2. O próximo passo é um mecanismo simples, mas incrivelmente poderoso chamado TableSubstitutionRule. Por padrão, este recurso está ativo e disponível para qualquer sistema operacional. Aspose.Words usa tabelas XML que definem regras básicas de substituição para diferentes sistemas operacionais. De acordo com a regra de substituição da Tabela, a lista de nomes de fontes substitutos será usada.
      XML
            <TableSubstitutionSettings xmlns="Aspose.Words"> 
      	<SubstitutesTable> 
      		<Item OriginalFont="Arabic Transparent" SubstituteFonts="Arial" /></SubstitutesTable> 
            </TableSubstitutionSettings>
            
      OriginalFont - uma fonte a ser substituída, SubstituteFonts - lista de variantes de substituição, separada por uma vírgula. A primeira fonte disponível é usada para substituição.
      A característica principal desta regra é a capacidade de carregar suas próprias tabelas de substituição, como é mostrado no seguinte exemplo:
      Java
            fontSettings.getSubstitutionSettings().getTableSubstitution().load("Table.xml");
            
      
      Você pode tomar como base a tabela existente do jarro ou salvá-lo programaticamente da seguinte maneira:
      Java
            fontSettings.getSubstitutionSettings().getTableSubstitution().save("MyTable.xml");
            
      
      Apesar da flexibilidade deste mecanismo, existem alguns casos quando é melhor desabilitá-lo, como mostrado abaixo:
      Java
            fontSettings.getSubstitutionSettings().getTableSubstitution().setEnabled(false);
            
      
    3. O FontInfo regra de substituição será aplicada se a regra de substituição da tabela não puder encontrar a fonte. Este mecanismo é ativado por padrão. Aspose.Words encontra a fonte mais adequada de acordo com as informações de fonte contidas em um documento particular. Esta informação pode ser obtida a partir de FontInfo classe como mostrado abaixo:
      Java
            FontInfoCollection fontInfos = doc.getFontInfos();
            
      
      Os usuários não podem interferir no fluxo de trabalho deste recurso a menos que eles decidam desabilitá-lo em caso de resultados insatisfatórios:
      Java
            fontSettings.getSubstitutionSettings().getFontInfoSubstitution().setEnabled(false);
            
      
      Se FontInfo não está disponível para a fonte ausente, então o processo pára.
    4. DefaultFont regra de substituição será aplicada no caso de FontInfo a substituição também falhou. Esta regra também é ativada por padrão. De acordo com esta regra, Aspose.Words tentará usar a fonte padrão especificada no DefaultFontName propriedade. Se o usuário não tiver escolhido sua própria fonte padrão, então “Times New Roman” será usado como fonte padrão. Esta regra pode ser desativada como mostrado abaixo:
      Java
            fontSettings.getSubstitutionSettings().getDefaultFontSubstitution().setEnabled(false);
            
      
      Para verificar a fonte padrão atual, use:
      Java
            fontSettings.getSubstitutionSettings().getDefaultFontSubstitution().getDefaultFontName();
            
      
      Para configurar sua própria opção de substituição, aplique:
      Java
            fontSettings.getSubstitutionSettings().getDefaultFontSubstitution().setDefaultFontName("Arial");
            
      
  5. Se Aspose.Words é incapaz de executar a substituição de fonte, ele tenta obter a primeira fonte disponível de fontes de fonte disponíveis.
  6. Finalmente, se Aspose.Words não pode encontrar quaisquer fontes entre as fontes de fonte disponíveis, ele renderiza o documento usando a fonte livre de Fanwood que é incorporado no Aspose.Words montagem.

Como Reconhecer Que a fonte foi substituída

Às vezes, pode não ser claro por que o layout do documento mudou, ou por que alguma fonte não parece tão esperada. Nesses casos, mensagens de aviso de substituição de fonte implementadas pelo IWarningCallback interface vem para resgatar. Eles têm o FontSubstitution tipo de aviso e o formato de texto de descrição padrão, “Font ‘Não foi encontrado. Usando ‘Fonte em vez disso. Razão: ”, com as seguintes razões:

  • “nome alternativo do documento” - para substituição por AltName
  • “substituição defontconfig” – para substituição pela regra de configuração de fonte
  • “substituição de tabela” - para substituição por regra de tabela
  • “substituição de informação de fonte” – para substituição por fonte info regra
  • “substituição de fonte padrão” – para substituição por regra de fonte padrão
  • “primeira fonte disponível” – para substituição com a primeira fonte disponível

Configurações do FallBack da fonte de XML

Existem dois mecanismos diferentes utilizados Aspose.Words - Substituição da fonte e recuo da fonte. A substituição da fonte é usada quando a fonte especificada no documento não pôde ser encontrada entre as fontes de fonte como foi descrita nas seções acima. O mecanismo de retorno de fonte é usado quando a fonte é resolvida, mas não contém um caracter específico. Neste caso, Aspose.Words tenta usar uma das fontes de fallback para o personagem.

Há um BuildAutomatic método que automaticamente constrói as configurações de fallback digitalizando fontes disponíveis. Uma vez que este método pode produzir uma configuração de fallback não-optimal, você pode controlar o comportamento de fallback da fonte usando as propriedades do FontFallbackSettings classe. Esta classe especifica as configurações do mecanismo de retorno de fonte. Você pode obter uma instância do FontFallbackSettings classe como segue:

Java

FontFallbackSettings settings = fontSettings.getFallbackSettings();

Similarmente à regra de substituição *Table, este mecanismo usa tabelas XML para configuração. Estas tabelas XML podem ser carregadas e salvas com os seguintes métodos:

Java

fontSettings.getFallbackSettings().load("MyNewFallbackTable.xml");
fontSettings.getFallbackSettings().save("Current_FallbackTable.xml");

O Aspose.Words lançamento inclui duas tabelas: MsOfficeFallbackSetting.xml e NotoFallbackSetting.xml.

O MsOfficeFallbackSetting tabela define uma estratégia de substituição para uma variedade de caracteres, que é semelhante à estratégia usada por Microsoft Word. Assim, a estratégia requer a instalação de Microsoft Fontes de escritório. MsOfficeFallbackSetting pode ser ativado usando o seguinte método:

.Java

fontSettings.getFallbackSettings().loadMsOfficeFallbackSettings();

O NotoFallbackSetting tabela é criada especialmente para uso com Google Noto fontes (veja mais sobre Google Noto configurações de fonte na próxima seção) e pode ser ativado da seguinte forma:

Java

fontSettings.getFallbackSettings().loadNotoFallbackSettings();

O exemplo de código a seguir demonstra como carregar as configurações de fallback de fontes de um arquivo XML:

No exemplo de código acima, o seguinte arquivo XML é usado:

<FontFallbackSettings xmlns="Aspose.Words">
    <FallbackTable>
        <!-- Fallback table consists of the rules. Each rule defines the fallback fonts which Aspose.Words should use for specified Unicode ranges and base fonts. Rules are checked one by one and the first applicable fallback font is used. If none of the rules are applicable then ".notdef" glyph (missing glyph) from the base font will be used. -->
        <!-- This rule defines that "Vijaya" fallback font should be used for "U+0B80..U+0BFF Tamil" Unicode block. -->
        <Rule Ranges="0B80-0BFF" FallbackFonts="Vijaya"/>
        <!-- This rule defines that "Segoe UI Emoji" and "Segoe UI Symbol" fallback fonts should be used for "U+1F300..U+1F5FF Miscellaneous Symbols and Pictographs", "U+1F600..U+1F64F Emoticons" Unicode blocks. If "Segoe UI Emoji" font does not contains the glyph for the requested Unicode code point then "Segoe UI Symbol" will be checked. -->
        <Rule Ranges="1F300-1F64F" FallbackFonts="Segoe UI Emoji, Segoe UI Symbol"/>
        <!-- This rule defines that "Arial" fallback font should be used for "U+2000..U+206F General Punctuation", "U+2070..U+209F Superscripts and Subscripts" Unicode blocks and specific "U+20B9 INDIAN RUPEE SIGN" code point. -->
        <Rule Ranges="2000-206F, 2070-209F, 20B9" FallbackFonts="Arial" />
        <!-- These rules defines that for "U+3040..U+309F Hiragana" Unicode block "MS Gothic" fallback font should be used if base font is "Times New Roman" and "MS Mincho" fallback font for all other base fonts. -->
        <Rule Ranges="3040-309F" FallbackFonts="MS Gothic" BaseFonts="Times New Roman"/>
        <Rule Ranges="3040-309F" FallbackFonts="MS Mincho"/>
        <!-- This rule defines that "Arial Unicode MS" fallback font should be used if applicable fallback font was not found by previous rules. -->
        <Rule FallbackFonts="Arial Unicode MS"/>
    </FallbackTable>
</FontFallbackSettings>

Configurações de FallBack de fonte predefinidas para Google Noto Fontes

Aspose.Words fornece configurações de retorno de fonte predefinidas para Google Noto fontes. Estas são fontes gratuitas licenciadas em SIL Open Font License, que podem ser baixadas a partir de Google Noto Fontes. O FontFallbackSettings classe fornece uma LoadNotoFallbackSettings método. Ele carrega configurações de fallback predefinidas, que usam Google Noto fontes como mostrado no exemplo de código abaixo:

Onde? Aspose.Words Procura Fontes

Aspose.Words tentativas de encontrar fontes TrueType no sistema de arquivos automaticamente. Normalmente, você pode confiar no comportamento padrão de Aspose.Words para encontrar o TrueType fontes, mas às vezes você precisa especificar suas próprias pastas contendo fontes TrueType. O Lista de produtos relacionados tópico descreve como e onde Aspose.Words procura fontes, bem como como como especificar seus próprios locais de fonte.

Diferenças no processamento de formatos de fonte em Aspose.Words e Microsoft Word

Existem algumas diferenças no processamento de formatos de fonte em Aspose.Words e Microsoft Word como mostrado na tabela abaixo:

Microsoft Word Aspose.Words
Fontes TrueType e fontes OpenType com contornos TrueType Apoiado. Apoiado.
Fontes OpenType com contornos PostScript Apoiado para a maioria dos cenários. Incorporação a formatos de página fixa, como PDF e XPS não são suportados. O texto é substituído por imagens bitmap. Suportado para a maioria dos cenários, incluindo incorporação a formatos de página fixa.
Variações de fonte OpenType Apenas as instâncias nomeadas são suportadas. Variações contínuas não suportadas. Suportado para a única instância padrão. Exemplos nomeados e variações contínuas não são suportados.
Tipo1 fontes Apoiado em Windows versões anteriores a 2013 e em versões do MacOS. O suporte é descartado Windows versões a partir de 2013. Não suportado.

Ver também