Skip to content

形状与绘图

本文档介绍直线(Line)、矩形(Square)、圆形(Circle)、多边形(Polygon)、折线(PolyLine)以及墨迹(Ink)注释的创建和属性设置。

直线注释(Line)

直线注释用于在页面上绘制一条从起点到终点的线段,支持箭头等端点样式,常用于标注和测量。

端点样式

通过 FSMarkup 类定义的常量设置起点/终点样式:

常量说明
FSMarkupEndingStyleNone0无端点
FSMarkupEndingStyleSquare1方形端点
FSMarkupEndingStyleCircle2圆形端点
FSMarkupEndingStyleDiamond3菱形端点
FSMarkupEndingStyleOpenArrow4开放箭头
FSMarkupEndingStyleClosedArrow5封闭箭头
FSMarkupEndingStyleButt6平头端点
FSMarkupEndingStyleROpenArrow7反向开放箭头
FSMarkupEndingStyleRClosedArrow8反向封闭箭头
FSMarkupEndingStyleSlash9斜线端点

核心方法

方法说明
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] 启用贝塞尔模式。