创建注释
ComPDFKit 支持全类型的注释,包括便签,链接,图形,标记,图章,手绘,音频注释,满足多样的注释需求。
创建便签注释
便签注释表现为小型图标或标签,用户点击后可以展开显示相关注释内容,这种注释类型用于添加个人笔记、提醒或备注,使用户能够在文档中添加个性化的附加信息,而不影响原始文本的可读性。
创建便签的步骤如下:
1.获取需要创建注释的页面对象。
2.在该页面上创建便签注释对象。
3.设置注释属性。
4.更新注释外观使其显示在文档上。
创建便签的代码如下:
// 获取需要创建便签的页面对象
if let page = document?.page(at: 0) {
// 在该页面上创建便签注释
let text = CPDFTextAnnotation(document: document)
// 设置便签注释属性
text?.contents = "test"
text?.bounds = CGRect(x: 50, y: 200, width: 50, height: 50)
text?.color = UIColor.yellow
// 更新注释外观使其显示在文档上
page.addAnnotation(text!)
}
// 获取需要创建便签的页面对象
CPDFPage *page = [document pageAtIndex:0];
// 在该页面上创建便签注释
CPDFTextAnnotation *text = [[CPDFTextAnnotation alloc] initWithDocument:document];
// 设置便签注释属性
text?.contents = @"test";
text?.bounds = CGRectMake(50, 200, 50, 50);
text?.color = [UIColor yellowColor];
// 更新注释外观使其显示在文档上
[page addAnnotation:text!];
创建链接注释
链接注释使用户能够直接跳转到文档中的其他位置或外部资源,提供更丰富的导航体验。
创建链接注释的步骤如下:
- 获取需要创建注释的页面对象。
- 在该页面上创建链接注释对象。
- 通过
CPDFDestination
设置链接跳转到第2页。 - 设置注释属性,并将
CPDFDestination
对象附加到注释上。
创建链接的代码如下:
// 获取需要创建注释的页面对象。
if let page = document?.page(at: 0) {
// 在该页面上创建链接注释。
// 通过 `CPDFDestination` 设置链接跳转到第2页。
if let dest = CPDFDestination(document: document, pageIndex: 1),
let link = CPDFLinkAnnotation(document: document) {
// 设置注释属性,并将 `CPDFDestination` 对象附加到注释上。
link?.bounds = CGRect(x: 50, y: 100, width: 50, height: 50)
link?.destination = dest
// link.url = "https://www."
page.addAnnotation(link!)
}
}
// 获取需要创建注释的页面对象。
CPDFPage *page = [document pageAtIndex:0];
// 在该页面上创建链接注释。
// 通过`CPDFDestination`设置链接跳转到第2页。
CPDFDestination *dest = [[CPDFDestination alloc] initWithDocument:document pageIndex:1];
CPDFLinkAnnotation *link = [[CPDFLinkAnnotation alloc] initWithDocument:document];
// 设置注释属性,并将`CPDFDestination`对象附加到注释上。
link.bounds = CGRectMake(50, 100, 50, 50);
link.destination = dest; // link.URL = @"https://www.";
[page addAnnotation:link];
创建文本注释
文本注释允许用户在PDF文档中插入自由格式的文字,用于添加注解、评论或解释文档内容。
创建文本注释的步骤如下:
1.获取需要创建注释的页面对象。
2.在该页面上创建文本注释对象。
3.设置注释属性。
4.更新注释外观使其显示在文档上。
创建文本注释的代码如下:
// 获取需要创建注释的页面对象。
if let page = document?.page(at: 0) {
// 在该页面上创建文本注释。
let freeText = CPDFFreeTextAnnotation(document: document)
// 设置注释属性。
freeText?.contents = "\n\nSome swift brown fox snatched a gray hare out of the air by freezing it with an angry glare."
freeText?.bounds = CGRect(x: 10, y: 200, width: 160, height: 570)
freeText?.font = UIFont(name: "Helvetica", size: 12)
freeText?.fontColor = UIColor.red
freeText?.alignment = .left
// 添加一个自由文本注释到页面
page.addAnnotation(freeText!)
}
// 获取需要创建注释的页面对象。
CPDFPage *page = [document pageAtIndex:0];
// 在该页面上创建文本注释。
CPDFFreeTextAnnotation *freeText = [[CPDFFreeTextAnnotation alloc] initWithDocument:document];
// 设置注释属性。
freeText.contents = @"\n\nSome swift brown fox snatched a gray hare out of the air by freezing it with an angry glare.";
freeText.bounds = CGRectMake(10, 200, 160, 570);
freeText.font = [UIFont fontWithName:@"Helvetica" size:12];
freeText.fontColor = [UIColor redColor];
freeText.alignment = NSTextAlignmentLeft;
// add a freetext annotation for page
[page1 addAnnotation:freeText1];
创建图形注释
图形注释包括矩形、圆形和箭头等形状,用于在文档中绘制图形以突出或标记特定区域,表达文字不易描述的信息。
创建图形注释的步骤如下:
1.获取需要创建注释的页面对象。
2.在该页面上依次创建矩形,圆形,线段注释对象。
3.设置注释属性。
4.依次更新注释外观使其显示在文档上。
创建图形注释的代码如下:
// 获取需要创建注释的页面对象。
let border1 = CPDFBorder(style: .dashed, lineWidth: 1, dashPattern: [2, 1])
let border2 = CPDFBorder(style: .dashed, lineWidth: 1, dashPattern: [2, 0])
if let page = document?.page(at: 0) {
// 在该页面上创建矩形释对象。
let square = CPDFSquareAnnotation(document: document)
// 设置注释属性。
square?.bounds = CGRect(x: 400, y: 200, width: 80, height: 300)
square?.color = UIColor.green
square?.interiorColor = UIColor.purple
square?.opacity = 1.0
square?.interiorOpacity = 1.0
square?.border = border2
page.addAnnotation(square!)
// 在该页面上创建圆形注释对象。
let circle = CPDFCircleAnnotation(document: document)
// 设置注释属性。
circle?.bounds = CGRect(x: 300, y: 300, width: 100, height: 100)
circle?.color = UIColor.red
circle?.interiorColor = UIColor.yellow
circle?.opacity = 0.5
circle?.interiorOpacity = 0.5
circle?.border = border1
page.addAnnotation(circle!)
// 在该页面上创建线段注释对象。
let line = CPDFLineAnnotation(document: document)
// 设置注释属性。
line?.startPoint = CGPoint(x: 350, y: 270)
line?.endPoint = CGPoint(x: 260, y: 370)
line?.startLineStyle = .square
line?.endLineStyle = .circle
line?.color = UIColor.red
line?.interiorColor = UIColor.yellow
line?.opacity = 0.5
line?.interiorOpacity = 0.5
line?.border = border1
line?.contents = "Dashed Captioned"
page.addAnnotation(line!)
}
// 获取需要创建注释的页面对象。
CPDFBorder *border1 = [[CPDFBorder alloc] initWithStyle:CPDFBorderStyleDashed
lineWidth:1
dashPattern:@[@(2), @(1)]];
CPDFBorder *border2 = [[CPDFBorder alloc] initWithStyle:CPDFBorderStyleDashed
lineWidth:1
dashPattern:@[@(2), @(0)]];
CPDFPage *page = [document pageAtIndex:0];
// 在该页面上创建矩形释对象。
CPDFSquareAnnotation *square = [[CPDFSquareAnnotation alloc] initWithDocument:document];
// 设置注释属性。
square.bounds = CGRectMake(400, 200, 80, 300);
square.color = [UIColor greenColor];
square.interiorColor = [UIColor purpleColor];
square.opacity = 1.0;
square.interiorOpacity = 1.0;
square.border = border2;
[page addAnnotation:square];
// 在该页面上创建圆形注释对象。
CPDFCircleAnnotation *circle = [[CPDFCircleAnnotation alloc] initWithDocument:document];
// 设置注释属性。
circle.bounds = CGRectMake(300, 300, 100, 100);
circle.color = [UIColor redColor];
circle.interiorColor = [UIColor yellowColor];
circle.opacity = 0.5;
circle.interiorOpacity = 0.5;
circle.border = border1;
[page addAnnotation:circle];
// 在该页面上创建线段注释对象。
CPDFLineAnnotation *line = [[CPDFLineAnnotation alloc] initWithDocument:document];
// 设置注释属性。
line.startPoint = CGPointMake(350, 270);
line.endPoint = CGPointMake(260, 370);
line.startLineStyle = CPDFLineStyleSquare;
line.endLineStyle = CPDFLineStyleCircle;
line.color = [UIColor redColor];
line.interiorColor = [UIColor yellowColor];
line.opacity = 0.5;
line.interiorOpacity = 0.5;
line1.border = border1;
[line setContents:@"Dashed Captioned"];
[page addAnnotation:line1];
线段注释类型枚举
Name | Description |
---|---|
CPDFLineStyleNone | 无特殊的线结束样式。 |
CPDFLineStyleOpenArrow | 两条短线以锐角相交,形成一个开放的箭头头部。 |
CPDFLineStyleClosedArrow | 两条短线以锐角相交,如 LINETYPE_ARROW 样式,并通过第三条线连接,形成一个填充了注释内部颜色的三角形封闭箭头头部。 |
CPDFLineStyleSquare | 线条开头或结尾样式为正方形。 |
CPDFLineStyleCircle | 线条开头或结尾样式为圆。 |
CPDFLineStyleDiamond | 线条开头或结尾样式为菱形。 |
创建标记注释
在 PDF 文档中添加标记,以突出、强调或说明特定内容,例如重要的段落、行或单词、关键词或表格等。ComPDFKit 提供高亮,下划线,波浪线,删除线四种标记注释。
创建标记注释的步骤如下:
1.获取需要创建注释的页面对象。
2.通过页面对象创建文本对象。
3.使用该文本对象取得需要添加标记的文本位置。
4.在该页面上创建对应的标记对象。
5.设置标记对象的属性。
6.更新注释外观使其显示在文档上。
以高亮注释为例,创建标记注释的代码如下:
// 获取需要创建注释的页面对象。
if let page = document?.page(at: 0) {
// 获取搜索结果的数组
if let resultArray = document?.findString("Page", withOptions: .caseInsensitive) as? [[CPDFSelection]] {
// 获取搜索结果中第一个页面
if let selections = resultArray[safe: 3] {
// 获取第一个页面上的第一个搜索结果
if let selection = selections.first {
var quadrilateralPoints: [CGPoint] = []
let bounds = selection.bounds
quadrilateralPoints?.append(CGPoint(x: bounds.minX, y: bounds.maxY))
quadrilateralPoints?.append(CGPoint(x: bounds.maxX, y: bounds.maxY))
quadrilateralPoints?.append(CGPoint(x: bounds.minX, y: bounds.minY))
quadrilateralPoints?.append(CGPoint(x: bounds.maxX, y: bounds.minY))
// 创建一个高亮注释。
if let highlight = CPDFMarkupAnnotation(document: document, markupType: .highlight) {
highlight.color = UIColor.yellow
highlight.quadrilateralPoints = quadrilateralPoints!
page.addAnnotation(highlight)
}
}
}
}
}
// 获取需要创建注释的页面对象。
CPDFPage *page = [document pageAtIndex:0];
// 获取搜索结果的数组
NSArray *resultArray = [document findString:@"Page" withOptions:CPDFSearchCaseInsensitive];
// 获取搜索结果中第一个页面
NSArray *selections = [resultArray objectAtIndex:3];
// 获取第一个页面上的第一个搜索结果
CPDFSelection *selection = [selections objectAtIndex:0];
NSMutableArray *quadrilateralPoints = [NSMutableArray array];
CGRect bounds = selection.bounds;
[quadrilateralPoints addObject:[NSValue valueWithCGPoint:CGPointMake(CGRectGetMinX(bounds), CGRectGetMaxY(bounds))]];
[quadrilateralPoints addObject:[NSValue valueWithCGPoint:CGPointMake(CGRectGetMaxX(bounds), CGRectGetMaxY(bounds))]];
[quadrilateralPoints addObject:[NSValue valueWithCGPoint:CGPointMake(CGRectGetMinX(bounds), CGRectGetMinY(bounds))]];
[quadrilateralPoints addObject:[NSValue valueWithCGPoint:CGPointMake(CGRectGetMaxX(bounds), CGRectGetMinY(bounds))]];
// 创建一个高亮注释
CPDFMarkupAnnotation *highlight = [[CPDFMarkupAnnotation alloc] initWithDocument:document markupType:CPDFMarkupTypeHighlight];
highlight.color = [UIColor yellowColor];
highlight.quadrilateralPoints = quadrilateralPoints;
[page4 addAnnotation:highlight];
创建图章注释
图章注释用于标识和验证文档的来源和真实性,ComPDFKit 支持标准图章,文字图章,图像图章。
创建图章注释的步骤如下:
1.获取需要创建注释的页面对象。
2.在该页面上创建对应的图章。
3.设置图章属性。
4.更新注释外观使其显示在文档上。
创建图章注释的代码如下:
// 获取需要创建注释的页面对象。
if let page = document?.page(at: 0) {
// 创建标准印章。
let standard = CPDFStampAnnotation(document: document, type: i)
standard?.bounds = CGRect(x: 50, y:30, width: 50, height: 30)
page.addAnnotation(standard!)
// 创建文字印章。
let outputFormatter = DateFormatter()
outputFormatter?.timeZone = TimeZone.current
// 获取日期
let tDate: String
outputFormatter.dateFormat = "yyyy-MM-dd HH:mm:SS"
tDate = outputFormatter.string(from: Date())
let text = CPDFStampAnnotation(document: document, text: "ComPDFKit", detailText: tDate, style: .red, shape: .arrowLeft)
text?.bounds = CGRect(x: 150, y: 50, width: 80, height: 50)
page.addAnnotation(text!)
// 创建图片印章。
if let logoImage = UIImage(named: "Logo") {
let image = CPDFStampAnnotation(document: document, image: logoImage)
image?.bounds = CGRect(x: 150, y: 120, width: 50, height: 50)
page.addAnnotation(image!)
}
}
// 获取需要创建注释的页面对象。
CPDFPage *page = [document pageAtIndex:0];
// 创建标准印章。
CPDFStampAnnotation *standard = [[CPDFStampAnnotation alloc] initWithDocument:document type:i];
standard.bounds = CGRectMake(50, 30, 50, 30);
[page addAnnotation:standard];
// 创建文字印章。
NSTimeZone* timename = [NSTimeZone systemTimeZone];
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init ];
[outputFormatter setTimeZone:timename ];
// 获取日期。
NSString *tDate = nil;
[outputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:SS"];
tDate = [outputFormatter stringFromDate:[NSDate date]];
CPDFStampAnnotation *text = [[CPDFStampAnnotation alloc] initWithDocument:document text:@"ComPDFKit" detailText:tDate style:CPDFStampStyleRed shape:CPDFStampShapeArrowLeft];
text.bounds = CGRectMake(150, 50, 80, 50);
[page addAnnotation:text];
// 创建图片印章。
CPDFStampAnnotation *image = [[CPDFStampAnnotation alloc] initWithDocument:document image:[UIImage imageNamed:@"Logo"]];
image.bounds = CGRectMake(150, height5-120, 50, 50);
[page addAnnotation:image];
创建手绘注释
手绘注释直接快捷,用于直接绘制标注。
创建手绘注释的步骤如下:
1.获取需要创建注释的页面对象。
2.在该页面上创建手绘注释。
3.设置手绘注释经过的路径。
4.设置注释其他属性。
5.更新注释外观使其显示在文档上。
创建手绘注释的代码如下:
// 获取需要创建注释的页面对象。
if let page = document?.page(at: 0) {
// 在该页面上创建手绘注释。
let ink = CPDFInkAnnotation(document: document)
// 设置手绘注释经过的路径。
let startPoint = CGPoint(x: 220, y: 505)
let point1 = CGPoint(x: 100, y: 490)
let point2 = CGPoint(x: 120, y: 410)
let point3 = CGPoint(x: 100, y: 400)
let point4 = CGPoint(x: 180, y: 490)
let endPoint = CGPoint(x: 140, y: 440)
ink?.color = UIColor.red
ink?.opacity = 0.5
ink?.borderWidth = 2.0
ink?.paths = [
[
NSValue(cgPoint: startPoint),
NSValue(cgPoint: point1),
NSValue(cgPoint: point2),
NSValue(cgPoint: point3),
NSValue(cgPoint: point4),
NSValue(cgPoint: endPoint)
]
]
page.addAnnotation(ink!)
}
// 获取需要创建注释的页面对象。
CPDFPage *page = [document pageAtIndex:0];
// 在该页面上创建手绘注释。
CPDFInkAnnotation *ink = [[CPDFInkAnnotation alloc] initWithDocument:document];
// 设置手绘注释经过的路径。
CGPoint startPoint = CGPointMake(220, 505);
CGPoint point1 = CGPointMake(100, 490);
CGPoint point2 = CGPointMake(120, 410);
CGPoint point3 = CGPointMake(100, 400);
CGPoint point4 = CGPointMake(180, 490);
CGPoint endPoint = CGPointMake(140, 440);
ink.color = [UIColor redColor];
ink.opacity = 0.5;
ink.borderWidth = 2.0;
ink.paths = @[@[[NSValue valueWithCGPoint:startPoint],[NSValue valueWithCGPoint:point1],[NSValue valueWithCGPoint:point2],[NSValue valueWithCGPoint:point3],[NSValue valueWithCGPoint:point4],[NSValue valueWithCGPoint:endPoint]]];
[page addAnnotation:ink];
创建音频注释
创建音频注释的步骤如下:
1.获取需要创建注释的页面对象。
2.在该页上创建音频注释。
3.设置音频文件。
4.设置其他属性。
5.更新注释外观使其显示在文档上。
创建音频注释的代码如下:
// 获取需要创建注释的页面对象。
if let page = document.page(at: 0) {
// 在该页上创建音频注释。
if let soundAnnotation = CPDFSoundAnnotation(document: document) {
// 设置音频文件。
if let filePath = Bundle.main.path(forResource: "Bird", ofType: "wav") {
soundAnnotation.setMediaPath(filePath)
// 设置其他属性。
soundAnnotation?.bounds = CGRect(x: 100, y: 200, width: 50, height: 50)
page.addAnnotation(soundAnnotation!)
}
}
}
// 获取需要创建注释的页面对象。
CPDFPage page = document.PageAtIndex(0);
// 在该页上创建音频注释。
CPDFSoundAnnotation *soundAnnotation = [[CPDFSoundAnnotation alloc] initWithDocument:document];
// 设置音频文件。
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Bird" ofType:@"wav"];
// 设置其他属性。
if ([soundAnnotation setMediaPath:filePath]) {
soundAnnotation.bounds = CGRectMake(100, 200, 50, 50);
[page4 addAnnotation:soundAnnotation];
}