Trabalhar com Padrões de Hachura em ficheiro PS | Python
Adicionar Padrão de Hachura em Documento PS
Os padrões de hachura, geralmente compostos por imagens simples a preto e branco com vários desenhos de hachura, servem como padrões de textura em mosaico. No Aspose.Page para Python via .NET, estes padrões são representados pela classe aspose.pydrawing.drawing2d.HatchBrush, derivada de aspose.pydrawing.Brush. Ao contrário da aspose. pydrawing.TextureBrush, o HatchBrush oferece estilos predefinidos nomeados, definindo a imagem utilizada para o mosaico. O Aspose.Page para Python disponibiliza 53 estilos de hachura, todos os quais podem ser utilizados para preenchimento ou traçado no PsDocument.
Para pintar objetos gráficos com um padrão de hachura, crie um HatchBrush com o estilo de hachura pretendido e passe-o para set_paint() ou um dos métodos fill_text ou fill_and_stroke_text que aceite aspose.pydrawing.Brush.
Para contornar os objetos gráficos com um padrão de hachura, defina o padrão de hachura como a pintura atual em PsDocument, crie uma nova aspose.pydrawing.Pen e passe-a para set_stroke() ou um dos métodos outline_text() ou fill_and_stroke_text() que aceitam aspose.pydrawing.Pen.
O exemplo abaixo demonstra o preenchimento de uma forma com um padrão de hachura, a apresentação de vários estilos de hachura em Python e o preenchimento e contorno de texto com um padrão de hachura.
Este é o algoritmo para pintar objetos gráficos com um padrão de hachura num novo documento PS:
- Crie um fluxo de saída para o ficheiro PS resultante.
- Inicie PsSaveOptions.
- Crie um PsDocument com o fluxo de saída já criado e guarde as opções.
- Crie a forma ou fonte consoante o objeto que iremos preencher ou contornar.
- Crie um objeto de aspose.pydrawing.drawing2d.HatchBrush com o estilo pretendido.
- Defina a pintura de hachura como a pintura atual no PsDocument.
- Preencha a forma com a pintura atual ou preencha o texto. Se utilizarmos um dos métodos de preenchimento de texto que aceita aspose.pydrawing.Brush como parâmetro, o passo anterior pode ser ignorado.
- Feche a página.
- Guarde o documento.
Se precisarmos de traçar (contornar) objetos gráficos com um padrão de hachura em vez dos últimos 4 passos, teremos o seguinte aspeto:
- Defina a pintura de hachura como a pintura atual no PsDocument.
- Crie o objeto aspose.pydrawing.Pen.
- Defina este traço como o traço atual no PsDocument.
- Contorne a forma com a pintura atual e trace ou contorne o texto. Se utilizarmos um dos métodos para contornar o texto que aceita aspose.pydrawing.Pen como parâmetro, o passo anterior pode ser ignorado.
- Feche a página.
- Guarde o documento.
1# The path to the documents directory.
2data_dir = Util.get_data_dir_working_with_hatches()
3
4# Create an output stream for the PostScript document
5with open(data_dir + "AddHatchPattern_outPS.ps", "wb") as out_ps_stream:
6 # Create the save options with A4 size
7 options = PsSaveOptions()
8
9 # Create a new 1-paged PS Document
10 document = PsDocument(out_ps_stream, options, False)
11
12 x0 = 20.
13 y0 = 100.
14 square_side = 32.
15 width = 500.
16 sum_x = 0.
17
18 # Restore a graphics state
19 document.write_graphics_save()
20
21 # Translate to initial point
22 document.translate(x0, y0)
23
24 # Create a rectngle path for every pattern square
25 path = aspose.pydrawing.drawing2d.GraphicsPath()
26 path.add_rectangle(aspose.pydrawing.RectangleF(0, 0, square_side, square_side))
27
28 # Create a pen for outlining the pattern square
29 pen = GraphicsFactory.create_pen_by_color_and_width(aspose.pydrawing.Color.black, 2)
30
31 # For every hatch pattern style
32 hatch_style = 0
33 while hatch_style <= 52:
34 # Set the paint with the current hatch brush style
35 document.set_paint(aspose.pydrawing.drawing2d.HatchBrush(aspose.pydrawing.drawing2d.HatchStyle(hatch_style),
36 aspose.pydrawing.Color.black, aspose.pydrawing.Color.white))
37
38 # Calculate the displacement not to go beyond the page bounds
39 x = square_side
40 y = 0
41 if sum_x >= width:
42 x = -(sum_x - square_side)
43 y += square_side
44 # Translate the current graphics state
45 document.translate(x, y)
46 # Fill the pattern square
47 document.fill(path)
48 # Set the stroke
49 document.set_stroke(pen)
50 # Draw the square outline
51 document.draw(path)
52
53 # Calculate the distance from X0
54 if sum_x >= width:
55 sum_x = square_side
56 else:
57 sum_x += x
58 hatch_style += 1
59
60 # Restore the graphics state
61 document.write_graphics_restore()
62
63 # Fill the text with the hatch pattern
64 brush = aspose.pydrawing.drawing2d.HatchBrush(aspose.pydrawing.drawing2d.HatchStyle.DIAGONAL_CROSS,
65 aspose.pydrawing.Color.red, aspose.pydrawing.Color.yellow)
66 font = ExternalFontCache.fetch_dr_font("Arial", 96, aspose.pydrawing.FontStyle.BOLD)
67 document.fill_and_stroke_text("ABC", font, 200, 300, brush, pen)
68
69 # Outline text with the hatch pattern
70 brush = aspose.pydrawing.drawing2d.HatchBrush(aspose.pydrawing.drawing2d.HatchStyle.PERCENT50,
71 aspose.pydrawing.Color.blue, aspose.pydrawing.Color.white)
72 document.outline_text("ABC", font, 200, 400, GraphicsFactory.create_pen_by_brush_and_width(brush, 5))
73
74
75 # Close the current page
76 document.close_page()
77
78 # Save the document
79 document.save()
O resultado da execução deste código é
Pode descarregar exemplos e ficheiros de dados do GitHub.