naps2/NAPS2.Sdk
2024-03-10 19:37:31 -07:00
..
_doc Sdk: Doc cross-links 2023-12-30 10:02:37 -08:00
Images Undo/redo 2024-03-04 20:50:35 -08:00
ImportExport Run MAPISendMail on the UI thread 2024-01-14 19:27:53 -08:00
Lang/Resources Update language files 2024-03-10 19:37:31 -07:00
Ocr Add a separate checkbox for OCR preprocessing 2024-02-25 11:55:08 -08:00
Pdf Move pre-processing inside TesseractOcrEngine 2024-02-18 10:38:06 -08:00
Platform Sane: Rework non-deterministic ID handling 2024-02-04 17:56:32 -08:00
Remoting Keep inner exceptions when serializing 2024-03-10 14:03:25 -07:00
Scan Wia: Add debug logging for dpi changes 2024-03-03 12:45:52 -08:00
Serialization Keep proto compatibility 2024-01-03 16:12:58 -08:00
Testing Fix a bunch of warnings 2022-07-02 15:13:31 -07:00
Threading Use EtoInvoker instead of SyncContextInvoker 2023-12-07 21:10:03 -08:00
Unmanaged Make NAPS2.Util classes internal or move to NAPS2.Lib 2023-04-30 14:17:55 -07:00
Util Add a CopyDirectory helper 2024-01-30 21:08:50 -08:00
.gitignore Move ClientCreds to NAPS2.Lib.Common and avoid custom prebuild 2022-07-29 22:09:34 -07:00
LICENSE Update copyright year to 2024 2023-12-30 14:45:47 -08:00
NAPS2.Sdk.csproj Use NAPS2.NTwain package 2024-03-09 19:50:06 -08:00
README.md Sdk: Add WPF package to readme 2023-12-30 12:37:42 -08:00

NAPS2.Sdk

NuGet

NAPS2.Sdk is a fully-featured scanning library, supporting WIA, TWAIN, SANE, and ESCL scanners on Windows, Mac, and Linux.

Packages

NAPS2.Sdk is modular, and depending on your needs you may have to reference a different set of packages.

Required Packages

Optional Packages

Usage

// Set up
using var scanningContext = new ScanningContext(new GdiImageContext());
var controller = new ScanController(scanningContext);

// Query for available scanning devices
var devices = await controller.GetDeviceList();

// Set scanning options
var options = new ScanOptions
{
    Device = devices.First(),
    PaperSource = PaperSource.Feeder,
    PageSize = PageSize.A4,
    Dpi = 300
};

// Scan and save images
int i = 1;
await foreach (var image in controller.Scan(options))
{
    image.Save($"page{i++}.jpg");
}

// Scan and save PDF
var images = await controller.Scan(options).ToListAsync();
var pdfExporter = new PdfExporter(scanningContext);
await pdfExporter.Export("doc.pdf", images);

More samples:

Also see:

Drivers

Windows Mac Linux
WIA X
TWAIN X *
Apple X
SANE X X
ESCL X X X

WIA (Windows Image Acquisition) is a Microsoft technology for scanners (and cameras). Many scanners provide WIA drivers for Windows.

TWAIN is a cross-platform standard for image acquisition. Many scanners provide TWAIN drivers for Windows and/or Mac.

Apple's ImageCaptureCore provides access to TWAIN and ESCL scanners on Mac devices.

SANE is an open-source API and set of backends for various scanners. Primarily for Linux, supported devices use backends made by open-source contributors or the manufacturer themselves.

ESCL, also known as Apple AirScan, is a standard protocol for scanning over a network. Many modern scanners support ESCL, and as it's a network protocol, specific drivers aren't required. ESCL can also be used over a USB connection in some cases.

Choosing a Driver

Each platform has a default driver (WIA on Windows, Apple on Mac, and SANE on Linux). To use another driver, you only need to specify it when querying for devices:

var devices = await controller.GetDeviceList(Driver.Twain);

Worker Processes

Using the TWAIN driver on Windows usually requires the calling process to be 32-bit. If you want to use TWAIN from a 64-bit process, NAPS2 provides a 32-bit worker process:

// Reference the NAPS2.Sdk.Worker.Win32 package and call this method
scanningContext.SetUpWin32Worker();

Contributing

Looking to contribute to NAPS2 or NAPS2.Sdk? Have a look at the wiki.