Skip to content

创建注释

ComPDFKit 支持全类型的注释,包括便签,链接,图形,标记,图章,手绘,音频注释,满足多样的注释需求。

创建便签注释

便签注释表现为小型图标或标签,用户点击后可以展开显示相关注释内容,这种注释类型用于添加个人笔记、提醒或备注,使用户能够在文档中添加个性化的附加信息,而不影响原始文本的可读性。

创建便签的步骤如下:

​ 1.获取需要创建注释的页面对象。

​ 2.在该页面上创建便签注释对象。

​ 3.设置注释属性。

​ 4.更新注释外观使其显示在文档上。

创建便签的代码如下:

swift
// 获取需要创建便签的页面对象
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!)
}
objective-c
// 获取需要创建便签的页面对象
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!];

创建链接注释

链接注释使用户能够直接跳转到文档中的其他位置或外部资源,提供更丰富的导航体验。

创建链接注释的步骤如下:

  1. 获取需要创建注释的页面对象。
  2. 在该页面上创建链接注释对象。
  3. 通过CPDFDestination设置链接跳转到第2页。
  4. 设置注释属性,并将CPDFDestination对象附加到注释上。

创建链接的代码如下:

swift
// 获取需要创建注释的页面对象。
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!)
    }
}
objective-c
// 获取需要创建注释的页面对象。
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.更新注释外观使其显示在文档上。

创建文本注释的代码如下:

swift
// 获取需要创建注释的页面对象。
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!)
}
objective-c
// 获取需要创建注释的页面对象。
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.依次更新注释外观使其显示在文档上。

创建图形注释的代码如下:

swift
// 获取需要创建注释的页面对象。
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!)
}
objective-c
// 获取需要创建注释的页面对象。
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];

线段注释类型枚举

NameDescription
CPDFLineStyleNone无特殊的线结束样式。
CPDFLineStyleOpenArrow两条短线以锐角相交,形成一个开放的箭头头部。
CPDFLineStyleClosedArrow两条短线以锐角相交,如 LINETYPE_ARROW 样式,并通过第三条线连接,形成一个填充了注释内部颜色的三角形封闭箭头头部。
CPDFLineStyleSquare线条开头或结尾样式为正方形。
CPDFLineStyleCircle线条开头或结尾样式为圆。
CPDFLineStyleDiamond线条开头或结尾样式为菱形。

创建标记注释

在 PDF 文档中添加标记,以突出、强调或说明特定内容,例如重要的段落、行或单词、关键词或表格等。ComPDFKit 提供高亮,下划线,波浪线,删除线四种标记注释。

创建标记注释的步骤如下:

​ 1.获取需要创建注释的页面对象。

​ 2.通过页面对象创建文本对象。

​ 3.使用该文本对象取得需要添加标记的文本位置。

​ 4.在该页面上创建对应的标记对象。

​ 5.设置标记对象的属性。

​ 6.更新注释外观使其显示在文档上。

以高亮注释为例,创建标记注释的代码如下:

swift
// 获取需要创建注释的页面对象。
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)
                }
            }
        }
    }
}
objective-c
// 获取需要创建注释的页面对象。
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.更新注释外观使其显示在文档上。

创建图章注释的代码如下:

swift
// 获取需要创建注释的页面对象。
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!)
    }
}
objective-c
// 获取需要创建注释的页面对象。
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.更新注释外观使其显示在文档上。

创建手绘注释的代码如下:

swift
// 获取需要创建注释的页面对象。
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!)
}
objective-c
// 获取需要创建注释的页面对象。
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.更新注释外观使其显示在文档上。

创建音频注释的代码如下:

swift
// 获取需要创建注释的页面对象。
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!)
        }
    }
}
objective-c
// 获取需要创建注释的页面对象。
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];
}