文档转码

通过阅读本章节,您将了解文档转码的相关功能与使用方法。文档转码功能可以实现将PPT、PPTX、PDF等文档格式转码为png及jpg格式,借助互动白板进行实时翻页、标注与共享展示,支持在 Web端、PC 端提交文件转码任务,将 ppt 和 pdf 等文档转码为各种清晰度的图片存储在云端,再在各客户端获取、下载使用或者删除转码后的文档。SDK提供文档上传(PC/Web)、下载、删除、查询等文档使用中的各类功能接口。

拉取文档转码信息列表

拉取自己的账号相关的文档转码信息。可以指定拉取的开始锚点和每次拉取的最大数量。

拉取接口:

@protocol NIMDocTranscodingManager <NSObject>

/**
 拉取文档转码信息列表

 @param lastDocId 最后一个文档的锚点,不包括此文档。填 nil 会从最新提交的转码文档开始往前查询。
 @param limit 拉取文档的最大个数,每次拉取的个数不能超过 30
 @param completion 拉取结果 block
 */
- (void)fetchMyDocsInfo:(nullable NSString *)lastDocId
                  limit:(NSUInteger)limit
             completion:(nullable NIMDocTranscodingFetchCompleteBlock)completion;

@end

拉取结果 block 声明:

/**
 拉取文档转码信息列表结果 block

 @param error 执行结果,如果成功则为 nil
 @param infos 拉取到的所有文档转码信息
 */
typedef void(^NIMDocTranscodingFetchCompleteBlock)(NSError * __nullable error, NSArray<NIMDocTranscodingInfo *> * __nullable infos);

API接口参数:

参数 类型 说明
lastDocId NSString 最后一个文档的锚点,不包括此文档。填 nil 会从最新提交的转码文档开始往前查询
limit NSUInteger 拉取文档的最大个数,每次拉取的个数不能超过 30
completion NIMDocTranscodingFetchCompleteBlock 拉取结果 block

拉取结果 block 参数:

参数 类型 说明
error NSError 拉取操作执行结果。 如果成功则为 nil
infos NSArray 拉取到的所有文档转码信息

//从 lastDocId 开始, 拉取 limit 个 文档转码信息
- (void)fetchMyDocsInfo:(NSString*)lastDocId limit:(NSUInteger)limit
{
    __weak typeof(self) weakself = self;

    [[NIMSDK sharedSDK].docTranscodingManager fetchMyDocsInfo:lastDocId limit:limit completion:^(NSError * _Nullable error, NSArray<NIMDocTranscodingInfo *> * _Nullable infos) {
        if(!error)
        {
            if (weakself.delegate&&[weakself.delegate respondsToSelector:@selector(notifyGetDocsInfos:complete:)]) {
                [weakself.delegate notifyGetDocsInfos:infos complete:YES];
                if (!(infos.count < limit)) {
                    [weakself fetchMyDocsInfo:infos.lastObject.docId limit:limit];
                }
            }
        }
        else
        {
            if (weakself.delegate&&[weakself.delegate respondsToSelector:@selector(notifyGetDocsInfos:complete:)]) {
                [weakself.delegate notifyGetDocsInfos:nil complete:NO];
            }
        }
    }];
}

查询文档转码信息

文档的提交者和其他用户可以通过文档转码任务提交或者拉取文档列表时 SDK 返回的文档 id docId 查询该文档的转码信息。

查询接口:

@protocol NIMDocTranscodingManager <NSObject>

/**
 查询文档转码信息

 @param docId 转码文档标识 id
 @param completion 查询结果 block
 */
- (void)inquireDocInfo:(NSString *)docId
            completion:(nullable NIMDocTranscodingInquireCompleteBlock)completion;

@end

查询结果 block 声明:

/**
 查询文档转码信息结果 block

 @param error 执行结果,如果成功则为 nil
 @param info 查询到的文档转码信息
 */
typedef void(^NIMDocTranscodingInquireCompleteBlock)(NSError * __nullable error, NIMDocTranscodingInfo * __nullable info);

API接口参数:

参数 类型 说明
docId NSString 需要查询的转码文档标识 id
completion NIMDocTranscodingInquireCompleteBlock 查询结果 block

查询结果 block 参数:

参数 类型 说明
error NSError 查询操作执行结果。 如果成功则为 nil
info NIMDocTranscodingInfo 查询到的文档转码信息

-(void)inquireDocInfo:(NSString*)docId 
{
    __weak typeof(self) weakself = self;

    [[NIMSDK sharedSDK].docTranscodingManager inquireDocInfo:docId completion:^(NSError * _Nullable error, NIMDocTranscodingInfo * _Nullable info) {
        if (!error) {
            if (weakself.delegate&&[weakself.delegate respondsToSelector:@selector(notifyGetDocInfo:)]) {
                [weakself.delegate notifyGetDocInfo:info];
            }
        }
    }];
}

文档转码信息

可以通过拉取和查询接口获取转码文档信息 NIMDocTranscodingInfo

/**
 转码文档信息
 */
@interface NIMDocTranscodingInfo : NSObject

/**
 转码文档标识 id
 */
@property (nonatomic,copy,readonly)   NSString *docId;

/**
 转码文档名称
 */
@property (nonatomic,copy,readonly)   NSString *docName;

/**
 转码源文档的文件类型
 */
@property (nonatomic,assign,readonly) NIMDocTranscodingFileType sourceType;

/**
 转码源文档大小
 */
@property (nonatomic,assign,readonly) UInt64 sourceSize;

/**
 转码目标图片的文件类型
 */
@property (nonatomic,assign,readonly) NIMDocTranscodingImageType targetType;

/**
 转码过程状态
 */
