Trabajar con lienzos dentro de XPS

Recortar y transformar lienzos de archivos XPS usando la API para .NET

 

La gestión de lienzos (Canvases) en los documentos es una de las características que ofrece Aspose.Page para .NET. Esta es una solución para trabajar con diferentes lenguajes de descripción de páginas, específicamente XPS. En el siguiente ejemplo descubrirá cómo:

  • Crear un lienzo en un archivo XPS.

  • Realizar desplazamientos (offsets) izquierdos y superiores en el lienzo principal.

  • Agregar un nuevo lienzo con una transformación de traslación al lienzo principal.

  • Agregar un nuevo lienzo con una transformación de rotación alrededor de un punto al lienzo principal.

  • Recortar un lienzo. Y muchas más manipulaciones con lienzos en archivos XPS.

Para transformar lienzos de un archivo XPS siga la siguiente guía:

  1. Cree un archivo XPS utilizando la Clase XpsDocument .
  2. Cree el lienzo principal, común para todos los elementos de la página con el método AddCanvas() .
  3. Realice desplazamientos izquierdos y superiores en el lienzo principal utilizando el método CreateMatrix() .
  4. Cree una geometría de ruta rectangular con el método CreatePathGeometry() .
  5. Cree un relleno para rectángulos mediante la clase XpsBrush .
  6. Para crear un rectángulo en el lienzo 2 y rellénelo use la clase XpsPath .
  7. Para trasladar el lienzo 3 para posicionar un nuevo rectángulo debajo del anterior use el método CreateMatrix() .
  8. Para trasladar este lienzo al lado derecho de la página use el método Translate() .
  9. Para escalar el lienzo 4 llame al método Scale() .
  10. Para rotar el lienzo 5 alrededor de un punto de 45 grados, el método RotateAround() resulta útil.
  11. Guarde el documento XPS modificado utilizando el método XPsDocument.Save() .

Código C# para transformación de lienzos en archivos XPS

    using Aspose.Page.Xps;
    using Aspose.Page.Xps.XpsModel;
    using System.Drawing;
    // The path to the documents directory.
    string dataDir = RunExamples.GetDataDir_WorkingWithCanvas();
            
    // Create a new XPS Document
    XpsDocument doc = new XpsDocument();

    // Create main canvas, common for all page elemnts
    XpsCanvas canvas1 = doc.AddCanvas();

    // Make left and top offsets in the main canvas
    canvas1.RenderTransform = doc.CreateMatrix(1, 0, 0, 1, 20, 10);

    // Create the rectangle path geometry
    XpsPathGeometry rectGeom = doc.CreatePathGeometry("M 0,0 L 200,0 200,100 0,100 Z");

    // Create a fill for rectangles
    XpsBrush fill = doc.CreateSolidColorBrush(doc.CreateColor(12, 15, 159));
            
    // Add new canvas without any transformations to the main canvas
    XpsCanvas canvas2 = canvas1.AddCanvas();
    // Create rectangle in this canvas and fill it
    XpsPath rect = canvas2.AddPath(rectGeom);
    rect.Fill = fill;

    // Add new canvas with translate transformation to the main canvas
    XpsCanvas canvas3 = canvas1.AddCanvas();
    // Translate this canvas to position new rectangle below the previous rectnagle
    canvas3.RenderTransform = doc.CreateMatrix(1, 0, 0, 1, 0, 200);
    // Translate this canvas to the right side of the page
    canvas3.RenderTransform.Translate(500, 0);
    // Create the rectangle in this canvas and fill it
    rect = canvas3.AddPath(rectGeom);
    rect.Fill = fill;

    // Add new canvas with the double scale transformation to the main canvas
    XpsCanvas canvas4 = canvas1.AddCanvas();
    // Translate this canvas to position new rectangle below the previous rectnagle
    canvas4.RenderTransform = doc.CreateMatrix(1, 0, 0, 1, 0, 400);
    // Scale this canvas
    canvas4.RenderTransform.Scale(2, 2);
    // Create a rectangle in this canvas and fill it
    rect = canvas4.AddPath(rectGeom);
    rect.Fill = fill;

    // Add new canvas with rotation around a point transformation to the main canvas
    XpsCanvas canvas5 = canvas1.AddCanvas();
    // Translate this canvas to position new rectangle below the previous rectnagle
    canvas5.RenderTransform = doc.CreateMatrix(1, 0, 0, 1, 0, 800);
    // Rotate this canvas aroud a point on 45 degrees
    canvas5.RenderTransform.RotateAround(45, new PointF(100, 50));
    rect = canvas5.AddPath(rectGeom);
    rect.Fill = fill;
            
    // Save the resultant XPS document
    doc.Save(dataDir + "output1.xps");
