{"id":18995809,"url":"https://github.com/klippa-app/flutter-klippa-scanner-sdk","last_synced_at":"2025-07-19T16:35:01.788Z","repository":{"id":40298399,"uuid":"383824466","full_name":"klippa-app/flutter-klippa-scanner-sdk","owner":"klippa-app","description":"A Flutter plugin that implements the Klippa Scanner SDK for Android and iOS.","archived":false,"fork":false,"pushed_at":"2025-07-14T08:36:04.000Z","size":4125,"stargazers_count":2,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-14T11:29:37.236Z","etag":null,"topics":["android","api","document-scanner","flutter","ios","sdk"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/klippa-app.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-07-07T14:21:48.000Z","updated_at":"2025-07-14T08:36:07.000Z","dependencies_parsed_at":"2025-01-06T13:42:36.409Z","dependency_job_id":"2366d15d-f73f-4076-bbe1-e88931651804","html_url":"https://github.com/klippa-app/flutter-klippa-scanner-sdk","commit_stats":null,"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"purl":"pkg:github/klippa-app/flutter-klippa-scanner-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klippa-app%2Fflutter-klippa-scanner-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klippa-app%2Fflutter-klippa-scanner-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klippa-app%2Fflutter-klippa-scanner-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klippa-app%2Fflutter-klippa-scanner-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/klippa-app","download_url":"https://codeload.github.com/klippa-app/flutter-klippa-scanner-sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klippa-app%2Fflutter-klippa-scanner-sdk/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265966070,"owners_count":23857056,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","api","document-scanner","flutter","ios","sdk"],"created_at":"2024-11-08T17:32:54.642Z","updated_at":"2025-07-19T16:35:01.776Z","avatar_url":"https://github.com/klippa-app.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Dart version][dart-version]][dart-url]\n[![Build Status][build-status]][build-url]\n\n[build-status]:https://github.com/klippa-app/flutter-klippa-scanner-sdk/workflows/Build%20CI/badge.svg\n[build-url]:https://github.com/klippa-app/flutter-klippa-scanner-sdk/actions\n[dart-version]:https://img.shields.io/pub/v/klippa_scanner_sdk.svg\n[dart-url]:https://pub.dev/packages/klippa_scanner_sdk\n\n\n### SDK usage\nPlease be aware you need to have a license to use this SDK.\nIf you would like to use our scanner, please contact us [here](https://www.klippa.com/en/ocr/ocr-sdk/)\n\n### Getting started\n#### Android\nEdit the file android/key.properties, if it doesn't exist yet, create it. Add the SDK credentials:\n\n```bash\nklippa.scanner.sdk.username={your-username}\nklippa.scanner.sdk.password={your-password}\n```\n\nReplace the `{your-username}` and `{your-password}` values with the ones provided by Klippa.\n\n#### iOS\n\nEdit the file `ios/Podfile`, add the Klippa CocoaPod:\n```ruby\nplatform :ios, '13.0'\nENV['KLIPPA_SCANNER_SDK_USERNAME'] = '{your-username}'\nENV['KLIPPA_SCANNER_SDK_PASSWORD'] = '{your-password}'\n\n// Edit the Runner config to add the pod:\n\ntarget 'Runner' do\n    // ... other instructions\n    \n    // Add this below flutter_install_all_ios_pods    \n    if \"#{ENV['KLIPPA_SCANNER_SDK_URL']}\" == \"\"\n        ENV['KLIPPA_SCANNER_SDK_URL'] = File.read(File.join(File.dirname(File.realpath(__FILE__)), '.symlinks', 'plugins', 'klippa_scanner_sdk', 'ios', 'sdk_repo')).strip\n    end\n\n    if \"#{ENV['KLIPPA_SCANNER_SDK_VERSION']}\" == \"\"\n        ENV['KLIPPA_SCANNER_SDK_VERSION'] = File.read(File.join(File.dirname(File.realpath(__FILE__)), '.symlinks', 'plugins', 'klippa_scanner_sdk', 'ios', 'sdk_version')).strip\n    end\n\n    pod 'Klippa-Scanner', podspec: \"#{ENV['KLIPPA_SCANNER_SDK_URL']}/#{ENV['KLIPPA_SCANNER_SDK_USERNAME']}/#{ENV['KLIPPA_SCANNER_SDK_PASSWORD']}/KlippaScanner/#{ENV['KLIPPA_SCANNER_SDK_VERSION']}.podspec\"\nend\n```\n\nReplace the `{your-username}` and `{your-password}` values with the ones provided by Klippa.\n\nEdit the file `ios/{project-name}/Info.plist` and add the `NSCameraUsageDescription` value:\n```xml\n...\n\u003ckey\u003eNSCameraUsageDescription\u003c/key\u003e\n\u003cstring\u003eAccess to your camera is needed to photograph documents.\u003c/string\u003e\n\u003ckey\u003eNSPhotoLibraryAddUsageDescription\u003c/key\u003e\n\u003cstring\u003eAccess to your photo library is used to save the images of documents.\u003c/string\u003e\n...\n```\n\n#### Flutter\n\nAdd `klippa_scanner_sdk` as a dependency in your pubspec.yaml file.\n\n```yaml\ndependencies:\n  flutter:\n    sdk: flutter\n\n  klippa_scanner_sdk: ^x.y.z\n\n  # Rest of dependencies\n```\n\n### Usage\n\n```dart\nimport 'package:klippa_scanner_sdk/klippa_scanner_sdk.dart';\n\nvar config = CameraConfig();\n\ntry {\n  var result = await KlippaScannerSdk.startSession(config, '{insert-license-here');\n} on PlatformException catch (e) {\n  print('Failed to start session ' + e.toString());\n}\n```\n\nThe reject reason object has a code and a message, the used codes are:\n\nThe reject reason object has a code and a message, the used codes are:\n- E_ACTIVITY_DOES_NOT_EXIST (Android only)\n- E_FAILED_TO_SHOW_SESSION (Android only)\n- E_MISSING_LICENSE\n- E_CANCELED\n- E_UNKNOWN_ERROR\n\n### Specify SDK Version\n\n#### Android\n\nEdit the file `android/build.gradle`, add the following:\n\n```groovy\nallprojects {\n  // ... other definitions\n  project.ext {\n      klippaScannerVersion = \"{version}\"\n  }\n}\n```\n\nReplace the `{version}` value with the version you want to use.\n\nIf you want to change the repository:\n\nEdit the file `android/key.properties`, add the sdk repository URL:\n\n```bash\nklippa.scanner.sdk.url={repository-url}\n```\n\nReplace `{repository-url` with the URL that you want to use.\n\n#### iOS\n\nEdit the file `ios/Podfile`, add the following line below the username/password if you want to change the version:\n```ruby\nENV['KLIPPA_SCANNER_SDK_VERSION'] = '{version}'\n```\n\nreplace `{version}` with the version you want to use.\n\nIf you want to change the repository:\n\nEdit the file `ios/Podfile` add the following line below the username/password if you want to change the URL:\n\n```ruby\nENV['KLIPPA_SCANNER_SDK_URL'] = '{repository-url}'\n```\n\nReplace `{repository-url}` with the URL that you want to use.\n\n### Customize Setup\n\n```dart\n// Ability to disable/hide the shutter button (only works when a model is supplied as well).\nconfig.shutterButton.allowShutterButton = true;\nconfig.shutterButton.hideShutterButton = false;\n\n// Whether the crop mode (auto edge detection) should be enabled by default.\nconfig.defaultCrop = true;\n\n// Define the max resolution of the output file. It’s possible to set only one of these values. We will make sure the picture fits in the given resolution. We will also keep the aspect ratio of the image. Default is max resolution of camera.\nconfig.imageMaxWidth = 1920;\nconfig.imageMaxHeight = 1080;\n\n// Set the output quality (between 0-100) of the jpg encoder. Default is 100.\nconfig.imageMaxQuality = 95;\n\n// If you would like to use a custom model for object detection. Model + labels file should be packaged in your bundle.\nconfig.model.fileName = \"model\";\nconfig.model.modelLabels = \"labelmap\";\n\n// If you want to adjust the timer options.\nconfig.timer.allowed = true;\nconfig.timer.enabled = true;\nconfig.timer.duration = 1.0;\n\n// Whether to go to the Review Screen once the image limit has been reached. (default false)\nconfig.shouldGoToReviewScreenWhenImageLimitReached = false;\n    \n// Whether to hide or show the rotate button in the Review Screen. (default shown/true)\nconfig.userCanRotateImage = false;\n\n// Whether to hide or show the cropping button in the Review Screen. (default shown/true)\nconfig.userCanCropManually = false;\n\n// Whether to hide or show the color changing button in the Review Screen. (default shown/true)\nconfig.userCanChangeColorSetting = false;\n\n// To add extra horizontal and / or vertical padding to the cropped image.\nconfig.cropPadding.width = 100;\nconfig.cropPadding.height =  100;\n\n// After capture, show a checkmark preview with this success message, instead of a preview of the image.\nconfig.success.previewDuration = 1.0;\n\n// The amount of seconds the preview should be visible for, should be a float.\nconfig.previewDuration = 1.0;\n\n// To limit the amount of images that can be taken.\nconfig.imageLimit = 10;\n\n// Whether the camera automatically saves the images to the camera roll (iOS) / gallery (Android). Default true.\nconfig.storeImagesToCameraRol = true;\n\n// Whether to allow users to select media from their device (Shows a media button bottom left on the scanner screen).\nconfig.userCanPickMediaFromStorage = true;\n\n// Whether the next button in the bottom right of the scanner screen goes to the review screen instead of finishing the session.\nconfig.shouldGoToReviewScreenOnFinishPressed = true;\n\n// Whether the user must confirm the taken photo before the SDK continues.\nconfig.userShouldAcceptResultToContinue = false;\n\n// What the default color conversion will be (grayscale, original, enhanced).\nconfig.defaultColor = DefaultColor.original;\n\n/// Whether to perform on-device OCR after scanning completes.\nconfig.performOnDeviceOCR = false;\n\n/// What the output format will be (jpeg, pdfMerged, pdfSingle). (Default jpeg)\nconfig.outputFormat = OutputFormat.jpeg;\n\n// Enable Single Document Mode\nconfig.cameraModeSingle = new CameraMode();\n// Localize the name of Single Document Mode\nconfig.cameraModeSingle?.name = \"Single Document Mode\";\n// Localize the instructions of Single Document Mode\nconfig.cameraModeSingle?.message = \"Used for a single document\";\n\n// Enable Multi Document Mode\nconfig.cameraModeMulti = new CameraMode();\n// Localize the name of Multi Document Mode\nconfig.cameraModeMulti?.name = \"Multi Document Mode\";\n// Localize the instructions of Multi Document Mode\nconfig.cameraModeMulti?.message = \"Used for a multiple documents\";\n\n// Enable Segmented Document Mode\nconfig.cameraModeSegmented = new CameraMode();\n// Localize the name of Segmented Document Mode\nconfig.cameraModeSegmented?.name = \"Segmented Document Mode\";\n// Localize the instructions of Segmented Document Mode\nconfig.cameraModeSegmented?.message = \"Used for a single document segmented into multiple photos\";\n\n// When multiple camera modes are enabled select which should show first by index.\nconfig.startingIndex = 0;\n```\n\n#### Android only\n\n```dart\n\n// Where to put the image results.\nconfig.storagePath = \"/sdcard/scanner\";\n\n// The filename to use for the output images, supports replacement tokens %dateTime% and %randomUUID%.\nconfig.outputFileName = \"KlippaScannerExample-%dateTime%-%randomUUID%\";\n\n// The threshold sensitive the motion detection is. (lower value is higher sensitivity, default 50).\nconfig.imageMovingSensitivityAndroid = 50;\n```\n\n#### iOS only\n```dart\n\n// The text inside of the color selection alert dialog button named original.\nconfig.imageColorOriginalText = \"original\";\n\n// The text inside of the color selection alert dialog button named grayscale.\nconfig.imageColorGrayscaleText = \"grayscale\";\n\n// The text inside of the color selection alert dialog button named enhanced.\nconfig.imageColorEnhancedText = \"enhanced\";\n\n// Whether the camera has a view finder overlay (a helper grid so the user knows where the document should be), should be a Boolean.\nconfig.isViewFinderEnabled = true;\n\n// The threshold sensitive the motion detection is. (lower value is higher sensitivity, default 200).\nconfig.imageMovingSensitivityiOS = 200;\n\n// The lower threshold before the warning message informs the environment is too dark (default 0).\nconfig.brightnessLowerThreshold = 0;\n\n// The upper threshold before the warning message informs the environment is too bright (default 6).\nconfig.brightnessUpperThreshold = 6;\n```\n\n\n### Customize the colours\n\n#### Android\n\nAdd or edit the file `android/app/src/res/values/colors.xml`, add the following:\n\n```xml\n\u003cresources\u003e\n  \u003ccolor name=\"klippa_scanner_sdk_color_primary\"\u003e#000000\u003c/color\u003e\n  \u003ccolor name=\"klippa_scanner_sdk_color_accent\"\u003e#ffffff\u003c/color\u003e\n  \u003ccolor name=\"klippa_scanner_sdk_color_secondary\"\u003e#2dc36a\u003c/color\u003e\n  \u003ccolor name=\"klippa_scanner_sdk_color_warning_background\"\u003e#BF000000\u003c/color\u003e\n  \u003ccolor name=\"klippa_scanner_sdk_color_warning_text\"\u003e#ffffff\u003c/color\u003e\n  \u003ccolor name=\"klippa_scanner_sdk_color_icon_disabled\"\u003e#444\u003c/color\u003e\n  \u003ccolor name=\"klippa_scanner_sdk_color_icon_enabled\"\u003e#ffffff\u003c/color\u003e\n  \u003ccolor name=\"klippa_scanner_sdk_color_button_with_icon_foreground\"\u003e#ffffff\u003c/color\u003e\n  \u003ccolor name=\"klippa_scanner_sdk_color_button_with_icon_background\"\u003e#444444\u003c/color\u003e\n  \u003ccolor name=\"klippa_scanner_sdk_color_primary_action_foreground\"\u003e#ffffff\u003c/color\u003e\n  \u003ccolor name=\"klippa_scanner_sdk_color_primary_action_background\"\u003e#2dc36a\u003c/color\u003e\n\u003c/resources\u003e\n```\n\n#### iOS\n\nUse the following properties in the config:\n\n```dart\n  config.accentColor = Color.fromARGB(255, 255, 255, 255);\n  config.buttonWithIconBackgroundColor = Color.fromARGB(255, 68, 68, 68);\n  config.buttonWithIconForegroundColor = Color.fromARGB(255, 255, 255, 255);\n  config.iconDisabledColor = Color.fromARGB(255, 255, 0, 191);\n  config.iconEnabledColor = Color.fromARGB(255, 0, 59, 255);\n  config.primaryColor = Color.fromARGB(255, 0, 0, 0);\n  config.secondaryColor = Color.fromARGB(255, 255, 0, 191);\n  config.warningBackgroundColor = Color.fromARGB(255, 252, 252, 252);\n  config.warningTextColor = Color.fromARGB(255, 0, 0, 0);\n  config.overlayColorAlpha = 0.75; // manually set the alpha of the overlay bounding box.\n  config.primaryActionForegroundColor = Color.fromARGB(255, 0, 0, 0)\n  config.primaryActionBackgroundColor = Color.fromARGB(255, 255, 255, 255)\n```\n\n### Customize the texts\n\n#### Android\n\nAdd or edit the file `android/app/src/res/values/strings.xml`, add the following:\n\n```xml\n\u003cresources\u003e\n  \u003cstring name=\"klippa_action_crop\"\u003eCrop\u003c/string\u003e\n  \u003cstring name=\"klippa_action_delete\"\u003eDelete\u003c/string\u003e\n  \u003cstring name=\"klippa_action_expand\"\u003eExpand\u003c/string\u003e\n  \u003cstring name=\"klippa_action_filter\"\u003eFilter\u003c/string\u003e\n  \u003cstring name=\"klippa_action_rotate\"\u003eRotate\u003c/string\u003e\n  \u003cstring name=\"klippa_action_save\"\u003eSave\u003c/string\u003e\n  \u003cstring name=\"klippa_auto_capture\"\u003eAuto-Capture\u003c/string\u003e\n  \u003cstring name=\"klippa_cancel_button_text\"\u003eCancel\u003c/string\u003e\n  \u003cstring name=\"klippa_cancel_confirmation\"\u003eWhen you close the taken scans will be deleted. Are you sure you want to cancel without saving?\u003c/string\u003e\n  \u003cstring name=\"klippa_cancel_delete_images\"\u003eCancel Scanner\u003c/string\u003e\n  \u003cstring name=\"klippa_continue_button_text\"\u003eContinue\u003c/string\u003e\n  \u003cstring name=\"klippa_delete_button_text\"\u003eDelete\u003c/string\u003e\n  \u003cstring name=\"klippa_image_color_enhanced\"\u003eEnhanced\u003c/string\u003e\n  \u003cstring name=\"klippa_image_color_grayscale\"\u003eGrayscale\u003c/string\u003e\n  \u003cstring name=\"klippa_image_color_original\"\u003eOriginal\u003c/string\u003e\n  \u003cstring name=\"klippa_image_limit_reached\"\u003eYou have reached the image limit\u003c/string\u003e\n  \u003cstring name=\"klippa_image_moving_message\"\u003eMoving too much\u003c/string\u003e\n  \u003cstring name=\"klippa_images\"\u003eImages\u003c/string\u003e\n  \u003cstring name=\"klippa_manual_capture\"\u003eManual\u003c/string\u003e\n  \u003cstring name=\"klippa_orientation_warning_message\"\u003eHold your phone in portrait mode\u003c/string\u003e\n  \u003cstring name=\"klippa_retake_button_text\"\u003eRetake\u003c/string\u003e\n  \u003cstring name=\"klippa_success_message\"\u003eSuccess\u003c/string\u003e\n  \u003cstring name=\"klippa_zoom_message\"\u003eMove closer to the document\u003c/string\u003e\n  \u003cstring name=\"klippa_too_bright_warning_message\"\u003eThe image is too bright\u003c/string\u003e\n  \u003cstring name=\"klippa_too_dark_warning_message\"\u003eThe image is too dark\u003c/string\u003e\n\u003c/resources\u003e\n```\n\n#### iOS\n\nUse the following properties in the config:\n\n```dart\n// The warning message when someone should move closer to a document, should be a string.\nconfig.moveCloserMessage = \"Move closer to the document\";\n\n// The warning message when the camera preview has to much motion to be able to automatically take a photo.\nconfig.imageMovingMessage = \"Too much movement\";\n\n// The warning message when the camera turned out of portrait mode.\nconfig.orientationWarningMessage = \"Hold your phone in portrait mode\";\n\n// The message to display when the image was successfully taken.\nconfig.success.message = \"Success!\";\n\n// The message to display when the limit has been reached.\nconfig.imageLimitReachedMessage = \"You have reached the image limit\";\n\n// The message to display when the cancel button has tapped.\nconfig.cancelConfirmationMessage = \"Delete photos and exit scanner?\";\n\n// The text of the delete image button.\nconfig.deleteButtonText = \"Delete Photo\";\n\n// The text of the retake image button.\nconfig.retakeButtonText = \"Retake Photo\";\n\n// The text of the cancel event button.\nconfig.cancelButtonText = \"Cancel\";\n\n// The text of the button shown as one of the delete confirmation alert dialog options.\nconfig.cancelAndDeleteImagesButtonText = \"Delete photos and exit\";\n\n// The warning message when the camera result is too bright.\nconfig.imageTooBrightMessage = \"The image is too bright\";\n\n// The warning message when the camera result is too dark.\nconfig.imageTooDarkMessage = \"The image is too dark\";\n\n// The message displayed at the top of segmented document mode.\nconfig.segmentedModeImageCountMessage = \"Images\"\n\n// The text shown in the review screen to edit the bounding box.\nconfig.cropEditButtonText = \"Crop\"\n\n// The text shown in the review screen to change the filter on the image.\nconfig.filterEditButtonText = \"Filter\"\n\n// The text shown in the review screen to rotate the image.\nconfig.rotateEditButtonText = \"Rotate\"\n\n// The text shown in the review screen to delete the image.\nconfig.deleteEditButtonText = \"Delete\"\n\n// The text shown in the crop screen cancel editing.\nconfig.cancelCropButtonText = \"Cancel\"\n\n// The text shown in the crop screen to expand the bounding box.\nconfig.expandCropButtonText = \"Expand\"\n\n// The text to finish the scanner on the edit screen.\nconfig.continueButtonText = \"Continue\"\n\n// The text shown in the crop screen to save the bounding box.\nconfig.saveCropButtonText = \"Save\"\n```\n\n### Customize image in CameraMode instructions\n\n#### Android\n\nAdd an XML file in `android/app/src/res/drawable/` with name `klippa_camera_mode_single_document.xml` to change the image in Single Document Mode.\nAdd an XML file in `android/app/src/res/drawable/` with name `klippa_camera_mode_multiple_documents.xml` to change the image in Multiple Document Mode.\nAdd an XML file in `android/app/src/res/drawable/` with name `klippa_camera_mode_segmented_document.xml` to change the image in Segmented Document Mode.\n\n#### iOS\n\nUse the following properties in the config:\n\n```dart\n// Change the default image in the Segmented Document Mode instructions.\nconfig.cameraModeSegmented?.image = \"{name of image in Assets.xcassets}\";\n\n// Change the default image in the Multi Document Mode instructions.\nconfig.cameraModeMulti?.image = \"{name of image in Assets.xcassets}\";\n\n// Change the default image in the Single Document Mode instructions.\nconfig.cameraModeSingle?.image = \"{name of image in Assets.xcassets}\";\n```\n\n### Clear Storage\n\n```dart\nimport 'package:klippa_scanner_sdk/klippa_scanner_sdk.dart';\n\ntry {\n  await KlippaScannerSdk.purge();\n} on PlatformException catch (e) {\n  print('Failed to purge storage: ' + e.toString());\n}\n```\n\n\n### Important iOS notes\nOlder iOS versions do not ship the Swift libraries. To make sure the SDK works on older iOS versions, you can configure the build to embed the Swift libraries using the build setting `EMBEDDED_CONTENT_CONTAINS_SWIFT = YES`.\n\nWe started using XCFrameworks from version 0.1.0, if you want to use that version or up, you need CocoaPod version 1.9.0 or higher.\n\n## Important Android notes\nWhen using a custom trained model for object detection, add the following to your app's build.gradle file to ensure Gradle doesn’t compress the models when building the app:\n\n```groovy\nandroid {\n    aaptOptions {\n        noCompress \"tflite\"\n    }\n}\n```\n\n### About Klippa\n\n[Klippa](https://www.klippa.com/en) is a scale-up from [Groningen, The Netherlands](https://goo.gl/maps/CcCGaPTBz3u8noSd6) and was founded in 2015 by six Dutch IT specialists with the goal to digitize paper processes with modern technologies.\n\nWe help clients enhance the effectiveness of their organization by using machine learning and OCR. Since 2015 more than a 1000 happy clients have been served with a variety of the software solutions that Klippa offers. Our passion is to help our clients to digitize paper processes by using smart apps, accounts payable software and data extraction by using OCR.\n\n### License\n\nThe MIT License (MIT)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fklippa-app%2Fflutter-klippa-scanner-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fklippa-app%2Fflutter-klippa-scanner-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fklippa-app%2Fflutter-klippa-scanner-sdk/lists"}