Utilização de utilitários gráficos XPS | .NET

Como produzir facilmente formas simples em XPS

A especificação XPS define elementos gráficos primitivos que podem ser utilizados para compor qualquer forma complexa. O Aspose.Page para .NET disponibiliza classes que encapsulam estes elementos. No entanto, a sua utilização pode ser um pouco tedioso quando é necessário produzir formas relativamente simples, como um setor ou segmento circular, ou um n-gono regular inscrito ou circunscrito num círculo. Mesmo desenhar um círculo ou uma elipse não é tão simples como poderia e provavelmente deveria ser. É por isso que o Aspose.Page também fornece um conjunto de métodos utilitários que provavelmente lhe pouparão tempo ao executar tais tarefas.

No exemplo seguinte, utilizamos todos os utilitários de forma disponíveis. Note que todos eles devolvem um objeto de XpsPathGeometry, que pode ser utilizado para construir caminhos XPS. E para estes caminhos, pode especificar propriedades de aparência — pincéis, padrão de traçado, opacidade, etc.

 1// Using shape utilities for adding shapes to XPS document.
 2
 3string outputFileName = "UseShapeUtilsXPS_out.xps";
 4
 5// Create new XPS Document
 6using (XpsDocument doc = new XpsDocument())
 7{
 8    // Set first page's size.
 9    doc.Page.Width = 650f;
10    doc.Page.Height = 240f;
11
12    // Draw a circle with center (120, 120) and radius 100.
13    XpsPath path = doc.CreatePath(doc.Utils.CreateCircle(new PointF(120f, 120f), 100f));
14    path.Fill = doc.CreateSolidColorBrush(Color.Green);
15    doc.Add(path);
16
17    // Inscribe a regular pentagon in the circle.
18    path = doc.CreatePath(doc.Utils.CreateRegularInscribedNGon(5, new PointF(120f, 120f), 100f));
19    path.Fill = doc.CreateSolidColorBrush(Color.Red);
20    doc.Add(path);
21
22    // Circumscribe a regular hexagon around the circle.
23    path = doc.CreatePath(doc.Utils.CreateRegularCircumscribedNGon(6, new PointF(120f, 120f), 100f));
24    path.Stroke = doc.CreateSolidColorBrush(Color.Magenta);
25    path.StrokeThickness = 3f;
26    doc.Add(path);
27
28    // Draw a sector of the circle centered at (340, 120), starting at -45 degrees and ending at +45 degrees.
29    path = doc.CreatePath(doc.Utils.CreatePieSlice(new PointF(340f, 120f), 100f, -45f, 45f));
30    path.Stroke = doc.CreateSolidColorBrush(Color.Red);
31    path.StrokeThickness = 5f;
32    doc.Add(path);
33
34    // Draw a segment of the circle centered at (340, 120), starting at -45 degrees and ending at +45 degrees.
35    path = doc.CreatePath(doc.Utils.CreateCircularSegment(new PointF(340f, 120f), 100f, -45f, 45f));
36    path.Fill = doc.CreateSolidColorBrush(Color.Black);
37    doc.Add(path);
38
39    // Draw a rectangle with the top left vertex (530, 20), width 100 units and height 200 units.
40    path = doc.CreatePath(doc.Utils.CreateRectangle(new RectangleF(530f, 20f, 100f, 200f)));
41    path.Stroke = doc.CreateSolidColorBrush(Color.Red);
42    doc.Add(path);
43
44    // Draw an ellipse with center (580, 120) and radii 50 and 100.
45    path = doc.CreatePath(doc.Utils.CreateEllipse(new PointF(580f, 120f), 50f, 100f));
46    path.Fill = doc.CreateSolidColorBrush(Color.Yellow);
47    doc.Add(path);
48
49    doc.Save(OutputDir + outputFileName);
50}

