Compartir a través de


Eliminar los encabezados y los pies de página de un documento de procesamiento de texto

En este tema se muestra cómo usar las clases del SDK de Open XML para Office para quitar mediante programación todos los encabezados y pies de página de un documento de procesamiento de texto. Contiene un método de ejemplo RemoveHeadersAndFooters para ilustrar esta tarea.

Método RemoveHeadersAndFooters

Puede usar el método para quitar toda la RemoveHeadersAndFooters información de encabezado y pie de página de un documento de procesamiento de texto. Tenga en cuenta que no solo debe eliminar los elementos del encabezado y el pie de página del almacenamiento de documentos, también debe eliminar las referencias a dichos elementos del documento. El código de ejemplo demuestra ambos pasos en la operación. El RemoveHeadersAndFooters método acepta un único parámetro, una cadena que indica la ruta de acceso del archivo que desea modificar.

static void RemoveHeadersAndFooters(string filename)

Encontrará el listado completo de códigos para el método en la sección Código de ejemplo.

Llamar al método de ejemplo

Para llamar al método de ejemplo, pase una cadena para el primera parámetro que contenga el nombre de archivo del documento que desea modificar tal como se muestra en el siguiente ejemplo de código.

string filename = args[0];

RemoveHeadersAndFooters(filename);

Funcionamiento del código

El RemoveHeadersAndFooters método funciona con el documento que especifique, eliminando todos los elementos de encabezado y pie de página y las referencias a esos elementos. El código comienza abriendo el documento, usando el Open método e indicando que el documento debe abrirse para el acceso de lectura y escritura (el parámetro true final). Dado el documento abierto, el código usa la MainDocumentPart propiedad para navegar al documento principal y almacenar la referencia en una variable denominada docPart.

// Given a document name, remove all of the headers and footers
// from the document.
using (WordprocessingDocument doc = WordprocessingDocument.Open(filename, true))
{
    if (doc.MainDocumentPart is null)
    {
        throw new ArgumentNullException("MainDocumentPart is null.");
    }

    // Get a reference to the main document part.
    var docPart = doc.MainDocumentPart;

Confirmar la existencia de encabezado/pie de página

Dada una referencia a la parte del documento, el código siguiente determina si tiene algún trabajo que hacer, es decir, si el documento contiene encabezados o pies de página. Para decidir, el código llama al Count método de las HeaderParts propiedades y FooterParts del elemento de documento y, si devuelve un valor mayor que 0, el código continúa. Tenga en cuenta que las HeaderParts propiedades y FooterParts devuelven un IEnumerable<T> objeto de HeaderPart o FooterPart , respectivamente.

// Count the header and footer parts and continue if there 
// are any.
if (docPart.HeaderParts.Count() > 0 || docPart.FooterParts.Count() > 0)
{

Dada una colección de referencias a los elementos de encabezado y pie de página, puede escribir código para eliminar cada una de ellas individualmente, pero eso no es necesario debido al SDK de Open XML. En su lugar, puede llamar al DeleteParts método , pasando la colección de elementos que se van a eliminar─ este método simple proporciona un acceso directo para eliminar una colección de elementos. Por lo tanto, las siguientes líneas de código toman el lugar del bucle que debería escribir manualmente.

// Remove the header and footer parts.
docPart.DeleteParts(docPart.HeaderParts);
docPart.DeleteParts(docPart.FooterParts);

Llegados a este punto, el código ha eliminado los elementos de encabezado y pie de página, pero el documento sigue conteniendo referencias a dichos elementos. Antes de que se quiten las referencias huérfanas, el código debe recuperar una referencia al contenido del documento (es decir, al contenido XML incluido en el elemento del documento principal).

Para quitar las referencias varadas, el código recupera primero una colección de elementos HeaderReference, convierte la colección en un Listy, a continuación, recorre en bucle la colección, llamando al Remove() método para cada elemento encontrado. Tenga en cuenta que el código convierte el IEnumerable devuelto por el Descendants() método en un List para que pueda eliminar elementos de la lista y que el HeaderReference tipo proporcionado por el SDK de Open XML facilita la referencia a elementos de tipo HeaderReference en el contenido XML. (Sin esa ayuda adicional, tendría que trabajar con los detalles del contenido XML directamente.) Una vez ha quitado todos los encabezados, el código repite la operación con los elementos de pie de página.

// Get a reference to the root element of the main
// document part.
Document document = docPart.Document;

// Remove all references to the headers and footers.

// First, create a list of all descendants of type
// HeaderReference. Then, navigate the list and call
// Remove on each item to delete the reference.
var headers = document.Descendants<HeaderReference>().ToList();

foreach (var header in headers)
{
    header.Remove();
}

// First, create a list of all descendants of type
// FooterReference. Then, navigate the list and call
// Remove on each item to delete the reference.
var footers = document.Descendants<FooterReference>().ToList();

foreach (var footer in footers)
{
    footer.Remove();
}

Código de ejemplo

A continuación se muestra el ejemplo de código completo RemoveHeadersAndFooters en C# y Visual Basic.

// Remove all of the headers and footers from a document.
static void RemoveHeadersAndFooters(string filename)
{
    // Given a document name, remove all of the headers and footers
    // from the document.
    using (WordprocessingDocument doc = WordprocessingDocument.Open(filename, true))
    {
        if (doc.MainDocumentPart is null)
        {
            throw new ArgumentNullException("MainDocumentPart is null.");
        }

        // Get a reference to the main document part.
        var docPart = doc.MainDocumentPart;

        // Count the header and footer parts and continue if there 
        // are any.
        if (docPart.HeaderParts.Count() > 0 || docPart.FooterParts.Count() > 0)
        {

            // Remove the header and footer parts.
            docPart.DeleteParts(docPart.HeaderParts);
            docPart.DeleteParts(docPart.FooterParts);

            // Get a reference to the root element of the main
            // document part.
            Document document = docPart.Document;

            // Remove all references to the headers and footers.

            // First, create a list of all descendants of type
            // HeaderReference. Then, navigate the list and call
            // Remove on each item to delete the reference.
            var headers = document.Descendants<HeaderReference>().ToList();

            foreach (var header in headers)
            {
                header.Remove();
            }

            // First, create a list of all descendants of type
            // FooterReference. Then, navigate the list and call
            // Remove on each item to delete the reference.
            var footers = document.Descendants<FooterReference>().ToList();

            foreach (var footer in footers)
            {
                footer.Remove();
            }
        }
    }
}