Trabajar con estilos y temas

La clase StyleCollection se utiliza para administrar configuraciones integradas y aplicar configuraciones definidas por el usuario a los estilos.

Accediendo a estilos

Puede obtener una colección de estilos definidos en el documento utilizando la propiedad Document.Styles. Esta colección contiene estilos integrados y definidos por el usuario en un documento. Un estilo particular podría obtenerse por su nombre/alias, identificador de estilo o índice. El siguiente ejemplo de código demuestra cómo obtener acceso a la colección de estilos definidos en el documento.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// Load the template document.
Document doc = new Document(dataDir + "TestFile.doc");
// Get styles collection from document.
StyleCollection styles = doc.Styles;
string styleName = "";
// Iterate through all the styles.
foreach (Style style in styles)
{
if (styleName == "")
{
styleName = style.Name;
}
else
{
styleName = styleName + ", " + style.Name;
}
}

Cómo extraer contenido según estilos

En un nivel simple, recuperar el contenido basado en estilos de un documento de Word puede resultar útil para identificar, enumerar y contar párrafos y ejecuciones de texto formateados con un estilo específico. Por ejemplo, es posible que necesite identificar tipos particulares de contenido en el documento, como ejemplos, títulos, referencias, palabras clave, nombres de figuras y estudios de casos.

Para ir un paso más allá, esto también se puede utilizar para aprovechar la estructura del documento, definida por los estilos que utiliza, para reutilizar el documento para otra salida, como HTML. De hecho, así es como se construye la documentación de Aspose, poniendo a prueba Aspose.Words. Una herramienta creada con Aspose.Words toma los documentos de Word de origen y los divide en temas en ciertos niveles de título. Se produce un archivo XML utilizando Aspose.Words que se utiliza para construir el árbol de navegación que puede ver a la izquierda. Y luego Aspose.Words convierte cada tema en HTML.

La solución para recuperar texto formateado con estilos específicos en un documento de Word suele ser económica y sencilla utilizando Aspose.Words.

La solución

Para ilustrar con qué facilidad Aspose.Words maneja la recuperación de contenido según estilos, veamos un ejemplo. En este ejemplo, vamos a recuperar texto formateado con un estilo de párrafo específico y un estilo de carácter de un documento de Word de muestra. En un nivel alto, esto implicará:# Abrir un documento de Word usando la clase Document.# Obtener colecciones de todos los párrafos y todas las ejecuciones del documento.# Seleccionar solo los párrafos y ejecuciones requeridos. Específicamente, recuperaremos texto formateado con el estilo de párrafo ‘Título 1’ y el estilo de carácter ‘Énfasis intenso’ de este documento de Word de muestra.

working-with-styles-and-themes-aspose-words-net

En este documento de muestra, el texto formateado con el estilo de párrafo ‘Título 1’ es ‘Insertar pestaña’, ‘Estilos rápidos’ y ‘Tema’, y el texto formateado con el estilo de carácter ‘énfasis intenso’ son varias instancias de azul, Texto en cursiva y negrita, como “galerías” y “aspecto general”.

El código

La implementación de una consulta basada en estilos es bastante simple en el modelo de objetos de documento Aspose.Words, ya que simplemente utiliza herramientas que ya están implementadas. Se implementan dos métodos de clase para esta solución: ParagraphsByStyleName: este método recupera una matriz de esos párrafos en el documento que tiene un nombre de estilo específico. RunsByStyleName: este método recupera una matriz de aquellas ejecuciones en el documento que tienen un nombre de estilo específico. Ambos métodos son muy similares, las únicas diferencias son los tipos de nodos y la representación del estilo. información dentro del párrafo y ejecute nodos. Aquí hay una implementación de ParagraphsByStyleName: el siguiente ejemplo encontrará todos los párrafos formateados con el estilo especificado.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public static ArrayList ParagraphsByStyleName(Document doc, string styleName)
{
// Create an array to collect paragraphs of the specified style.
ArrayList paragraphsWithStyle = new ArrayList();
// Get all paragraphs from the document.
NodeCollection paragraphs = doc.GetChildNodes(NodeType.Paragraph, true);
// Look through all paragraphs to find those with the specified style.
foreach (Paragraph paragraph in paragraphs)
{
if (paragraph.ParagraphFormat.Style.Name == styleName)
paragraphsWithStyle.Add(paragraph);
}
return paragraphsWithStyle;
}

