Skip to content

页面组织

福昕 PDF SDK iOS 版通过 Core SDKPDFViewCtrl 提供了丰富的页面组织功能,包括插入、删除、移动、导入和提取页面等操作。

通过 FSPDFDoc 操作页面

插入页面

objc
#import <FoxitRDK/FSPDFObjC.h>

FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:@"path/to/Sample.pdf"];
[doc load:nil];

// 在指定位置插入一个空白页(自定义尺寸,单位:1/72 英寸)
FSPDFPage *newPage = [doc insertPage:0 width:595.0f height:842.0f];

// 使用预定义页面尺寸插入
FSPDFPage *a4Page = [doc insertPageSize:1 size:FSPDFPageSizeA4];

[doc saveAs:@"path/to/output.pdf" saveFlags:FSPDFDocSaveFlagNormal];

删除页面

objc
// 按索引删除(0-based)
[doc removePage:2];

// 按 FSPDFPage 对象删除
FSPDFPage *page = [doc getPage:0];
[doc removePageWithPage:page];

移动页面

objc
// 将指定页面移动到目标位置
FSPDFPage *page = [doc getPage:0];
[doc movePageTo:page dest_index:3];

// 批量移动:将一组连续页面移动到目标位置
FSRange *range = [[FSRange alloc] init];
// 配置 range 的起始和结束索引
[doc movePagesTo:range dest_index:5];

从其他文档导入页面

导入操作通过 FSProgressive 异步执行:

objc
// 从另一个 PDF 文件导入页面
FSRange *pageRange = [[FSRange alloc] init]; // 页面范围

FSProgressive *progressive = [doc startImportPagesFromFilePath:0
                                                 src_file_path:@"path/to/source.pdf"
                                                      password:nil
                                                         flags:0
                                                    layer_name:nil
                                                    page_range:pageRange];

FSProgressiveState state = [progressive resume];
while (state == FSProgressiveToBeContinued) {
    state = [progressive resume];
}

if (state == FSProgressiveFinished) {
    NSLog(@"页面导入成功");
}

[doc saveAs:@"path/to/output.pdf" saveFlags:FSPDFDocSaveFlagNormal];

也可以从已打开的 FSPDFDoc 对象导入:

objc
FSPDFDoc *srcDoc = [[FSPDFDoc alloc] initWithPath:@"path/to/source.pdf"];
[srcDoc load:nil];

FSProgressive *progressive = [doc startImportPages:0
                                           src_doc:srcDoc
                                             flags:0
                                        layer_name:nil
                                        page_range:pageRange];
// ... 循环 resume 直到完成

提取页面

objc
FSRange *pageRange = [[FSRange alloc] init]; // 要提取的页面范围

FSProgressive *progressive = [doc startExtractPages:@"path/to/extracted.pdf"
                                            options:0
                                         page_range:pageRange];

FSProgressiveState state = [progressive resume];
while (state == FSProgressiveToBeContinued) {
    state = [progressive resume];
}

通过 FSPDFPage 操作

旋转页面

objc
FSPDFPage *page = [doc getPage:0];
[page startParse:FSPDFPageParsePageNormal pause:nil is_reparse:NO];

// 获取当前旋转角度
FSRotation rotation = [page getRotation];

// 设置旋转(FSRotation0 / FSRotation90 / FSRotation180 / FSRotation270)
[page setRotation:FSRotation90];

设置页面尺寸

objc
[page setSize:612.0f height:792.0f];

扁平化

将注释或表单域合并到页面内容中:

objc
[page flatten:YES pause:nil];

API 参考

FSPDFDocFSPDFPage 的完整接口说明请参阅 API 手册