Trabalhar com Padrões de Hachura em PostScript | .NET

Adicionar Padrão de Hachura em Documento PS

O padrão de hachura é um padrão de textura em mosaico, geralmente representado por pequenas imagens simples de duas cores (geralmente preto e branco). O conteúdo principal destas pequenas imagens são várias hachuras.

Para a pintura por hachuras, a plataforma . NET possui uma classe separada, derivada de System.Drawing.Brush, System.Drawing.HatchBrush. A sua diferença em relação a System.Drawing.TextureBrush é que tem estilos predefinidos que definem qual a imagem a utilizar para o mosaico. A plataforma . NET oferece 53 estilos de hachura e todos os 52 estilos podem ser utilizados para preenchimento ou contorno no PsDocument.

Para pintar objetos gráficos com um padrão de hachura na biblioteca Aspose.Page para .NET, basta passar System.Drawing.HatchBrush para SetPaint() ou um dos métodos FillText() ou FillAndStrokeText() que aceitam System.Drawing.Brush como parâmetro.

Para contornar os objetos gráficos com um padrão de hachura na biblioteca Aspose.Page para .NET, é necessário criar uma nova System.Drawing.Pen com System.Drawing.HacthBrush e passá-la para SetStroke() ou um dos métodos OutlineText() ou FillAndStrokeText() que aceitam System.Drawing.Pen como parâmetro.

No exemplo abaixo, demonstramos, em primeiro lugar, como preencher uma forma com um padrão de hachura, depois todos os estilos de hachura em .NET e, por fim, como preencher e contornar um texto com um padrão de hachura.

Um algoritmo para pintar objetos gráficos com um padrão de hachura num novo documento PS inclui os seguintes passos:

  1. Crie um fluxo de saída para o ficheiro PS resultante.
  2. Crie PsSaveOptions.
  3. Crie PsDocument com o fluxo de saída já criado e as opções de guardar.
  4. Crie o caminho gráfico ou a fonte necessária, dependendo do objeto que iremos preencher ou contornar.
  5. Crie um objeto de System.Drawing.HatchBrush com o estilo pretendido.
  6. Defina o pincel de hachura como a tinta atual no PsDocument.
  7. Preencha o percurso gráfico com a tinta atual ou preencha com texto. Se utilizarmos um dos métodos para preencher um texto que aceite System.Drawing.Brush como parâmetro, o ponto anterior pode ser ignorado.
  8. Feche a página.
  9. Guarde o documento.

Se precisarmos de traçar (contornar) objetos gráficos com um padrão de hachura em vez dos últimos 4 pontos, o seguinte será:

  1. Crie o objeto System.Drawing.Pen com o pincel de hachura.

  2. Defina esta caneta como o traço atual no PsDocument.

  3. Contorne o percurso gráfico com o traço atual ou contorne o texto. Se utilizarmos um dos métodos para contornar o texto que aceita System.Drawing.Pen como parâmetro, o ponto anterior pode ser ignorado.

  4. Feche a página.

  5. Guarde o 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 e outros sistemas operativos não Windows, oferecemos a utilização do nosso pacote NuGet Aspose.Page.Drawing. Utiliza o backend Aspose.Drawing em vez da biblioteca de sistema System.Drawing.

Assim, importe o namespace Aspose.Page.Drawing em vez do System.Drawing. No excerto de código acima, será utilizado Aspose.Page.Drawing.Rectangle em vez de System.Drawing.Rectangle, Aspose.Page.Drawing.Drawing2D.GraphicsPath será utilizado em vez de System.Drawing.Drawing2D.GraphicsPath e assim por diante. Os nossos exemplos de código no GitHub contêm todas as substituições necessárias.

Veja como trabalhar com um padrão de hachura num documento PS em Java.


O resultado da execução deste código é apresentado como

Adicionar padrão de hachura

Pode descarregar exemplos e ficheiros de dados do GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.