Trabajar con patrones de sombreado en PostScript | .NETO
Agregar patrón de sombreado en documento PS
El patrón de sombreado es un patrón de mosaico de textura generalmente representado por una pequeña imagen simple de 2 colores (generalmente blanco y negro). El contenido principal de estas pequeñas imágenes son varios sombreados.
Para pintar por sombreados, la plataforma .NET tiene una clase separada, derivada de System.Drawing.Brush, System.Drawing.HatchBrush. Su diferencia con System.Drawing.TextureBrush es que tiene estilos predefinidos con nombres que definen qué imagen usar para el mosaico. La plataforma .NET ofrece 53 estilos de sombreado y los 52 estilos se pueden usar para rellenar o trazar (delinear) en PsDocument.
Para pintar objetos gráficos con un patrón de sombreado en la biblioteca Aspose.Page para .NET, basta con pasar System.Drawing.HatchBrush a SetPaint() o uno de los FillText () o FillAndStrokeText() métodos que aceptan System.Drawing.Brush como parámetro.
Para delinear objetos gráficos con un patrón de sombreado en Aspose.Page para la biblioteca .NET, alguien debe crear un nuevo System.Drawing.Pen con System.Drawing.HacthBrush y pasarlo a SetStroke () o uno de los métodos OutlineText() o FillAndStrokeText() que aceptan System.Drawing.Pen como parámetro.
En el siguiente ejemplo, demostramos, en primer lugar, cómo rellenar una forma con un patrón de sombreado, luego toda la variedad de estilos de sombreado en .NET y, finalmente, cómo rellenar y delinear un texto con un patrón de sombreado.
Un algoritmo para pintar objetos gráficos con un patrón de sombreado en un nuevo documento PS incluye los siguientes pasos:
- Cree una secuencia de salida para el archivo PS resultante.
- Cree PsSaveOptions.
- Cree PsDocument con el flujo de salida ya creado y las opciones de guardado.
- Cree la ruta gráfica o la fuente necesaria según el objeto que vayamos a rellenar o delinear.
- Crea un objeto de System.Drawing.HatchBrush con el estilo deseado.
- Configure el pincel de sombreado como pintura actual en PsDocument.
- Rellene la ruta de los gráficos con la pintura actual o rellene un texto. Si utilizamos uno de los métodos para rellenar un texto que acepta System.Drawing.Brush como parámetro, se puede ignorar el punto anterior.
- Cierra la página.
- Guarde el documento.
Si necesitamos trazar (delinear) objetos gráficos con un patrón de sombreado en lugar de los últimos 4 puntos, lo siguiente será:
Cree el objeto System.Drawing.Pen con el pincel de sombreado.
Establezca este lápiz como trazo actual en PsDocument.
Delinee la ruta de los gráficos con el trazo actual o delinee el texto. Si utilizamos uno de los métodos para delinear el texto que acepta System.Drawing.Pen como parámetro, se puede ignorar el punto anterior.
Cierra la página.
Guarde el documento.
1//Create an output stream for PostScript document
2using (Stream outPsStream = new FileStream(dataDir + "AddHatchPattern_outPS.ps", FileMode.Create))
3{
4 //Create save options with A4 size
5 PsSaveOptions options = new PsSaveOptions();
6
7 // Create new 1-paged PS Document
8 PsDocument document = new PsDocument(outPsStream, options, false);
9
10 int x0 = 20;
11 int y0 = 100;
12 int squareSide = 32;
13 int width = 500;
14 int sumX = 0;
15
16 //Create a graphics state
17 document.WriteGraphicsSave();
18
19 //Translate the graphics state to initial point
20 document.Translate(x0, y0);
21
22 //Create a rectangle path for every pattern square
23 GraphicsPath path = new GraphicsPath();
24 path.AddRectangle(new RectangleF(0, 0, squareSide, squareSide));
25
26 //Create a pen for outlining pattern square
27 Pen pen = new Pen(Color.Black, 2);
28
29 //For every hatch pattern style
30 for (HatchStyle hatchStyle = 0; hatchStyle <= (HatchStyle)52; hatchStyle++)
31 {
32 //Set the paint with current hatch brush style
33 document.SetPaint(new HatchBrush(hatchStyle, Color.Black, Color.White));
34
35 //Calculate a displacement in order to don't go beyond the page bounds
36 int x = squareSide;
37 int y = 0;
38 if (sumX >= width)
39 {
40 x = -(sumX - squareSide);
41 y += squareSide;
42 }
43 //Translate current graphics state
44 document.Translate(x, y);
45 //Fill the pattern square
46 document.Fill(path);
47 //Set the stroke
48 document.SetStroke(pen);
49 //Draw the square outline
50 document.Draw(path);
51
52 //Calculate a distance from X0
53 if (sumX >= width)
54 {
55 sumX = squareSide;
56 }
57 else
58 sumX += x;
59 }
60
61 //Exit from current graphics state to upper level graphics state
62 document.WriteGraphicsRestore();
63
64 //Fill the text with the hatch pattern
65 HatchBrush brush = new HatchBrush(HatchStyle.DiagonalCross, Color.Red, Color.Yellow);
66 Font font = new Font("Arial", 96, FontStyle.Bold);
67 document.FillAndStrokeText("ABC", font, 200, 300, brush, pen);
68
69 //Outline the text with hatch pattern
70 brush = new HatchBrush(HatchStyle.Percent50, Color.Blue, Color.White);
71 document.OutlineText("ABC", font, 200, 400, new Pen(brush, 5));
72
73
74 //Close current page
75 document.ClosePage();
76
77 //Save the document
78 document.Save();
79}
Para Linux, MacOS y otros sistemas operativos distintos de Windows, ofrecemos utilizar nuestro paquete Nuget Aspose.Page.Drawing. Utiliza el backend Aspose.Drawing en lugar de la biblioteca del sistema System.Drawing.
Así que importe el espacio de nombres Aspose.Page.Drawing en lugar de System.Drawing. En el fragmento de código anterior se utilizará Aspose.Page.Drawing.Rectangle en lugar de System.Drawing.Rectangle, Se utilizará Aspose.Page.Drawing.Drawing2D.GraphicsPath en lugar de System.Drawing.Drawing2D.GraphicsPath, etc. Nuestros ejemplos de código en GitHub contienen todas las sustituciones necesarias.
Consulte cómo trabajar con un patrón de tramado en un documento PS en Java.
El resultado de ejecutar este código aparece como
Puede descargar ejemplos y archivos de datos desde GitHub.