Trabajar con capas PDF usando C#

Las capas PDF permiten que un documento PDF contenga diferentes conjuntos de contenido que pueden ser visualizados o ocultados selectivamente. Cada capa en un PDF puede incluir texto, imágenes o gráficos, y los usuarios pueden activar o desactivar estas capas, dependiendo de sus necesidades. Las capas se utilizan a menudo en documentos complejos donde diferentes contenidos necesitan ser organizados o separados.

Bloquear una capa PDF

Con Aspose.PDF for .NET puedes abrir un PDF, bloquear una capa específica en la primera página y guardar el documento con los cambios.

Desde la versión 24.5, esta función ha sido implementada.

Se han añadido dos nuevos métodos y una propiedad:

  • Layer.Lock(); - Bloquea la capa.
  • Layer.Unlock(); - Desbloquea la capa.
  • Layer.Locked; - Propiedad que indica el estado de bloqueo de la capa.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void LockLayerInPDF()
{
	// The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Layers();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "input.pdf"))
    {
        // Get the first page and the first layer
        var page = document.Pages[1];
        var layer = page.Layers[0];

        // Lock the layer
        layer.Lock();

        // Save PDF document
        document.Save(dataDir + "LockLayerInPDF_out.pdf");
    }
}

Extraer elementos de la capa PDF

La biblioteca Aspose.PDF for .NET permite extraer cada capa de la primera página y guardar cada capa en un archivo separado.

Para crear un nuevo PDF a partir de una capa, se puede utilizar el siguiente fragmento de código:

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void SaveLayersFromPdf()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Forms();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "input.pdf"))
    {
        // Get layers from the first page
        var layers = document.Pages[1].Layers;

        // Save each layer to the output path
        foreach (var layer in layers)
        {
            layer.Save(dataDir + "Layers_out.pdf");
        }
    }
}

La versión 24.9 ha resultado en una actualización de esta función.

Es posible extraer elementos de la capa PDF y guardarlos en un nuevo flujo de archivo PDF:

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void SaveLayersToOutputStream(Stream outputStream)
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Forms();
	
    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "input.pdf"))
    {
        // Get layers from the first page
        var layers = document.Pages[1].Layers;

        // Save each layer to the output stream
        foreach (var layer in layers)
        {
            layer.Save(outputStream);
        }
    }
}

Aplanar un PDF con capas

La biblioteca Aspose.PDF for .NET abre un PDF, itera a través de cada capa en la primera página y aplana cada capa, haciéndola permanente en la página.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void FlattenLayersInPdf()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Forms();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "input.pdf"))
    {
        // Get the first page
        var page = document.Pages[1];

        // Flatten each layer on the page
        foreach (var layer in page.Layers)
        {
            layer.Flatten(true);
        }
    }
}

El método ‘Layer.Flatten(bool cleanupContentStream)’ acepta el parámetro booleano que especifica si se deben eliminar los marcadores de grupo de contenido opcional del flujo de contenido. Configurar el parámetro cleanupContentStream en falso acelera el proceso de aplanamiento.

Fusionar todas las capas dentro del PDF en una

La biblioteca Aspose.PDF for .NET permite fusionar todas las capas PDF o una capa específica en la primera página en una nueva capa y guardar el documento actualizado.

Se han añadido dos métodos para fusionar todas las capas en la página:

  • void MergeLayers(string newLayerName).
  • void MergeLayers(string newLayerName, string newOptionalContentGroupId).

El segundo parámetro permite renombrar el marcador de grupo de contenido opcional. El valor predeterminado es “oc1” (/OC /oc1 BDC).

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void MergeLayersInPdf(string newLayerName, string optionalLayerName = null)
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Forms();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "input.pdf"))
    {
        // Get the first page
        var page = document.Pages[1];

        // Merge layers with a new layer name
        if (optionalLayerName != null)
        {
            page.MergeLayers(newLayerName, optionalLayerName);
        }
        else
        {
            page.MergeLayers(newLayerName);
        }

        // Save PDF document
        document.Save(dataDir + "MergeLayersInPdf_out.pdf");
    }
}