Definir a fonte para uma execução de texto
Este tópico mostra como utilizar as classes no SDK Open XML para o Office para definir o tipo de letra de uma parte do texto num documento de processamento de palavras através de programação.
Pacotes e partes do documento
Um documento Open XML é armazenado como um pacote, cujo formato é definido por ISO/IEC 29500. 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.
Estrutura do Elemento Run Fonts
O texto seguinte da especificação ISO/IEC 29500 pode ser útil ao trabalhar com rFonts
o elemento .
Este elemento especifica os tipos de letra que devem ser utilizados para apresentar o conteúdo de texto desta execução. Numa única execução, podem existir até quatro tipos de conteúdo presentes que, cada um deles, pode utilizar um tipo de letra exclusivo:
ASCII
ANSI elevado
Script Complexo
Leste Asiático
A utilização de cada um destes tipos de letra deve ser determinada pelos valores de carateres Unicode do conteúdo de execução, a menos que seja manualmente substituída através da utilização do elemento cs.
Se este elemento não estiver presente, o valor predefinido é deixar a formatação aplicada ao nível anterior na hierarquia de estilos. Se este elemento nunca for aplicado na hierarquia de estilos, o texto será apresentado em qualquer tipo de letra predefinido que suporte cada tipo de conteúdo.
Considere uma única execução de texto com texto árabe e inglês, da seguinte forma:
Inglês العربية
Este conteúdo pode ser expresso numa única execução do WordprocessingML:
<w:r>
<w:t>English العربية</w:t>
</w:r>
Apesar de estar na mesma execução, os conteúdos estão em diferentes tipos de letra ao especificar um tipo de letra diferente para carateres 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>
Por conseguinte, esta execução de texto utilizará o tipo de letra Courier New para todos os carateres no intervalo ASCII e utilizará o tipo de letra Times New Roman para todos os carateres no intervalo Script Complexo.
© ISO/IEC 29500: 2016
Como funciona o código de exemplo
Depois de abrir o ficheiro de pacote para leitura/escrita, o código cria um RunProperties
objeto que contém um RunFonts
objeto que tem a respetiva Ascii
propriedade definida como "Arial".
RunProperties
e RunFonts
os objetos representam elementos de propriedades rPr
de execução e executam elementos rFont
de tipos de letra , respetivamente, no esquema Open XML Wordprocessing. Utilize um RunProperties
objeto para especificar as propriedades de uma determinada execução de texto. Neste caso, para definir o tipo de letra da execução como Arial, o código cria um RunFonts
objeto e, em seguida, define o Ascii
valor como "Arial".
// 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"
});
Em seguida, o código cria um Run objeto que representa a primeira execução de texto do documento. O código instancia um Run
e define-o para a primeira execução de texto do documento. Em seguida, o código adiciona o RunProperties
objeto ao Run
objeto com o PrependChild método . O PrependChild
método adiciona um elemento como o primeiro elemento subordinado ao elemento especificado na estrutura XML dentro da memória.
Neste caso, a execução do exemplo de código produz uma estrutura XML dentro da memória onde o RunProperties
elemento é adicionado como o primeiro elemento subordinado do Run
elemento. Não é necessário ligar Save
diretamente, porque estamos dentro de uma instrução using.
if (package.MainDocumentPart is null)
{
throw new ArgumentNullException("MainDocumentPart is null.");
}
Run r = package.MainDocumentPart.Document.Descendants<Run>().First();
r.PrependChild<RunProperties>(rPr);
Observação
Este exemplo de código pressupõe que o documento de processamento de palavras de teste no caminho fileName contém, pelo menos, uma execução de texto.
Este é o código de exemplo completo em C# e em Visual Basic.
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);
}
}