También vale la pena señalar que la colección de párrafos no crea una sobrecarga inmediata porque los párrafos se cargan en esta colección solo cuando accede a los elementos que contienen. Luego, todo lo que necesita hacer es revisar la colección, usando el operador foreach estándar y agregar párrafos que tengan el estilo especificado a la matriz parrafosWithStyle. El nombre del estilo Paragraph se puede encontrar en la propiedad Style.Name del objeto Paragraph.ParagraphFormat. La implementación de RunsByStyleName es casi la misma, aunque obviamente usamos NodeType.Run para recuperar nodos de ejecución. La propiedad Font.Style de un objeto Run se utiliza para acceder a la información de estilo en los nodos Run. El siguiente ejemplo encuentra todas las ejecuciones formateadas con el estilo especificado.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public static ArrayList RunsByStyleName(Document doc, string styleName)
{
// Create an array to collect runs of the specified style.
ArrayList runsWithStyle = new ArrayList();
// Get all runs from the document.
NodeCollection runs = doc.GetChildNodes(NodeType.Run, true);
// Look through all runs to find those with the specified style.
foreach (Run run in runs)
{
if (run.Font.Style.Name == styleName)
runsWithStyle.Add(run);
}
return runsWithStyle;
}

Cuando se implementan ambas consultas, todo lo que necesita hacer es pasar un objeto de documento y especificar los nombres de estilo del contenido que desea recuperar: el siguiente ejemplo ejecuta consultas y muestra resultados. Puede descargar el archivo de plantilla de este ejemplo desde aquí.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithStyles();
string fileName = "TestFile.doc";
// Open the document.
Document doc = new Document(dataDir + fileName);
// Define style names as they are specified in the Word document.
const string paraStyle = "Heading 1";
const string runStyle = "Intense Emphasis";
// Collect paragraphs with defined styles.
// Show the number of collected paragraphs and display the text of this paragraphs.
ArrayList paragraphs = ParagraphsByStyleName(doc, paraStyle);
Console.WriteLine(string.Format("Paragraphs with \"{0}\" styles ({1}):", paraStyle, paragraphs.Count));
foreach (Paragraph paragraph in paragraphs)
Console.Write(paragraph.ToString(SaveFormat.Text));
// Collect runs with defined styles.
// Show the number of collected runs and display the text of this runs.
ArrayList runs = RunsByStyleName(doc, runStyle);
Console.WriteLine(string.Format("\nRuns with \"{0}\" styles ({1}):", runStyle, runs.Count));
foreach (Run run in runs)
Console.WriteLine(run.Range.Text);

Resultado final

Cuando todo esté hecho, al ejecutar la muestra se mostrará el siguiente resultado:

styles-and-themes-aspose-words-net

Como puede ver, este es un ejemplo muy simple, que muestra el número y el texto de los párrafos recopilados y las ejecuciones en el documento de Word de muestra.

Copiar todos los estilos de la plantilla

Hay casos en los que desea copiar todos los estilos de un documento a otro. Puede utilizar el método Document.CopyStylesFromTemplate para copiar estilos de la plantilla especificada a un documento. Cuando se copian estilos de una plantilla a un documento, los estilos con nombres similares en el documento se redefinen para que coincidan con las descripciones de estilo en la plantilla. Los estilos únicos de la plantilla se copian en el documento. Los estilos únicos del documento permanecen intactos. El ejemplo de Below code muestra cómo copiar estilos de un documento a otro.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
string fileName = dataDir + "template.docx";
Document doc = new Document(fileName);
// Open the document.
Document target = new Document(dataDir + "TestFile.doc");
target.CopyStylesFromTemplate(doc);
dataDir = dataDir + RunExamples.GetOutputFilePath(fileName);
doc.Save(dataDir);

Cómo manipular las propiedades del tema

Hemos agregado API básico en Aspose.Words para acceder a las propiedades del tema del documento. Por ahora, este API incluye los siguientes objetos públicos:

  • Tema
  • Fuentes temáticas
  • Colores del tema

Así es como puede obtener propiedades del tema:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document(dataDir);
Theme theme = doc.Theme;
// Major (Headings) font for Latin characters.
Console.WriteLine(theme.MajorFonts.Latin);
// Minor (Body) font for EastAsian characters.
Console.WriteLine(theme.MinorFonts.EastAsian);
// Color for theme color Accent 1.
Console.WriteLine(theme.Colors.Accent1);

Y así es como puedes configurar las propiedades del tema:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document(dataDir);
Theme theme = doc.Theme;
// Set Times New Roman font as Body theme font for Latin Character.
theme.MinorFonts.Latin = "Times New Roman";
// Set Color.Gold for theme color Hyperlink.
theme.Colors.Hyperlink = Color.Gold;