Trabalhar com camadas PDF usando C#

As camadas PDF permitem que um documento PDF contenha diferentes conjuntos de conteúdo que podem ser visualizados ou ocultados seletivamente. Cada camada em um PDF pode incluir texto, imagens ou gráficos, e os usuários podem alternar essas camadas, dependendo de suas necessidades. As camadas são frequentemente usadas em documentos complexos onde diferentes conteúdos precisam ser organizados ou separados.

Bloquear uma camada PDF

Com Aspose.PDF for .NET você pode abrir um PDF, bloquear uma camada específica na primeira página e salvar o documento com as alterações.

Desde o lançamento 24.5, esse recurso foi implementado.

Foram adicionados dois novos métodos e uma propriedade:

  • Layer.Lock(); - Bloqueia a camada.
  • Layer.Unlock(); - Desbloqueia a camada.
  • Layer.Locked; - Propriedade que indica o estado de bloqueio da camada.
// 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");
    }
}

Extrair elementos da camada PDF

A biblioteca Aspose.PDF for .NET permite extrair cada camada da primeira página e salvar cada camada em um arquivo separado.

Para criar um novo PDF a partir de uma camada, o seguinte trecho de código pode ser usado:

// 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");
        }
    }
}

O lançamento 24.9 resultou em uma atualização para esse recurso.

É possível extrair elementos da camada PDF e salvá-los em um novo fluxo de arquivo 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);
        }
    }
}

Achatar um PDF em camadas

A biblioteca Aspose.PDF for .NET abre um PDF, itera por cada camada na primeira página e achata cada camada, tornando-a permanente na 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);
        }
    }
}

O método ‘Layer.Flatten(bool cleanupContentStream)’ aceita o parâmetro booleano que especifica se deve remover marcadores de grupo de conteúdo opcional do fluxo de conteúdo. Definir o parâmetro cleanupContentStream como falso acelera o processo de achatamento.

Mesclar todas as camadas dentro do PDF em uma

A biblioteca Aspose.PDF for .NET permite mesclar todas as camadas PDF ou uma camada específica na primeira página em uma nova camada e salvar o documento atualizado.

Dois métodos foram adicionados para mesclar todas as camadas na página:

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

O segundo parâmetro permite renomear o marcador de grupo de conteúdo opcional. O valor padrão é “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");
    }
}