Trabajando con Artifacts en .NET

Los Artifacts en PDF son objetos gráficos u otros elementos que no forman parte del contenido real del documento. Normalmente se utilizan para la decoración, el diseño o como fondos. Ejemplos de artifacts incluyen encabezados de página, pies de página, separadores o imágenes que no transmiten ningún significado.

El propósito de los artifacts en PDF es permitir la distinción entre elementos de contenido y elementos que no lo son. Esto es importante para la accesibilidad, ya que los lectores de pantalla y otras tecnologías de asistencia pueden ignorar los artifacts y centrarse en el contenido relevante. Los artifacts también pueden mejorar el rendimiento y la calidad de los documentos PDF, ya que pueden omitirse al imprimir, buscar o copiar.

Para crear un elemento como artifact en PDF, es necesario utilizar la Artifact class.
Contiene las siguientes propiedades útiles:

  • Artifact.Type – obtiene el tipo de artifact (soporta valores de la enumeración Artifact.ArtifactType, donde los valores incluyen Background, Layout, Page, Pagination y Undefined).
  • Artifact.Subtype – obtiene el subtipo de artifact (soporta los valores de la enumeración Artifact.ArtifactSubtype, donde los valores incluyen Background, Footer, Header, Undefined y Watermark).
  • Artifact.Image – Obtiene la imagen de un artifact (si está presente una imagen, de lo contrario null).
  • Artifact.Text – Obtiene el texto de un artifact.
  • Artifact.Contents – Obtiene una colección de operadores internos del artifact. Su tipo soportado es System.Collections.ICollection.
  • Artifact.Form – Obtiene el XForm de un artifact (si se utiliza XForm). Los artifacts de Watermark, header y footer contienen un XForm que muestra todo el contenido del artifact.
  • Artifact.Rectangle – Obtiene la posición de un artifact en la página.
  • Artifact.Rotation – Obtiene la rotación de un artifact (en grados, un valor positivo indica una rotación en sentido contrario a las agujas del reloj).
  • Artifact.Opacity – Obtiene la opacidad de un artifact. Los valores posibles están en el rango 0…1, donde 1 es completamente opaco.

Las siguientes clases también pueden ser útiles para trabajar con artifacts:

Trabajando con marcas de agua existentes

Una marca de agua creada con Adobe Acrobat se denomina artifact (como se describe en 14.8.2.2 Real Content and Artifacts de la especificación PDF).

Para obtener todas las marcas de agua en una página determinada, la clase Page tiene la propiedad Artifacts.

El siguiente fragmento de código muestra cómo obtener todas las marcas de agua en la primera página de un archivo PDF.

Nota: Este código también funciona con la 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}");
        }
    }
}

Trabajando con fondos como artifacts

Las imágenes de fondo se pueden usar para agregar una marca de agua, u otro diseño sutil, a los documentos. En Aspose.PDF for .NET, cada documento PDF es una colección de páginas y cada página contiene una colección de artifacts. La BackgroundArtifact class se puede utilizar para agregar una imagen de fondo a un objeto de página.

El siguiente fragmento de código muestra cómo agregar una imagen de fondo a las páginas PDF utilizando el 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");
    }
}

Si deseas, por alguna razón, utilizar un fondo de color sólido, cambia el código anterior de la siguiente manera:

 // 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 artifacts de un tipo particular

Para calcular el recuento total de artifacts de un tipo particular (por ejemplo, el número total de marcas de agua), utiliza el siguiente 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));
    }
}

Agregando artifact de numeración Bates

Para agregar un artifact de numeración Bates a un documento, llama al método de extensión AddBatesNumbering(BatesNArtifact batesNArtifact) en el PageCollection, pasando el objeto BatesNArtifact como parámetro:

O, puedes pasar una colección de PaginationArtifacts:

Alternativamente, puedes agregar un artifact de numeración Bates utilizando un delegado de acción:

Para eliminar la numeración Bates, utiliza el siguiente código: