Skip to content
Demo示例FAQ

PDF 生成模板编辑器

开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。

查看 GitHub

颜色空间转换 ​

通过 CPDFOptimizeOption,可以在优化文档时进行颜色空间转换(RGB 与 CMYK 互转),并使用 optimizeAndSaveAsCopyWithPath:stepsMicroseconds:saveMicroseconds: 一次完成优化和保存,同时获取各阶段的耗时。

属性/方法说明
initWithDocument:使用要优化的文档创建选项对象。创建后已带有默认的图像压缩参数(col_imageOption)和优化标志(optimizeflag),可按需修改。
iccProfileData颜色空间转换使用的 ICC 配置文件数据。为 nil(默认)或空数据时不进行颜色空间转换。
rgbToCMYK转换方向。YES(默认)表示 RGB 转 CMYK,NO 表示 CMYK 转 RGB;仅在 iccProfileData 非空时生效。
optimizeAndSaveAsCopyWithPath:stepsMicroseconds:saveMicroseconds:优化文档并将结果保存到指定路径,成功时返回 YES。stepsMicroseconds 和 saveMicroseconds 分别返回优化阶段和保存阶段的耗时(微秒),不需要时传 NULL(Swift 中传 nil)。

以下是优化文档时将 RGB 转换为 CMYK 并保存的示例代码:

swift
guard let option = CPDFOptimizeOption(document: document) else { return }

// 设置 ICC 配置文件数据,启用颜色空间转换
option.iccProfileData = try? Data(contentsOf: URL(fileURLWithPath: iccPath))
// true(默认):RGB 转 CMYK;false:CMYK 转 RGB
option.rgbToCMYK = true

var stepsMicroseconds: Int64 = 0
var saveMicroseconds: Int64 = 0
// 直接调用,不要先调用 startCompress
let success = option.optimizeAndSaveAsCopy(withPath: savePath, stepsMicroseconds: &stepsMicroseconds, saveMicroseconds: &saveMicroseconds)
print("Success: \(success), optimize: \(stepsMicroseconds) us, save: \(saveMicroseconds) us")
objective-c
CPDFOptimizeOption *option = [[CPDFOptimizeOption alloc] initWithDocument:document];

// 设置 ICC 配置文件数据,启用颜色空间转换
option.iccProfileData = [NSData dataWithContentsOfFile:iccPath];
// YES(默认):RGB 转 CMYK;NO:CMYK 转 RGB
option.rgbToCMYK = YES;

int64_t stepsMicroseconds = 0;
int64_t saveMicroseconds = 0;
// 直接调用,不要先调用 startCompress
BOOL success = [option optimizeAndSaveAsCopyWithPath:savePath
                                   stepsMicroseconds:&stepsMicroseconds
                                    saveMicroseconds:&saveMicroseconds];
NSLog(@"Success: %d, optimize: %lld us, save: %lld us", success, stepsMicroseconds, saveMicroseconds);

注: optimizeAndSaveAsCopyWithPath:stepsMicroseconds:saveMicroseconds: 会自行完成优化,调用前不要先调用 startCompress,否则文档会被优化两次,图像会被再次压缩而损失画质。它也不是 saveAsCopyWithPath: 的变体:saveAsCopyWithPath: 只负责保存已经通过 startCompress 优化过的文档。该方法同步执行,处理大文档时耗时较长,建议在后台线程调用,并将结果保存到与源文件不同的路径。