Skip to content

nousath/advanced_document_scanner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

5 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“„ advanced_document_scanner

Camera-based document scanner for Flutter with a built-in editor (highlight, crop/cut, rotate) and advanced export options (JPG/PNG/GIF + low/medium/high/max presets).

Platforms: βœ… Android | βœ… iOS


✨ Features

πŸ“· Scan

  • Uses the camera plugin
  • Captures at maximum supported resolution (best source)
  • Multi-page capture

πŸ€– Native document scanner (optional)

  • Android: Google ML Kit Document Scanner (Play services)
    • Uses dependency com.google.android.gms:play-services-mlkit-document-scanner:16.0.0
  • iOS: VisionKit document scanner (VNDocumentCameraViewController)
  • Returns page images and (when available) a generated PDF

✍️ Edit

  • Highlight (marker)
  • Crop / Cut
  • Rotate

πŸ“€ Export

  • Formats: JPG / PNG / GIF
  • Presets: low / medium / high / max
  • Optional overrides: targetWidth, targetHeight, jpgQuality

πŸš€ Installation

dependencies:
  advanced_document_scanner: ^0.0.1

πŸ” Permissions

Android

Add in android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.CAMERA"/>

iOS

Add in ios/Runner/Info.plist:

<key>NSCameraUsageDescription</key>
<string>We need camera access to scan documents.</string>

βœ… Usage

1) Capture + Edit

final scanner = AdvancedDocumentScanner();

final result = await scanner.captureAndEdit(
  pageLimit: 10,
  multiPage: true,
);

final source = (result.editedImagePaths?.isNotEmpty ?? false)
    ? result.editedImagePaths!
    : result.originalImagePaths;

2) Scan + Edit (ML Kit Android / VisionKit iOS)

final scanner = AdvancedDocumentScanner();

final result = await scanner.scanWithMlKit(
  pageLimit: 10,
  allowGallery: true,
  returnJpeg: true,
  returnPdf: true,
  openEditorAfterScan: true,
);

// Optional:
final pdfPath = result.pdfPath;

πŸ“€ Export (ALL options)

A) Export with preset (low / medium / high / max)

final outputDir = await scanner.getDefaultExportDir(
  folderName: 'advanced_document_scanner_exports',
);

final files = await scanner.exportImages(
  imagePaths: source,
  outputDir: outputDir,
  options: const AdsExportOptions(
    format: AdsImageFormat.jpg,
    preset: AdsQualityPreset.high,
  ),
);

B) Export as PNG (lossless)

final pngFiles = await scanner.exportImages(
  imagePaths: source,
  outputDir: outputDir,
  options: const AdsExportOptions(
    format: AdsImageFormat.png,
    preset: AdsQualityPreset.high,
  ),
);

C) Export as GIF (single-frame)

final gifFiles = await scanner.exportImages(
  imagePaths: source,
  outputDir: outputDir,
  options: const AdsExportOptions(
    format: AdsImageFormat.gif,
    preset: AdsQualityPreset.medium,
  ),
);

D) Custom width/height override

final customSize = await scanner.exportImages(
  imagePaths: source,
  outputDir: outputDir,
  options: const AdsExportOptions(
    format: AdsImageFormat.jpg,
    preset: AdsQualityPreset.high,
    targetWidth: 1600,
    targetHeight: 2200,
  ),
);

E) Override JPG quality (0–100)

final customQuality = await scanner.exportImages(
  imagePaths: source,
  outputDir: outputDir,
  options: const AdsExportOptions(
    format: AdsImageFormat.jpg,
    preset: AdsQualityPreset.high,
    jpgQuality: 85,
  ),
);

🧩 Open editor for existing images

final editedPaths = await scanner.openEditor(
  imagePaths: source,
  enableHighlight: true,
  enableCrop: true,
  enableCut: true,
  enableRotate: true,
);

β˜• Sponsor a cup of tea

If this package saves your time, consider supporting development ❀️


πŸ“„ License

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors