mergePdfs method
Merge multiple PDF files
files
List of PDF files to merge
options
Merge options
Implementation
Future<ApiResponse> mergePdfs(
List<File> files, {
MergeOptions? options,
}) async {
options ??= const MergeOptions();
// Create a multipart request manually
final uri = Uri.parse('${ScanProConfig.apiUrl}/api/merge');
final request = http.MultipartRequest('POST', uri);
// Add API key header
request.headers.addAll({'x-api-key': ScanProConfig.apiKey});
// Add each file to the request
for (int i = 0; i < files.length; i++) {
final file = files[i];
final fileName = file.path.split('/').last;
final fileBytes = await file.readAsBytes();
request.files.add(
http.MultipartFile.fromBytes(
'files',
fileBytes,
filename: fileName,
contentType: MediaType.parse('application/pdf'),
),
);
}
// Add merge options
request.fields.addAll(options.toParams());
// Send the request
final streamedResponse = await request.send().timeout(
ScanProConfig.timeout,
);
final response = await http.Response.fromStream(streamedResponse);
// Parse the response
try {
final data = json.decode(response.body);
if (response.statusCode >= 200 && response.statusCode < 300) {
return ApiResponse(
success: true,
data: data,
statusCode: response.statusCode,
);
} else {
String errorMessage = 'An error occurred';
if (data is Map && data.containsKey('error')) {
errorMessage = data['error'].toString();
}
return ApiResponse(
success: false,
error: errorMessage,
statusCode: response.statusCode,
data: data,
);
}
} catch (e) {
return ApiResponse(
success: false,
error: 'Failed to parse response: ${e.toString()}',
statusCode: response.statusCode,
data: response.body,
);
}
}