Работа с образцами штриховки в PostScript | .NET
Добавить образец штриховки в документ PS
Образец штриховки представляет собой образец мозаики текстуры, обычно представленный небольшим двухцветным (обычно черно-белым) простым изображением. Основное содержание этих небольших изображений — различные штриховки.
Для рисования штриховками на платформе .NET предусмотрен отдельный класс, производный от System.Drawing.Brush, System.Drawing.HatchBrush. Его отличие от System.Drawing.TextureBrush заключается в том, что он имеет имена предопределенных стилей, определяющих, какое изображение использовать для мозаики. Платформа .NET предлагает 53 стиля штриховки, и все 52 стиля можно использовать для заполнения или обводки (обводки) в PsDocument.
Чтобы рисовать графические объекты с помощью штриховки в библиотеке Aspose.Page для .NET, достаточно просто передать System.Drawing.HatchBrush в SetPaint() или один из FillText. () или FillAndStrokeText(), принимающие System.Drawing.Brush в качестве параметра.
Чтобы обвести графические объекты штриховкой в библиотеке Aspose.Page для .NET, кто-то должен создать новый System.Drawing.Pen с помощью System.Drawing.HacthBrush и передать его в SetStroke. () или один из методов OutlineText() или FillAndStrokeText(), которые принимают System.Drawing.Pen в качестве параметра.
В приведенном ниже примере мы демонстрируем, во-первых, как заполнить фигуру штриховкой, затем все разнообразие стилей штриховки в .NET и, наконец, как заполнить и обвести текст штриховкой.
Алгоритм рисования графических объектов штриховкой в новом PS-документе включает следующие этапы:
- Создайте выходной поток для полученного PS-файла.
- Создайте PsSaveOptions.
- Создайте PsDocument с уже созданным выходным потоком и сохраните параметры.
- Создайте необходимый графический контур или шрифт в зависимости от того, какой объект мы собираемся заливать или обводить.
- Создайте объект System.Drawing.HatchBrush с желаемым стилем.
- Установите кисть штриховки в качестве текущей краски в PsDocument.
- Заполните графический контур текущей краской или заполните текст. Если мы воспользуемся одним из методов заливки текста, принимающим в качестве параметра System.Drawing.Brush, предыдущий пункт можно проигнорировать.
- Закройте страницу.
- Сохраните документ.
Если нам нужно обводка (обведение) графических объектов штриховкой вместо последних 4 точек, то будет следующее:
Создайте объект System.Drawing.Pen с помощью кисти штриховки.
Установите это перо в качестве текущего штриха в PsDocument.
Обведите графический контур текущей обводкой или обведите текст. Если мы используем один из методов выделения текста, который принимает System.Drawing.Pen в качестве параметра, предыдущую точку можно игнорировать.
Закройте страницу.
Сохраните документ.
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}
Для Linux, MacOS и других операционных систем, отличных от Windows, мы предлагаем использовать наш пакет Nuget Aspose.Page.Drawing. Он использует серверную часть Aspose.Drawing вместо системной библиотеки System.Drawing.
Поэтому импортируйте пространство имен Aspose.Page.Drawing вместо System.Drawing. В приведенном выше фрагменте кода вместо System.Drawing.Rectangle будет использоваться Aspose.Page.Drawing.Rectangle, Aspose.Page.Drawing.Drawing2D.GraphicsPath будет использоваться вместо System.Drawing.Drawing2D.GraphicsPath и так далее. Наши примеры кода на GitHub содержат все необходимые замены.
См. работу с образцом штриховки в документе PS в Java.
Результат запуска этого кода выглядит так:
Вы можете загрузить примеры и файлы данных с сайта GitHub.