形状与绘图
本文档介绍直线(Line)、矩形(Square)、圆形(Circle)、多边形(Polygon)、折线(PolyLine)以及墨迹(Ink)注释的创建和属性设置。
直线注释(Line)
直线注释用于在页面上绘制一条从起点到终点的线段,支持箭头等端点样式,常用于标注和测量。
端点样式
通过 FSMarkup 类定义的常量设置起点/终点样式:
| 常量 | 值 | 说明 |
|---|---|---|
FSMarkupEndingStyleNone | 0 | 无端点 |
FSMarkupEndingStyleSquare | 1 | 方形端点 |
FSMarkupEndingStyleCircle | 2 | 圆形端点 |
FSMarkupEndingStyleDiamond | 3 | 菱形端点 |
FSMarkupEndingStyleOpenArrow | 4 | 开放箭头 |
FSMarkupEndingStyleClosedArrow | 5 | 封闭箭头 |
FSMarkupEndingStyleButt | 6 | 平头端点 |
FSMarkupEndingStyleROpenArrow | 7 | 反向开放箭头 |
FSMarkupEndingStyleRClosedArrow | 8 | 反向封闭箭头 |
FSMarkupEndingStyleSlash | 9 | 斜线端点 |
核心方法
| 方法 | 说明 |
|---|---|
getStartPoint / setStartPoint: | 获取/设置起点坐标 |
getEndPoint / setEndPoint: | 获取/设置终点坐标 |
getLineStartStyle / setLineStartStyle: | 获取/设置起点端点样式 |
getLineEndStyle / setLineEndStyle: | 获取/设置终点端点样式 |
getStyleFillColor / setStyleFillColor: | 获取/设置端点填充颜色 |
hasCaption / enableCaption: | 是否有标题/启用标题 |
getCaptionOffset / setCaptionOffset: | 获取/设置标题偏移 |
示例:创建带箭头的直线注释
objc
#import <FoxitRDK/FSPDFObjC.h>
FSPDFPage *page = [doc getPage:0];
FSRectF *rect = [[FSRectF alloc] initWithLeft1:100 bottom1:300 right1:400 top1:350];
FSAnnot *annot = [page addAnnot:FSAnnotLine rect:rect];
FSLine *line = [[FSLine alloc] initWithAnnot:annot];
FSPointF *startPt = [[FSPointF alloc] init];
[startPt set:100 y:325];
FSPointF *endPt = [[FSPointF alloc] init];
[endPt set:400 y:325];
[line setStartPoint:startPt];
[line setEndPoint:endPt];
// 起点无端点,终点为封闭箭头
[line setLineStartStyle:FSMarkupEndingStyleNone];
[line setLineEndStyle:FSMarkupEndingStyleClosedArrow];
[line setBorderColor:0xFFFF0000];
[line setContent:@"请关注此区域。"];
[line resetAppearanceStream];
矩形注释(Square)与圆形注释(Circle)
矩形和圆形注释用于在页面上绘制框选标记,均支持边框颜色和内部填充颜色。
示例:创建矩形注释
objc
FSPDFPage *page = [doc getPage:0];
FSRectF *rect = [[FSRectF alloc] initWithLeft1:100 bottom1:600 right1:300 top1:700];
FSAnnot *annot = [page addAnnot:FSAnnotSquare rect:rect];
FSSquare *square = [[FSSquare alloc] initWithAnnot:annot];
[square setBorderColor:0xFF0000FF]; // 蓝色边框
[square setFillColor:0x330000FF]; // 半透明蓝色填充
[square setOpacity:0.8f];
[square setContent:@"标记区域"];
[square resetAppearanceStream];
示例:创建圆形注释
objc
FSPDFPage *page = [doc getPage:0];
FSRectF *rect = [[FSRectF alloc] initWithLeft1:100 bottom1:400 right1:250 top1:500];
FSAnnot *annot = [page addAnnot:FSAnnotCircle rect:rect];
FSCircle *circle = [[FSCircle alloc] initWithAnnot:annot];
[circle setBorderColor:0xFFFF6600]; // 橙色边框
[circle setFillColor:0x22FF6600]; // 半透明橙色填充
[circle setContent:@"重点内容"];
[circle resetAppearanceStream];
多边形注释(Polygon)与折线注释(PolyLine)
多边形和折线注释由多个顶点定义:多边形自动闭合首尾形成封闭区域,折线则保持开放。
示例:创建多边形注释
objc
FSPDFPage *page = [doc getPage:0];
FSRectF *rect = [[FSRectF alloc] initWithLeft1:100 bottom1:200 right1:300 top1:350];
FSAnnot *annot = [page addAnnot:FSAnnotPolygon rect:rect];
FSMarkup *polygon = [[FSMarkup alloc] initWithAnnot:annot];
// 设置顶点
FSPointFArray *vertices = [[FSPointFArray alloc] init];
FSPointF *p1 = [[FSPointF alloc] init]; [p1 set:150 y:200];
FSPointF *p2 = [[FSPointF alloc] init]; [p2 set:300 y:250];
FSPointF *p3 = [[FSPointF alloc] init]; [p3 set:280 y:350];
FSPointF *p4 = [[FSPointF alloc] init]; [p4 set:120 y:330];
[vertices add:p1];
[vertices add:p2];
[vertices add:p3];
[vertices add:p4];
[polygon setVertexes:vertices];
[polygon setBorderColor:0xFF009900];
[polygon resetAppearanceStream];
墨迹注释(Ink)
墨迹注释记录用户的手绘轨迹,是手写批注、自由绘图等场景的基础。FSInk 注释通过 FSPath 对象描述笔迹路径。
FSPath 对象
FSPath 是描述墨迹笔画的核心数据结构,支持以下操作:
| 方法 | 说明 |
|---|---|
moveTo: | 开始新笔画(移动到起点) |
lineTo: | 从当前位置画直线到指定点 |
cubicBezierTo:point2:point3: | 从当前位置画三次贝塞尔曲线 |
closeFigure | 关闭当前图形路径 |
getPointCount / getPoint: | 获取点数量/指定索引的点 |
示例:创建墨迹注释
objc
#import <FoxitRDK/FSPDFObjC.h>
FSPDFPage *page = [doc getPage:0];
FSRectF *rect = [[FSRectF alloc] initWithLeft1:50 bottom1:100 right1:350 top1:300];
FSAnnot *annot = [page addAnnot:FSAnnotInk rect:rect];
FSInk *ink = [[FSInk alloc] initWithAnnot:annot];
// 构造笔迹路径
FSPath *path = [[FSPath alloc] init];
FSPointF *pt1 = [[FSPointF alloc] init]; [pt1 set:60 y:150];
FSPointF *pt2 = [[FSPointF alloc] init]; [pt2 set:120 y:200];
FSPointF *pt3 = [[FSPointF alloc] init]; [pt3 set:200 y:160];
FSPointF *pt4 = [[FSPointF alloc] init]; [pt4 set:300 y:250];
[path moveTo:pt1];
[path lineTo:pt2];
[path lineTo:pt3];
[path lineTo:pt4];
[ink setInkList:path];
[ink setBorderColor:0xFF000000];
[ink setOpacity:0.9f];
[ink resetAppearanceStream];
提示
如果希望使用贝塞尔曲线实现更平滑的手绘效果,可调用 [ink enableUseBezier:YES] 启用贝塞尔模式。