Compartilhar via


Definir a fonte para uma execução de texto

Este tópico mostra como usar as classes no SDK Open XML para Office para definir a fonte para uma parte do texto dentro de um documento de processamento de palavras programaticamente.


Pacotes e partes do documento

Um documento Open XML é armazenado como um pacote, cujo formato é definido pela ISO/IEC 29500-2. O pacote pode ter várias partes com relações entre elas. A relação entre as partes controla a categoria do documento. Um documento pode ser definido como um documento de processamento de texto caso seu item de relação do pacote contiver uma relação com uma parte do documento principal. Caso seu item de relação do pacote contenha uma relação com uma parte da apresentação, ela poderá ser definida como um documento de apresentação. Caso seu item de relação do pacote contenha uma relação com uma parte da pasta de trabalho, ela é definida como um documento de planilha. Neste tópico de tutorial, você usará um pacote de documentos de processamento de texto.


Criar um objeto WordprocessingDocument

O exemplo de código abre um pacote de documento de processamento de palavras passando um nome de arquivo como argumento para um dos métodos Open() sobrecarregados da classe WordprocessingDocument que usa uma cadeia de caracteres e um valor booliano que especifica se o arquivo deve ser aberto no modo de leitura/gravação ou não. Nesse caso, o valor booliano é verdadeiro especificando que o arquivo deve ser aberto no modo de leitura/gravação.

    // Open a Wordprocessing document for editing.
    using (WordprocessingDocument package = WordprocessingDocument.Open(fileName, true))
    {
        // Insert other code here.
    }

A instrução de uso fornece uma alternativa recomendada ao típico . Criar. Salvar. Fechar sequência. Ele garante que o método Dispose (método interno usado pelo SDK do Open XML para limpo recursos) seja chamado automaticamente quando o colchete de fechamento for atingido. O bloco que segue a instrução de uso estabelece um escopo para o objeto que é criado ou nomeado na instrução de uso , nesse caso, pacote. Como a classe WordprocessingDocument no SDK Open XML salva e fecha automaticamente o objeto como parte de sua implementação System.IDisposable e porque o método Dispose é chamado automaticamente quando você sai do bloco; você não precisa chamar explicitamente Salvar e Fechar─desde que use o uso.


Estrutura do Elemento Executar Fontes

O texto a seguir da especificação ISO/IEC 29500 pode ser útil ao trabalhar com o elemento rFonts .

Esse elemento especifica as fontes que devem ser usadas para exibir o conteúdo de texto desta execução. Em uma única execução, pode haver até quatro tipos de conteúdo presentes que devem ser autorizados a usar uma fonte exclusiva:

  • ASCII

  • ANSI alto

  • Script complexo

  • Leste Asiático

O uso de cada uma dessas fontes deve ser determinado pelos valores de caractere Unicode do conteúdo de execução, a menos que seja substituído manualmente por meio do uso do elemento cs.

Se esse elemento não estiver presente, o valor padrão será deixar a formatação aplicada no nível anterior na hierarquia de estilo. Se esse elemento nunca for aplicado na hierarquia de estilos, o texto será exibido em qualquer fonte padrão que dê suporte a cada tipo de conteúdo.

Considere uma única execução de texto com texto árabe e inglês, da seguinte maneira:

Inglês العربية

Esse conteúdo pode ser expresso em uma única execução wordprocessingML:

    <w:r>
      <w:t>English العربية</w:t>
    </w:r>

Embora esteja na mesma execução, o conteúdo está em diferentes faces de fonte especificando uma fonte diferente para caracteres ASCII e CS na execução:

    <w:r>
      <w:rPr>
        <w:rFonts w:ascii="Courier New" w:cs="Times New Roman" />
      </w:rPr>
      <w:t>English العربية</w:t>
    </w:r>

Essa execução de texto deve, portanto, usar a fonte Courier New para todos os caracteres no intervalo ASCII e deve usar a fonte Times New Roman para todos os caracteres no intervalo de Script Complexo.

© ISO/IEC29500: 2008.


Como funciona o código de exemplo

Depois de abrir o arquivo de pacote para leitura/gravação, o código cria um objeto RunProperties que contém um objeto RunFonts que tem sua propriedade Ascii definida como "Arial". Os objetos RunProperties e RunFonts representam elementos de execução (<rPr>) e elementos de fontes de execução (<rFont>), respectivamente, no esquema Open XML Wordprocessing. Use um objeto RunProperties para especificar as propriedades de uma determinada execução de texto. Nesse caso, para definir a fonte da execução como Arial, o código cria um objeto RunFonts e, em seguida, define o valor Ascii como "Arial".

    // Use an object initializer for RunProperties and rPr.
    RunProperties rPr = new RunProperties(
        new RunFonts()
        {
            Ascii = "Arial"
        });

Em seguida, o código cria um objeto Run que representa a primeira execução de texto do documento. O código instancia uma Execução e define-a como a primeira execução de texto do documento. Em seguida, o código adiciona o objeto RunProperties ao objeto Run usando o método PrependChild<T>(T ). O método PrependChild adiciona um elemento como o primeiro elemento filho ao elemento especificado na estrutura XML na memória. Nesse caso, a execução do exemplo de código produz uma estrutura XML na memória em que o elemento RunProperties é adicionado como o primeiro elemento filho do elemento Run . Em seguida, ele salva as alterações de volta no objeto Save(MainDocumentPart). Chamar o método Save do objeto WordprocessingDocument confirma alterações feitas na representação na memória da parte MainDocumentPart de volta ao arquivo XML para o MainDocumentPart (o arquivo document.xml no pacote wordprocessing).

    Run r = package.MainDocumentPart.Document.Descendants<Run>().First();
    r.PrependChild<RunProperties>(rPr);

    // Save changes to the MainDocumentPart part.
    package.MainDocumentPart.Document.Save();

Código de exemplo

A seguir está o código que você pode usar para alterar a fonte do primeiro parágrafo de um documento de processamento de Word. Por exemplo, você pode invocar o método SetRunFont em seu programa para alterar a fonte no arquivo "myPkg9.docx" usando a chamada a seguir.

    string fileName = @"C:\Users\Public\Documents\MyPkg9.docx";
    SetRunFont(fileName);

Depois de executar o programa marcar seu arquivo "MyPkg9.docx" para ver a fonte alterada.

Observação

Este exemplo de código pressupõe que o documento de processamento de palavras de teste (MyPakg9.docx) contenha pelo menos uma execução de texto.

Este é o código de exemplo completo em C# e em Visual Basic.

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
using System.Linq;

SetRunFont(args[0]);

// Set the font for a text run.
static void SetRunFont(string fileName)
{
    // Open a Wordprocessing document for editing.
    using (WordprocessingDocument package = WordprocessingDocument.Open(fileName, true))
    {
        // Set the font to Arial to the first Run.
        // Use an object initializer for RunProperties and rPr.
        RunProperties rPr = new RunProperties(
            new RunFonts()
            {
                Ascii = "Arial"
            });

        if (package.MainDocumentPart is null)
        {
            throw new ArgumentNullException("MainDocumentPart is null.");
        }

        Run r = package.MainDocumentPart.Document.Descendants<Run>().First();
        r.PrependChild<RunProperties>(rPr);

        // Save changes to the MainDocumentPart part.
        package.MainDocumentPart.Document.Save();
    }
}

Confira também

Inicializadores de objeto: tipos nomeados e anônimos

Inicializadores de objeto e coleção (Guia de programação em C#)