Table of Contents

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:

Web Scanning with JS/TS

NAPS2's scanner-sharing server uses ESCL, which is a standard HTTP protocol and can be used from a web browser with JavaScript or TypeScript.

See the naps2-webscan project for example code to scan from a browser.

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.