上一章虽然增加了按路径绘制文本,支持按矩形、圆形、椭圆等路径,但测试时发现通过调整尺寸、偏移量等方式不是很好控制文本的位置。相对而言,使用弧线路径,通过弧线起始角度及弧线角度控制文本位置更简单。同时基于路径绘制文本时可以设置文本靠左、居中或靠右显示,也能调整文本位置。
SKPath的添加弧线函数原型如下,主要是设置包含弧线的椭圆的外接矩形,同时设置弧线的起始角度及圆弧角度。
// oval:
// The bounds of oval used to define the size of the arc.
//
// startAngle:
// Starting angle (in degrees) where the arc begins.
//
// sweepAngle:
// Sweep angle (in degrees) measured clockwise.
public unsafe void AddArc(SKRect oval, float startAngle, float sweepAngle)
调整SealElement类定义,增加文本对齐属性(类型为SKTextAlign),绘制弧线时的起始角度及弧线角度值保存到之前定义的FontStartPoint属性内(沿路径绘制文本时该属性用不上)。
调整新建/编辑文本窗口,增加文本对齐方式、起始角度及弧线角度等控件,如下图所示:
调整绘图文本函数,增加添加圆弧路径及设置文本对齐的代码,主要调整如下:
if (element.IsAlongPath)
{
skPaint.TextAlign = element.TextAlign;
...
...
switch(element.PathType)
{
...
...
case FigureType.Arc:
textPath.AddArc(new SKRect(unitSize * element.StartPoint.X,
unitSize * element.StartPoint.Y,
unitSize * (element.StartPoint.X + element.EndPoint.X),
unitSize * (element.StartPoint.Y + element.EndPoint.Y)),
element.FontStartPoint.X, element.FontStartPoint.Y);
break;
}
...
...
}
最后是绘制效果及导出为图片的效果。
至此,印章设计功能暂告一段落,后续印章管理的功能设计及开发会转向印章创建及管理、给图片/pfd文件盖章等方面,同时也会找一些开源网页设计项目,学习将印章设计功能转为网页实现。
参考文献:
[1]https://learn.microsoft.com/zh-cn/dotnet/api/skiasharp?view=skiasharp-2.88
[2]https://www.cnblogs.com/bhnian/p/16343557.html
[3]https://www.jb51.net/html5/676291.html
[4]https://blog.csdn.net/L_Shaker/article/details/127313457