Lavorare con i modelli di tratteggio in PostScript | .NET
Aggiungi un pattern di tratteggio in un documento PS
Il pattern di tratteggio è un pattern di texture a mosaico, solitamente rappresentato da una piccola immagine semplice a 2 colori (solitamente bianco e nero). Il contenuto principale di queste piccole immagini è costituito da vari tratteggi.
Per la pittura tramite tratteggi, la piattaforma .NET dispone di una classe separata, derivata da System.Drawing.Brush, ovvero System.Drawing.HatchBrush. La sua differenza rispetto a System.Drawing.TextureBrush è che dispone di stili predefiniti che definiscono l’immagine da utilizzare per il tiling. La piattaforma .NET offre 53 stili di tratteggio e tutti i 52 stili possono essere utilizzati per il riempimento o il contorno (contorno) in PSDocument.
Per dipingere oggetti grafici con un motivo di tratteggio nella libreria Aspose.Page per .NET, è sufficiente passare System.Drawing.HatchBrush a SetPaint() o a uno dei metodi FillText() o FillAndStrokeText() che accettano System.Drawing.Brush come parametro.
Per delineare oggetti grafici con un motivo di tratteggio nella libreria Aspose.Page per .NET, è necessario creare un nuovo System.Drawing.Pen con System.Drawing.HacthBrush e passarlo a SetStroke() o a uno dei metodi OutlineText() o FillAndStrokeText() che accettano System.Drawing.Pen come parametro.
Nell’esempio seguente mostriamo, innanzitutto, come riempire una forma con un motivo di tratteggio, poi tutti i tipi di stili di tratteggio in .NET e, infine, come riempire e delineare un testo con un motivo di tratteggio. Un algoritmo per dipingere oggetti grafici con un motivo di tratteggio in un nuovo documento PS include i seguenti passaggi:
Creare un flusso di output per il file PS risultante.
Creare PsSaveOptions.
Creare PsDocument con il flusso di output già creato e le opzioni di salvataggio.
Creare il percorso grafico o il font necessari in base all’oggetto che si desidera riempire o delineare.
Creare un oggetto di System.Drawing.HatchBrush con lo stile desiderato.
Impostare il pennello di tratteggio come pittura corrente in PsDocument.
Riempire il percorso grafico con la pittura corrente o aggiungere un testo. Se utilizziamo uno dei metodi per riempire un testo che accetta System.Drawing.Brush come parametro, il punto precedente può essere ignorato.
Chiudere la pagina.
Salvare il documento.
Se desideriamo contornare (contornare) oggetti grafici con un motivo di tratteggio invece degli ultimi 4 punti, il seguente sarà:
Creare un oggetto System.Drawing.Pen con il pennello di tratteggio.
Impostare questa penna come tratto corrente in PsDocument.
Delineare il tracciato grafico con il tratto corrente o il testo. Se utilizziamo uno dei metodi per delineare il testo che accetta System.Drawing.Pen come parametro, il punto precedente può essere ignorato.
Chiudere la pagina.
Salvare il 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}
Per Linux, macOS e altri sistemi operativi non Windows, offriamo l’utilizzo del nostro pacchetto Nuget Aspose.Page.Drawing. Utilizza il backend Aspose.Drawing invece della libreria di sistema System.Drawing.
Quindi, importiamo lo spazio dei nomi Aspose.Page.Drawing invece di quello System.Drawing. Nel frammento di codice sopra riportato verrà utilizzato Aspose.Page.Drawing.Rectangle invece di System.Drawing.Rectangle, verrà utilizzato Aspose.Page.Drawing.Drawing2D.GraphicsPath invece di System.Drawing.Drawing2D.GraphicsPath e così via. I nostri esempi di codice su GitHub contengono tutte le sostituzioni necessarie.
Vedere Lavorare con un modello di tratteggio in un documento PS in Java.
Il risultato dell’esecuzione di questo codice appare come:
È possibile scaricare esempi e file di dati da GitHub.