Trabalhando com Artefatos em .NET

Artefatos em PDF são objetos gráficos ou outros elementos que não fazem parte do conteúdo real do documento. Eles são geralmente usados para decoração, layout ou propósitos de fundo. Exemplos de artefatos incluem cabeçalhos de página, rodapés, separadores ou imagens que não transmitem nenhum significado.

O objetivo dos artefatos em PDF é permitir a distinção entre elementos de conteúdo e não conteúdo. Isso é importante para acessibilidade, pois leitores de tela e outras tecnologias assistivas podem ignorar artefatos e se concentrar no conteúdo relevante. Artefatos também podem melhorar o desempenho e a qualidade dos documentos PDF, pois podem ser omitidos na impressão, pesquisa ou cópia.

Para criar um elemento como um artefato em PDF, você precisa usar a classe Artifact. Ela contém as seguintes propriedades úteis:

  • Artifact.Type – obtém o tipo de artefato (suporta valores da enumeração Artifact.ArtifactType onde os valores incluem Background, Layout, Page, Pagination e Undefined).
  • Artifact.Subtype – obtém o subtipo de artefato (suporta os valores da enumeração Artifact.ArtifactSubtype onde os valores incluem Background, Footer, Header, Undefined, Watermark).
  • Artifact.Image – Obtém a imagem de um artefato (se uma imagem estiver presente, caso contrário, nulo).
  • Artifact.Text – Obtém o texto de um artefato.
  • Artifact.Contents – Obtém uma coleção de operadores internos de artefato. Seu tipo suportado é System.Collections.ICollection.
  • Artifact.Form – Obtém o XForm de um artefato (se XForm for usado). Marcas d’água, cabeçalhos e rodapés de artefatos contêm XForm que mostra todos os conteúdos do artefato.
  • Artifact.Rectangle – Obtém a posição de um artefato na página.
  • Artifact.Rotation – Obtém a rotação de um artefato (em graus, valor positivo indica rotação anti-horária).
  • Artifact.Opacity – Obtém a opacidade de um artefato. Os valores possíveis estão na faixa de 0…1, onde 1 é completamente opaco.

As seguintes classes também podem ser úteis para trabalhar com artefatos:

Trabalhando com Marcas d’Água Existentes

Uma marca d’água criada com o Adobe Acrobat é chamada de artefato (conforme descrito na especificação PDF 14.8.2.2 Conteúdo Real e Artefatos).

Para obter todas as Marcas d’Água em uma página específica, a classe Page possui a propriedade Artifacts.

O seguinte trecho de código mostra como obter todas as marcas d’água na primeira página de um arquivo PDF.

Nota: Este código também funciona com a biblioteca Aspose.PDF.Drawing.

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

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "sample-w.pdf"))
    {
        // Get the watermarks from the first page artifacts
        var watermarks = document.Pages[1].Artifacts
            .Where(artifact =>
                artifact.Type == Aspose.Pdf.Artifact.ArtifactType.Pagination
                && artifact.Subtype == Aspose.Pdf.Artifact.ArtifactSubtype.Watermark);

        // Iterate through the found watermark artifacts and print details
        foreach (Aspose.Pdf.WatermarkArtifact item in watermarks.Cast<Aspose.Pdf.WatermarkArtifact>())
        {
            Console.WriteLine($"{item.Text} {item.Rectangle}");
        }
    }
}

Trabalhando com Fundos como Artefatos

Imagens de fundo podem ser usadas para adicionar uma marca d’água ou outro design sutil a documentos. Em Aspose.PDF for .NET, cada documento PDF é uma coleção de páginas e cada página contém uma coleção de artefatos. A classe BackgroundArtifact pode ser usada para adicionar uma imagem de fundo a um objeto de página.

O seguinte trecho de código mostra como adicionar uma imagem de fundo às páginas PDF usando o objeto BackgroundArtifact.

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

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "sample.pdf"))
    {
        // Create a new BackgroundArtifact and set the background image
        var background = new Aspose.Pdf.BackgroundArtifact()
        {
            BackgroundImage = File.OpenRead(dataDir + "background.jpg")
        };

        // Add the background image to the first page's artifacts
        document.Pages[1].Artifacts.Add(background);

        // Save PDF document with the added background
        document.Save(dataDir + "SampleArtifactsBackground_out.pdf");
    }
}

Se você quiser, por algum motivo, usar um fundo de cor sólida, por favor, altere o código anterior da seguinte maneira:

 // For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET

 private static void AddBackgroundColorToPDF()
 {
    // The path to the documents directory
     var dataDir = RunExamples.GetDataDir_AsposePdf();

     // Open PDF document
     using (var document = new Aspose.Pdf.Document(dataDir + "sample.pdf"))
     {
         // Create a new BackgroundArtifact and set the background color
         var background = new Aspose.Pdf.BackgroundArtifact()
         {
             BackgroundColor = Aspose.Pdf.Color.DarkKhaki
         };

         // Add the background color to the first page's artifacts
         document.Pages[1].Artifacts.Add(background);

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

Contando Artefatos de um Tipo Específico

Para calcular a contagem total de artefatos de um tipo específico (por exemplo, o número total de marcas d’água), use o seguinte código:

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

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "sample.pdf"))
    {
        // Get pagination artifacts from the first page
        var paginationArtifacts = document.Pages[1].Artifacts
            .Where(artifact => artifact.Type == Aspose.Pdf.Artifact.ArtifactType.Pagination);

        // Count and display the number of each artifact type
        Console.WriteLine("Watermarks: {0}",
            paginationArtifacts.Count(a => a.Subtype == Aspose.Pdf.Artifact.ArtifactSubtype.Watermark));
        Console.WriteLine("Backgrounds: {0}",
            paginationArtifacts.Count(a => a.Subtype == Aspose.Pdf.Artifact.ArtifactSubtype.Background));
        Console.WriteLine("Headers: {0}",
            paginationArtifacts.Count(a => a.Subtype == Aspose.Pdf.Artifact.ArtifactSubtype.Header));
        Console.WriteLine("Footers: {0}",
            paginationArtifacts.Count(a => a.Subtype == Aspose.Pdf.Artifact.ArtifactSubtype.Footer));
    }
}

Adicionando Artefato de Numeração Bates

Para adicionar um artefato de numeração Bates a um documento, chame o AddBatesNumbering(BatesNArtifact batesNArtifact) método de extensão no PageCollection, passando o objeto BatesNArtifact como parâmetro:

Ou, você pode passar uma coleção de PaginationArtifacts:

Alternativamente, você pode adicionar um artefato de numeração Bates usando um delegado de ação:

Para excluir a numeração Bates, use o seguinte código: