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// Demonstrates all embedded hatch patterns that can be used to paint or outline shapes or text in PS document.
 2
 3string outputFileName = "AddHatchPattern_outPS.ps";
 4
 5//Create save options with A4 size
 6PsSaveOptions options = new PsSaveOptions();
 7
 8// Create new 1-paged PS Document
 9PsDocument document = new PsDocument(OutputDir + outputFileName, options, false);
10
11int x0 = 20;
12int y0 = 100;
13int squareSide = 32;
14int width = 500;
15int sumX = 0;
16
17//Restore graphics state
18document.WriteGraphicsSave();
19
20//Translate to initial point
21document.Translate(x0, y0);
22
23//Create rectngle path for every pattern square
24GraphicsPath path = new GraphicsPath();
25path.AddRectangle(new RectangleF(0, 0, squareSide, squareSide));
26
27//Create pen for outlining pattern square
28Pen pen = new Pen(Color.Black, 2);
29
30//For every hatch pattern style 
31for (HatchStyle hatchStyle = 0; hatchStyle <= (HatchStyle)52; hatchStyle++)
32{
33    //Set paint with current hatch brush style
34    document.SetPaint(new HatchBrush(hatchStyle, Color.Black, Color.White));
35
36    //Calculate displacement in order to don't go beyond the page bounds
37    int x = squareSide;
38    int y = 0;
39    if (sumX >= width)
40    {
41        x = -(sumX - squareSide);
42        y += squareSide;
43    }
44    //Translate current graphics state
45    document.Translate(x, y);
46    //Fill pattern square
47    document.Fill(path);
48    //Set stroke
49    document.SetStroke(pen);
50    //Draw square outline
51    document.Draw(path);
52
53    //Calculate distance from X0
54    if (sumX >= width)
55    {
56        sumX = squareSide;
57    }
58    else
59        sumX += x;
60}
61
62//Restore graphics state
63document.WriteGraphicsRestore();
64
65//Fill text with hatch pattern
66HatchBrush brush = new HatchBrush(HatchStyle.DiagonalCross, Color.Red, Color.Yellow);
67System.Drawing.Font font = new System.Drawing.Font("Arial", 96, FontStyle.Bold);
68document.FillAndStrokeText("ABC", font, 200, 300, brush, pen);
69
70//Outline text with hatch pattern
71brush = new HatchBrush(HatchStyle.Percent50, Color.Blue, Color.White);
72document.OutlineText("ABC", font, 200, 400, new Pen(brush, 5));
73
74//Close current page
75document.ClosePage();
76
77//Save the document
78document.Save();

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.