Beschreibung
Mit der chrome.documentScan
API können Sie Bilder von angeschlossenen Dokumentenscannern erkennen und abrufen.
Die Document Scan API wurde entwickelt, damit Apps und Erweiterungen den Inhalt von Papierdokumenten auf einem angeschlossenen Dokumentenscanner ansehen können.
Berechtigungen
documentScan
Verfügbarkeit
Konzepte und Verwendung
Diese API unterstützt zwei Methoden zum Scannen von Dokumenten. Wenn Ihr Anwendungsfall mit einem beliebigen Scanner funktioniert und keine Konfigurationssteuerung erforderlich ist, verwenden Sie die scan()
-Methode. Für komplexere Anwendungsfälle ist eine Kombination von Methoden erforderlich, die nur in Chrome 124 und höher unterstützt werden.
Einfaches Scannen
Für einfache Anwendungsfälle, die mit jedem Scanner funktionieren und keine Konfigurationssteuerung erfordern, rufen Sie scan()
auf. Diese Methode verwendet ein ScanOptions
-Objekt und gibt ein Promise zurück, das mit einem ScanResults
-Objekt aufgelöst wird. Die Funktionen dieser Option sind auf die Anzahl der Scans und die MIME-Typen beschränkt, die vom Anrufer akzeptiert werden. Scans werden als URLs zurückgegeben, die in einem <img>
-Tag für eine Benutzeroberfläche angezeigt werden können.
Komplexes Scannen
Komplexe Scans werden in drei Phasen durchgeführt, wie in diesem Abschnitt beschrieben. In dieser Übersicht werden nicht alle Methodenargumente oder alle Eigenschaften beschrieben, die in einer Antwort zurückgegeben werden. Es soll Ihnen lediglich eine allgemeine Anleitung zum Schreiben von Scanner-Code geben.
Discovery
Rufen Sie
getScannerList()
auf. Verfügbare Scanner werden in einem Promise zurückgegeben, das mit einemGetScannerListResponse
aufgelöst wird.- Das Antwortobjekt enthält ein Array von
ScannerInfo
-Objekten. - Das Array kann mehrere Einträge für einen einzelnen Scanner enthalten, wenn dieser mehrere Protokolle oder Verbindungsmethoden unterstützt.
- Das Antwortobjekt enthält ein Array von
Wählen Sie einen Scanner aus dem zurückgegebenen Array aus und speichern Sie den Wert des Attributs
scannerId
.Verwenden Sie die Eigenschaften einzelner
ScannerInfo
-Objekte, um mehrere Objekte für denselben Scanner zu unterscheiden. Objekte vom selben Scanner haben denselben Wert für das AttributdeviceUuid
.ScannerInfo
enthält auch die EigenschaftimageFormats
, die ein Array mit unterstützten Bildtypen enthält.
Scannerkonfiguration
Rufen Sie
openScanner()
auf und übergeben Sie die gespeicherte Scanner-ID. Es wird ein Promise zurückgegeben, das mit einemOpenScannerResponse
aufgelöst wird. Das Antwortobjekt enthält:Eine
scannerHandle
-Property, die Sie speichern müssen.Eine Options-Property mit scannerspezifischen Properties, die Sie festlegen müssen. Weitere Informationen finden Sie unter Scanneroptionen abrufen.
(Optional) Wenn der Nutzer Werte für Scanneroptionen angeben muss, erstellen Sie eine Benutzeroberfläche. Sie benötigen die Scanneroptionen aus dem vorherigen Schritt und müssen die vom Scanner bereitgestellten Optionsgruppen abrufen. Weitere Informationen finden Sie unter Benutzeroberfläche erstellen.
Erstellen Sie ein Array von
OptionSetting
-Objekten mit programmatischen oder vom Nutzer bereitgestellten Werten. Weitere Informationen finden Sie unter „Scanneroptionen festlegen“.Übergeben Sie das Array von
OptionSetting
-Objekten ansetOptions()
, um Optionen für den Scanner festzulegen. Es wird ein Promise zurückgegeben, das mit einemSetOptionsResponse
aufgelöst wird. Dieses Objekt enthält eine aktualisierte Version der Scanneroptionen, die in Schritt 1 der Scannerkonfiguration abgerufen wurden.Da sich durch das Ändern einer Option die Einschränkungen für eine andere Option ändern können, müssen Sie diese Schritte möglicherweise mehrmals wiederholen.
Scannen
Erstellen Sie ein
StartScanOptions
-Objekt und übergeben Sie es anstartScan()
. Es wird ein Promise zurückgegeben, das mit einemStartScanResponse
aufgelöst wird. Diejob
-Eigenschaft ist ein Handle, das Sie verwenden, um entweder Scandaten zu lesen oder den Scan abzubrechen.Übergeben Sie den Job-Handle an
readScanData()
. Es wird ein Promise zurückgegeben, das mit einemReadScanDataResponse
-Objekt aufgelöst wird. Wenn Daten erfolgreich gelesen wurden, ist das Attributresult
gleichSUCCESS
und das Attributdata
enthält einArrayBuffer
mit einem Teil des Scans.estimatedCompletion
enthält einen geschätzten Prozentsatz der bisher bereitgestellten Gesamtdaten.Wiederholen Sie den vorherigen Schritt, bis das Attribut
result
gleichEOF
ist oder ein Fehler auftritt.
Wenn das Ende des Scans erreicht ist, rufen Sie closeScanner()
mit dem in Schritt 3 gespeicherten Scanner-Handle auf. Es wird ein Promise zurückgegeben, das mit einem CloseScannerResponse
aufgelöst wird. Wenn Sie cancelScan()
jederzeit nach der Job-Erstellung aufrufen, wird der Scan beendet.
Antwortobjekte
Alle Methoden geben ein Promise zurück, das mit einem Antwortobjekt aufgelöst wird.
Die meisten enthalten eine result
-Eigenschaft, deren Wert ein Element von OperationResult
ist. Einige Eigenschaften von Antwortobjekten enthalten nur dann Werte, wenn der Wert von result
einen bestimmten Wert hat. Diese Beziehungen werden in der Referenz für jedes Antwortobjekt beschrieben.
OpenScannerResponse.scannerHandle
hat beispielsweise nur einen Wert, wenn OpenScannerResponse.result
gleich SUCCESS
ist.
Scanneroptionen
Die Scanneroptionen variieren je nach Gerät erheblich. Daher ist es nicht möglich, Scanneroptionen direkt in der documentScan API zu berücksichtigen. Um dieses Problem zu umgehen, enthalten das OpenScannerResponse
-Objekt (abgerufen mit openScanner()
) und das SetOptionsResponse
-Objekt (das Antwortobjekt für setOptions()
) ein options
-Attribut, das ein Objekt mit scannerspezifischen Optionen ist. Jede Option ist eine Schlüssel/Wert-Zuordnung, wobei der Schlüssel eine gerätespezifische Option und der Wert eine Instanz von ScannerOption
ist.
Die Struktur sieht in der Regel so aus:
{
"key1": { scannerOptionInstance }
"key2": { scannerOptionInstance }
}
Stellen Sie sich beispielsweise einen Scanner vor, der die Optionen „Quelle“ und „Auflösung“ zurückgibt. Die Struktur des zurückgegebenen options
-Objekts sieht in etwa so aus: Der Einfachheit halber werden nur teilweise ScannerOption
-Antworten angezeigt.
{
"source": {
"name": "source",
"type": OptionType.STRING,
...
},
"resolution": {
"name": "resolution",
"type": OptionType.INT,
...
},
...
}
Benutzeroberfläche erstellen
Die Verwendung dieser API ist zwar nicht erforderlich, aber es kann sinnvoll sein, dass ein Nutzer den Wert für eine bestimmte Option auswählt. Dafür ist eine Benutzeroberfläche erforderlich. Verwenden Sie das OpenScannerResponse
(geöffnet über openScanner()
), um die Optionen für den angeschlossenen Scanner wie im vorherigen Abschnitt beschrieben abzurufen.
Bei einigen Scannern werden Optionen gerätespezifisch gruppiert. Sie haben keine Auswirkungen auf das Verhalten von Optionen. Da diese Gruppen jedoch in der Produktdokumentation eines Scanners erwähnt werden können, sollten sie dem Nutzer angezeigt werden. Sie können diese Gruppen durch Aufrufen von getOptionGroups()
abrufen. Dadurch wird ein Promise zurückgegeben, das mit einem GetOptionGroupsResponse
-Objekt aufgelöst wird. Die groups
-Eigenschaft enthält ein scannerspezifisches Array von Gruppen. Mithilfe der Informationen in diesen Gruppen können Sie die Optionen in der OpenScannerResponse
für die Anzeige organisieren.
{
scannerHandle: "123456",
result: SUCCESS,
groups: [
{
title: "Standard",
members: [ "resolution", "mode", "source" ]
}
]
}
Wie unter „Scannerkonfiguration“ beschrieben, kann sich das Ändern einer Option auf die Einschränkungen einer anderen Option auswirken. Aus diesem Grund enthält setOptionsResponse
(das Antwortobjekt für