Trabalhar com Clipes em Ficheiro PS | Java
Adicionar Clip em Documento PS
Um clipe num documento PS é um caminho que delimita o conteúdo do estado gráfico atual que será apresentado no visualizador ou editor PS. O conteúdo que ficar para além dos limites será recortado.
Um caminho de recorte em Java pode ser atribuído de três formas:
- por qualquer classe implementada java.awt.Shape que possa conter quaisquer formas fechadas;
- por contorno de texto;
- por imagem bicolor de 1 bpp (bits por pixel) como máscara de stencil;
Neste momento, a biblioteca Aspose.Page para Java oferece a primeira e a segunda formas de recorte. No exemplo abaixo, obtemos uma forma circular como caminho de recorte e recortamos um retângulo preenchido a azul no mesmo estado gráfico.
Para adicionar um clip ao novo PsDocument com a biblioteca Aspose.Page para Java, neste exemplo, seguimos os seguintes passos:
- Crie um fluxo de saída para o ficheiro PS resultante.
- Crie um objeto PsSaveOptions com as opções padrão.
- Crie um PsDocument de 1 página com um fluxo de saída já criado e opções de guardar.
- Crie um novo estado gráfico.
- Crie uma forma circular (objeto java.awt.geom.Ellipse2D).
- Defina um clipe com este percurso.
- Defina uma pintura para o estado gráfico atual do PsDocument.
- Preencha o percurso retangular com a pintura atual.
- Saia do estado gráfico atual para o nível superior.
- Transfira para o local do retângulo preenchido.
- Trace com uma linha tracejada os limites do mesmo retângulo acima do preenchido para mostrar os limites do retângulo preenchido recortado.
- Feche a página.
- Guarde o documento.
1//Create an output stream for the PostScript document
2FileOutputStream outPsStream = new FileOutputStream(dataDir + "Clipping_outPS.ps");
3//Create save options with A4 size
4PsSaveOptions options = new PsSaveOptions();
5
6// Create a new PS Document with the page opened
7PsDocument document = new PsDocument(outPsStream, options, false);
8
9//Create a rectangle
10Shape rectangle = new Rectangle2D.Float(0, 0, 300, 200);
11
12//Set the paint in the upper level graphics state
13document.setPaint(Color.BLUE);
14
15//Save the graphics state to return back to this state after the transformation
16document.writeGraphicsSave();
17
18//Displace the current graphics state on 100 points to the right and 100 points to the bottom.
19document.translate(100, 100);
20
21//Create a circle shape
22Shape circle = new Ellipse2D.Float(50, 0, 200, 200);
23
24//Add clipping by the circle to the current graphics state
25document.clip(circle);
26
27//Fill the rectangle in the current graphics state (with clipping)
28document.fill(rectangle);
29
30//Restore the graphics state to the previus (upper) level
31document.writeGraphicsRestore();
32
33//Displace the upper-level graphics state on 100 points to the right and 100 points to the bottom.
34document.translate(100, 100);
35
36BasicStroke stroke = new BasicStroke(2,
37 BasicStroke.CAP_BUTT,
38 BasicStroke.JOIN_MITER,
39 10.0f, new float []{5.0f}, 0.0f);
40
41document.setStroke(stroke);
42
43//Draw the rectangle in the current graphics state (has no clipping) above the clipped rectangle
44document.draw(rectangle);
45
46//Close the current page
47document.closePage();
48//Save the document
49document.save();
Veja como trabalhar com recortes em documentos PS em .NET.
O resultado da execução deste código é apresentado como
No próximo exemplo, obtemos um tipo de letra utilizado para recortar um retângulo preenchido a azul com o contorno do texto.
Para adicionar um recorte por texto ao novo PsDocument com a biblioteca Aspose.Page para Java, neste exemplo, seguimos os seguintes passos:
- Crie um fluxo de saída para o ficheiro PS resultante.
- Crie o objeto PsSaveOptions com as opções padrão.
- Crie um PsDocument de 1 página com um fluxo de saída já criado e opções de guardar.
- Crie um novo estado gráfico.
- Crie uma fonte.
- Defina um recorte com o texto e o tipo de letra.
- Defina uma pintura para o estado gráfico atual do PsDocument.
- Preencha o percurso do retângulo com a pintura atual.
- Saia do estado gráfico atual para o nível superior.
- Translação para o local do retângulo preenchido.
- Trace com uma linha tracejada os limites do mesmo retângulo acima do preenchido para mostrar os limites do retângulo preenchido recortado.
- Feche a página.
- Guarde o documento.
1//Create output stream for PostScript document
2FileOutputStream outPsStream = new FileOutputStream(dataDir + "Clipping_outPS.ps");
3//Create save options with A4 size
4PsSaveOptions options = new PsSaveOptions();
5
6// Create a new PS Document with the page opened
7PsDocument document = new PsDocument(outPsStream, options, false);
8
9//Create a rectangle
10Shape rectangle = new Rectangle2D.Float(0, 0, 300, 200);
11
12//Set paint in the upper-level graphics state
13document.setPaint(Color.BLUE);
14
15//Save graphics state to return back to this state after the transformation
16document.writeGraphicsSave();
17
18//Displace current graphics state on 100 points to the right and 100 points to the bottom.
19document.translate(100, 100);
20
21int fontSize = 120;
22Font font = new Font("Arial", Font.BOLD, fontSize);
23
24//Clip rectangle by text's outline
25document.clipText("ABC", font, 20, fontSize + 10);
26document.fill(rectangle);
27
28//Restore graphics state to the previous (upper) level
29document.writeGraphicsRestore();
30
31//Displace upper-level graphics state on 100 points to the right and 100 points to the bottom.
32document.translate(100, 100);
33
34BasicStroke stroke = new BasicStroke(2,
35 BasicStroke.CAP_BUTT,
36 BasicStroke.JOIN_MITER,
37 10.0f, new float []{5.0f}, 0.0f);
38
39document.setStroke(stroke);
40
41//Draw the rectangle in the current graphics state (has no clipping) above the clipped rectangle
42document.draw(rectangle);
43
44//Close the current page
45document.closePage();
46//Save the document
47document.save();
Veja como trabalhar com clips em documentos PS em .NET.
O resultado da execução deste código aparece como
Pode descarregar exemplos e ficheiros de dados do GitHub.