Começamos por um novo documento XPS, ajustando depois o tamanho da primeira página. A primeira forma que colocamos na página é um círculo (especificado pelo seu centro e raio) preenchido com um verde sólido. Em seguida, inscrevemos um pentágono regular vermelho sem preenchimento nesse círculo. Em seguida, surge um hexágono regular circunscrito com contorno magenta.

À direita, desenhamos primeiro um sector circular vermelho (ou uma “fatia de pizza”) entre -45 e +45 graus e, em seguida, um segmento circular preto com os mesmos parâmetros sobre o sector.

A última parte do desenho é constituída por um retângulo vermelho (especificado pelo vértice superior esquerdo e pelas dimensões) e por uma elipse amarela (especificada pelo centro e pelos raios), inscrita no retângulo. Aqui, controlamos a inscrição “manualmente”.

Eis o que devemos ver no ficheiro XPS guardado:

Utilitários de formas XPS

Como adicionar facilmente uma imagem numa página XPS

Com as primitivas definidas pela especificação XPS, a adição de uma imagem a uma página consiste em dois passos:

Mas, felizmente, existe um método conveniente entre os utilitários gráficos XPS da API Aspose.Page para .NET que pode fazer (quase) todo o trabalho por si. Também oferece vários modos de ajuste. Vejamos o exemplo abaixo:

 1// Using image utilities for adding images to XPS document.
 2
 3string outputFileName = "UseImageUtilsXPS_out.xps";
 4
 5// Create new XPS Document
 6using (XpsDocument doc = new XpsDocument())
 7{
 8    // Set first page's size.
 9    doc.Page.Width = 540f;
10    doc.Page.Height = 220f;
11
12    // Draw the image box.
13    RectangleF imageBox = new RectangleF(10f, 10f, 200f, 200f);
14    XpsPath path = doc.AddPath(doc.Utils.CreateRectangle(imageBox));
15    path.Stroke = doc.CreateSolidColorBrush(Color.Black);
16    // Add an image to fit width.
17    path = doc.Utils.CreateImage(DataDir + "R08LN_NN.jpg", imageBox, ImageMode.FitToWidth);
18    // Prevent tiling.
19    ((XpsImageBrush)path.Fill).TileMode = XpsTileMode.None;
20    doc.Add(path);
21
22    // Add an image to fit width.
23    doc.Add(doc.Utils.CreateImage(DataDir + "R08LN_NN.jpg", new RectangleF(220f, 10f, 200f, 100f), ImageMode.FitToHeight));
24
25    // Add an image to fit width.
26    doc.Add(doc.Utils.CreateImage(DataDir + "R08LN_NN.jpg", new RectangleF(430f, 10f, 100f, 200f), ImageMode.FitToBox));
27
28    // Save resultant XPS document 
29    doc.Save(OutputDir + outputFileName);
30}

Mais uma vez, começamos com um novo documento XPS e ajustamos o tamanho da primeira página. De notar que, por defeito, a imagem utilizada como pincel se dividirá em blocos na área retangular da mesma forma que se fosse utilizada no modo XpsTileMode.Tile. No entanto, na primeira parte do exemplo, demonstramos como evitar este agrupamento.

Assim, primeiro queremos que a imagem apareça em (10, 10) e se ajuste à largura da caixa retangular, que tem 200 unidades de largura e 200 unidades de altura. Para ver o resultado com mais clareza, primeiro desenhamos a própria caixa. De seguida, criamos a imagem (note-se que, na verdade, é um caminho preenchido). Por fim, após obter o preenchimento do caminho e convertê-lo para XpsImageBrush, definimos a propriedade TileMode como XpsTileMode.None.

À direita, posicionamos a mesma imagem e ajustamo-la à altura da caixa de imagem. Observe o mosaico.

Por fim, posicionamos novamente a mesma imagem à direita e ajustamo-la à altura e à largura da caixa de imagem, o que distorce a imagem.

E aqui está o resultado no ficheiro XPS guardado:

Utilitários de imagem XPS

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.