Swift 中的 ComPDFKit API
ComPDFKit API 提供了一系列 Java API 工具,允许您通过单个 API 调用创建高效的文档处理工作流程。免费试用我们的各种 API —— 无需信用卡。
要求
编程环境:iOS/MacOS。
依赖:Xcode。
安装
将以下依赖项添加到您的 "pom.xml"
<dependency>
<groupId>com.compdf</groupId>
<artifactId>compdfkit-api-java</artifactId>
<version>1.2.4</version>
</dependency>
创建 API 客户端
您可以使用您的 公钥 和 私钥 完成认证。您需要登录您的 ComPDFKit API 账户以在 此处 获取您的 公钥 和 私钥,并在 控制台 中操作。如果您是 ComPDFKit 新用户,请点击此处 注册 以获取免费试用资格。
var client: CPDFClient = CPDFClient(publicKey: public_key, secretKey: secret_key)
创建任务
系统将自动为您生成一个任务 ID,该 ID 基于您选择的 PDF 工具类型。您可以提供回调通知 URL。任务处理完成后,我们将通过回调界面通知您任务结果。您可以根据请求结果执行其他操作,例如检查任务状态、上传文件、开始任务或下载结果文件。
// Create a client
var client: CPDFClient = CPDFClient(publicKey: public_key, secretKey: secret_key)
// Create a task
client.createTask(url: CPDFConversion.PDF_TO_WORD) { taskModel in
guard let taskId = taskModel?.taskId else {
Swift.debugPrint(taskModel?.errorDesc ?? "")
return
}
}
async version(macOS 10.15/iOS 13 Later)
Task { @MainActor in
// Create a task
let taskModel = await self.client.createTask(url: CPDFConversion.PDF_TO_WORD)
let taskId = taskModel?.taskId ?? ""
}
上传文件
上传原始文件并绑定至任务 ID。字段参数用于传递 JSON 字符串以设置文件的处理参数。每个文件都将自动生成一个唯一的文件标识。请注意,每个任务 ID 最多可以上传五个文件,且一旦开始任务则无法再上传文件。
// Create a client
var client: CPDFClient = CPDFClient(publicKey: public_key, secretKey: secret_key)
// Create a task
client.createTask(url: CPDFConversion.PDF_TO_WORD) { taskModel in
guard let taskId = taskModel?.taskId else {
Swift.debugPrint(taskModel?.errorDesc ?? "")
return
}
// upload File
let group = DispatchGroup()
group.enter()
let path = Bundle.main.path(forResource: "test", ofType: "pdf")
client.uploadFile(filepath: path!, password: "", params: [
CPDFFileUploadParameterKey.isContainAnnot.string() : "1",
CPDFFileUploadParameterKey.isContainImg.string() : "1",
CPDFFileUploadParameterKey.isFlowLayout.string() : "1"
], taskId: taskId) { uploadFileModel in
if let errorInfo = uploadFileModel?.errorDesc {
Swift.debugPrint(errorInfo)
}
group.leave()
}
}
async version(macOS 10.15/iOS 13 Later)
Task { @MainActor in
// Create a task
let taskModel = await self.client.createTask(url: CPDFConversion.PDF_TO_WORD)
let taskId = taskModel?.taskId ?? ""
// upload File
let path = Bundle.main.path(forResource: "test", ofType: "pdf")
let uploadFileModel = await self.client.uploadFile(filepath: path ?? "", password: "", params: [
CPDFFileUploadParameterKey.isContainAnnot.string() : "1",
CPDFFileUploadParameterKey.isContainImg.string() : "1",
CPDFFileUploadParameterKey.isFlowLayout.string() : "1"
], taskId: taskId)
}
执行任务
文件上传完成后,请用任务 ID 调用此接口处理文件。
// Create a client
var client: CPDFClient = CPDFClient(publicKey: public_key, secretKey: secret_key)
// Create a task
client.createTask(url: CPDFConversion.PDF_TO_WORD) { taskModel in
guard let taskId = taskModel?.taskId else {
Swift.debugPrint(taskModel?.errorDesc ?? "")
return
}
// upload File
let group = DispatchGroup()
group.enter()
let path = Bundle.main.path(forResource: "test", ofType: "pdf")
client.uploadFile(filepath: path!, password: "", params: [
CPDFFileUploadParameterKey.isContainAnnot.string() : "1",
CPDFFileUploadParameterKey.isContainImg.string() : "1",
CPDFFileUploadParameterKey.isFlowLayout.string() : "1"
], taskId: taskId) { uploadFileModel in
if let errorInfo = uploadFileModel?.errorDesc {
Swift.debugPrint(errorInfo)
}
group.leave()
}
group.notify(queue: .main) {
// execute Task
client.processFiles(taskId: taskId) { processFileModel in
if let errorInfo = processFileModel?.errorDesc {
Swift.debugPrint(errorInfo)
}
}
}
}
async version(macOS 10.15/iOS 13 Later)
Task { @MainActor in
// Create a task
let taskModel = await self.client.createTask(url: CPDFConversion.PDF_TO_WORD)
let taskId = taskModel?.taskId ?? ""
// upload File
let path = Bundle.main.path(forResource: "test", ofType: "pdf")
let uploadFileModel = await self.client.uploadFile(filepath: path ?? "", password: "", params: [
CPDFFileUploadParameterKey.isContainAnnot.string() : "1",
CPDFFileUploadParameterKey.isContainImg.string() : "1",
CPDFFileUploadParameterKey.isFlowLayout.string() : "1"
], taskId: taskId)
// execute Task
let _ = await self.client.processFiles(taskId: taskId)
}
获取任务信息
根据任务ID请求任务状态和文件相关元数据。
// Create a client
var client: CPDFClient = CPDFClient(publicKey: public_key, secretKey: secret_key)
// Create a task
client.createTask(url: CPDFConversion.PDF_TO_WORD) { taskModel in
guard let taskId = taskModel?.taskId else {
Swift.debugPrint(taskModel?.errorDesc ?? "")
return
}
// upload File
let group = DispatchGroup()
group.enter()
let path = Bundle.main.path(forResource: "test", ofType: "pdf")
client.uploadFile(filepath: path!, password: "1234", params: [
CPDFFileUploadParameterKey.isContainAnnot.string() : "1",
CPDFFileUploadParameterKey.isContainImg.string() : "1",
CPDFFileUploadParameterKey.isFlowLayout.string() : "1"
], taskId: taskId) { uploadFileModel in
if let errorInfo = uploadFileModel?.errorDesc {
Swift.debugPrint(errorInfo)
}
group.leave()
}
group.notify(queue: .main) {
// execute Task
client.processFiles(taskId: taskId) { processFileModel in
if let errorInfo = processFileModel?.errorDesc {
Swift.debugPrint(errorInfo)
}
// get task processing information
client.getTaskInfo(taskId: taskId) { taskInfoModel in
guard let _model = taskInfoModel else {
Swift.debugPrint("error:....")
return
}
if (_model.isFinish()) {
_model.printInfo()
} else if (_model.isRuning()) {
Swift.debugPrint("Task incomplete processing")
} else {
Swift.debugPrint("error: \(_model.errorDesc ?? "")")
}
}
}
}
}
async version(macOS 10.15/iOS 13 Later)
Task { @MainActor in
// Create a task
let taskModel = await self.client.createTask(url: CPDFConversion.PDF_TO_WORD)
let taskId = taskModel?.taskId ?? ""
// upload File
let path = Bundle.main.path(forResource: "test", ofType: "pdf")
let uploadFileModel = await self.client.uploadFile(filepath: path ?? "", password: "", params: [
CPDFFileUploadParameterKey.isContainAnnot.string() : "1",
CPDFFileUploadParameterKey.isContainImg.string() : "1",
CPDFFileUploadParameterKey.isFlowLayout.string() : "1"
], taskId: taskId)
// execute Task
let _ = await self.client.processFiles(taskId: taskId)
// get task processing information
let taskInfoModel = await self.client.getTaskInfo(taskId: taskId)
guard let _model = taskInfoModel else {
Swift.debugPrint("error:....")
return
}
if (_model.isFinish()) {
_model.printInfo()
} else if (_model.isRuning()) {
Swift.debugPrint("Task incomplete processing")
self.client.getTaskInfoComplete(taskId: taskId) { isFinish, params in
Swift.debugPrint(params)
}
} else {
Swift.debugPrint("error: \(taskInfoModel?.errorDesc ?? "")")
}
}
示例
见本文件夹中的“示例”文件夹。