@property (nonatomic,assign,readonly) NIMDocTranscodingState state;

/**
 转码源文档文件的下载地址
 */
@property (nonatomic,copy,readonly)   NSString *sourceFileUrl;

/**
 转码文档总页数
 */
@property (nonatomic,assign,readonly) NSUInteger numberOfPages;

/**
 发起文档转码时的附带信息
 */
@property (nullable,nonatomic,copy,readonly)   NSString *ext;

/**
 文档转码内部状态码, 0 表示成功, 可用于在转码失败时定位具体失败原因。已知的一些失败原因 2: 找不到文件; 3: 文件类型错误; 4: 转码请求出现异常; 5: 转码服务器连接错误 6: 转码服务器内部错误; 7: 文档转码图片出错; 8: 图片质量处理错误; 9: 页数超限; 10: nos回调错误; 11: 文档解析错误(如加密的PDF无法解析; 100: 未知错误
 */
@property (nonatomic,assign,readonly) NSInteger transcodingFlag;

/**
 获取某清晰度的转码后文件总字节大小

 @param quality 转码质量
 @return 转码后该质量的图片文件总字节大小
 */
- (UInt64)transcodedTotalSize:(NIMDocTranscodingQuality)quality;

/**
 获取某清晰度转码后图片的长宽信息

 @param quality 转码质量
 @return 转码后图片的长宽信息
 */
- (CGSize)transcodedImagesSize:(NIMDocTranscodingQuality)quality;

/**
 获取转码后某清晰度的文件页码对应的下载 url

 @param pageNumber 文件页码
 @param quality 图片质量
 @return 图片下载 url
 */
- (nullable NSString *)transcodedUrl:(NSUInteger)pageNumber
                           ofQuality:(NIMDocTranscodingQuality)quality;

@end
参数 类型 说明
docId NSString 转码文档标识 id
docName NSString 转码文档名称
sourceType NIMDocTranscodingFileType 转码源文档的文件类型,如 ppt、pptx 和 pdf 等
sourceSize UInt64 转码源文档大小
targetType NIMDocTranscodingImageType 转码目标图片的文件类型,如 jpg 和 png
state NIMDocTranscodingState 转码过程状态。可以获取每一个文档的转码状态,如转码中、转码完成 或 转码失败 等
sourceFileUrl NSString 转码源文档文件的下载地址
numberOfPages NSUInteger 转码文档总页数
ext NSString 发起文档转码时的附带信息。是 PC 端提交文档转码任务时传入的额外信息
ext transcodingFlag 文档转码内部状态码, 0 表示成功, 可用于在转码失败时定位具体失败原因。已知的一些失败原因 2: 找不到文件; 3: 文件类型错误; 4: 转码请求出现异常; 5: 转码服务器连接错误 6: 转码服务器内部错误; 7: 文档转码图片出错; 8: 图片质量处理错误; 9: 页数超限; 10: nos回调错误; 11: 文档解析错误(如加密的PDF无法解析; 100: 未知错误

如果文档转码成功,可以通过指定清晰度、页码等获得如下几个信息:

某清晰度的转码后文件总尺寸

@interface NIMDocTranscodingInfo : NSObject

- (UInt64)transcodedTotalSize:(NIMDocTranscodingQuality)quality;

@end

返回转码后某清晰度的所有图片的总尺寸,单位是字节;

某清晰度转码后图片的长宽信息

@interface NIMDocTranscodingInfo : NSObject

- (CGSize)transcodedImagesSize:(NIMDocTranscodingQuality)quality

@end

返回转码后某清晰度的图片的长宽信息;

转码后某清晰度的文件页码对应的下载 url

@interface NIMDocTranscodingInfo : NSObject

- (nullable NSString *)transcodedUrl:(NSUInteger)pageNumber
                           ofQuality:(NIMDocTranscodingQuality)quality

@end

返回的 url 可以直接下载使用。

删除云端的转码文档

文档的提交者可以通过文档转码任务提交或者拉取文档列表时 SDK 返回的文档 id docId 删除某云端转码文档。

删除接口:

@protocol NIMDocTranscodingManager <NSObject>

/**
 删除转码文档

 @param docId 转码文档标识 id
 @param completion 删除转码文档结果 block
 */
- (void)deleteDoc:(NSString *)docId
       completion:(nullable NIMDocTranscodingDeleteCompleteBlock)completion;

@end

删除结果 block 声明:

/**
 *  删除转码文档结果 block
 *
 @param error 执行结果,如果成功则为 nil
 */
typedef void(^NIMDocTranscodingDeleteCompleteBlock)(NSError * __nullable error);

API接口参数:

参数 类型 说明
docId NSString 需要删除的转码文档标识 id
completion NIMDocTranscodingDeleteCompleteBlock 删除结果 block

删除结果 block 参数:

参数 类型 说明
error NSError 删除操作执行结果。 如果成功则为 nil

-(void)deleteDoc:(NIMDocTranscodingInfo*)info
{
    __weak typeof(self) weakself = self;
        [[NIMSDK sharedSDK].docTranscodingManager deleteDoc:info.docId completion:^(NSError * _Nullable error) {
            if (!error) {
                if (weakself.delegate&&[weakself.delegate respondsToSelector:@selector(notifyDeleteDoc:complete:)]) {
                    // 删除本地文件
                    [weakself deleteFile:info.docId];
                    [weakself.delegate notifyDeleteDoc:info complete:YES];

                }
            }
            else
            {
                if (weakself.delegate&&[weakself.delegate respondsToSelector:@selector(notifyDeleteDoc:complete:)]) {
                    [weakself.delegate notifyDeleteDoc:info complete:NO];
                }
            }
        }];
}