El siguiente fragmento de código muestra cómo recortar lienzos de archivos XPS dentro de la solución Aspose.Page para la API .NET.

Para recortar (clip) lienzos de un archivo XPS siga la siguiente guía:

  1. Cree o abra un archivo XPS utilizando la Clase XpsDocument.
  2. Cree el lienzo principal con el método AddCanvas() .
  3. Realice desplazamientos izquierdos y superiores en el lienzo principal utilizando el método CreateMatrix() .
  4. Cree una geometría de ruta rectangular con el método CreatePathGeometry() .
  5. Cree un relleno para rectángulos mediante la clase XpsBrush .
  6. Para agregar otro lienzo con un recorte al lienzo principal, llame al método AddCanvas() nuevamente.
  7. Cree una geometría circular para el recorte utilizando la clase XpsPathGeometry .
  8. Para crear un rectángulo en este lienzo y rellénelo use la clase XpsPath .
  9. Agregue otro lienzo con el método AddCanvas(), luego cree un rectángulo en este lienzo y trace su contorno con la clase XpsPathGeometry.
  10. Guarde el documento XPS modificado mediante el método XPsDocument.Save().

Código C# para recorte de lienzos en archivos XPS

    // The path to the documents directory.
    string dataDir = RunExamples.GetDataDir_WorkingWithCanvas();
            
    // Create a new XPS Document
    XpsDocument doc = new XpsDocument();

    // Create main canvas, common for all page elemnts
    XpsCanvas canvas1 = doc.AddCanvas();

    // Make left and top offsets in the main canvas
    canvas1.RenderTransform = doc.CreateMatrix(1, 0, 0, 1, 20, 10);

    // Create the rectangle path geometry
    XpsPathGeometry rectGeom = doc.CreatePathGeometry("M 0,0 L 500,0 500,300 0,300 Z");

    // Create a fill for rectangles
    XpsBrush fill = doc.CreateSolidColorBrush(doc.CreateColor(12, 15, 159));
            
    // Add another canvas with the clip to the main canvas
    XpsCanvas canvas2 = canvas1.AddCanvas();

    // Create circle geometry for the clip
    XpsPathGeometry clipGeom = doc.CreatePathGeometry("M250,250 A100,100 0 1 1 250,50 100,100 0 1 1 250,250");
    canvas2.Clip = clipGeom;

    // Create rectangle in this canvas and fill it
    XpsPath rect = canvas2.AddPath(rectGeom);
    rect.Fill = fill;

    // Add the second canvas with stroked rectangle to the main canvas
    XpsCanvas canvas3 = canvas1.AddCanvas();

    // Create rectangle in this canvas and stroke it
    rect = canvas3.AddPath(rectGeom);
    rect.Stroke = fill;
    rect.StrokeThickness = 2;

    // Save resultant XPS document
    doc.Save(dataDir + "output2.xps");



Preguntas más frecuentes

1. ¿Cómo puedo agregar un lienzo a un archivo XPS?

Establezca la ruta al directorio de documentos. Para agregar lienzos, utilice el método AddCanvas().

2. ¿Cómo manipular los desplazamientos del lienzo en un archivo XPS?

Establezca la ruta al directorio de documentos y agregue lienzos. Utilice el método CreateMatrix() para realizar compensaciones.

3. ¿Qué operaciones con lienzos en el archivo XPS se admiten?

Puede crear, recortar y agregar un lienzo, así como manipular sus desplazamientos.

XPS What is XPS File Format

XPS (XML Paper Specification) es el equivalente de Microsoft a PDF. Se basa en XML/HTML, mantiene el diseño en distintas plataformas y es independiente del sistema operativo.