chrome.documentScan

Nội dung mô tả

Sử dụng API chrome.documentScan để khám phá và truy xuất hình ảnh từ trình quét tài liệu đính kèm.

API Quét tài liệu được thiết kế nhằm cho phép các ứng dụng và tiện ích xem nội dung của tài liệu giấy trên một trình quét tài liệu đi kèm.

Quyền

documentScan

Phạm vi cung cấp

Chrome 44 trở lên Chỉ dành cho ChromeOS
Những thành viên API được thêm sau này sẽ xuất hiện cùng những thành viên đó.

Khái niệm và cách sử dụng

API này hỗ trợ hai phương tiện để quét tài liệu. Nếu trường hợp sử dụng của bạn có thể hoạt động với mọi trình quét mà không cần quyền kiểm soát cấu hình, hãy sử dụng phương thức scan(). Các trường hợp sử dụng phức tạp hơn cần đến sự kết hợp của nhiều phương thức. Các phương thức này chỉ được hỗ trợ trong Chrome 124 trở lên.

Quét đơn giản

Đối với các trường hợp sử dụng đơn giản, tức là những trường hợp có thể hoạt động với mọi trình quét mà không cần kiểm soát cấu hình, hãy gọi scan(). Phương thức này lấy đối tượng ScanOptions và trả về một Promise sẽ phân giải bằng đối tượng ScanResults. Khả năng của tuỳ chọn này bị giới hạn ở số lần quét và loại MIME sẽ được phương thức gọi chấp nhận. Các lượt quét được trả về dưới dạng URL để hiển thị trong thẻ <img> của giao diện người dùng.

Quét phức tạp

Quá trình quét phức tạp được thực hiện theo 3 giai đoạn như mô tả trong phần này. Đường viền này không mô tả mọi đối số phương thức hoặc mọi thuộc tính được trả về trong một phản hồi. Bài viết này chỉ nhằm cung cấp cho bạn hướng dẫn chung để viết mã trình quét.

Chiến dịch Khám phá

  1. Gọi getScannerList(). Các trình quét có sẵn sẽ được trả về trong một Promise giải quyết bằng GetScannerListResponse.

    • Đối tượng phản hồi chứa một mảng các đối tượng ScannerInfo.
    • Mảng đó có thể chứa nhiều mục nhập cho một trình quét nếu trình quét đó hỗ trợ nhiều giao thức hoặc phương thức kết nối.
  2. Chọn một trình quét trong mảng được trả về và lưu giá trị của thuộc tính scannerId của mảng đó.

    Sử dụng thuộc tính của từng đối tượng ScannerInfo để phân biệt nhiều đối tượng cho cùng một trình quét. Các đối tượng từ cùng một trình quét sẽ có cùng giá trị cho thuộc tính deviceUuid. ScannerInfo cũng chứa một thuộc tính imageFormats chứa một loạt các loại hình ảnh được hỗ trợ.

Cấu hình máy quét

  1. Gọi openScanner(), truyền mã trình quét đã lưu. Phương thức này trả về một Hứa hẹn sẽ phân giải bằng OpenScannerResponse. Đối tượng phản hồi chứa:

    • Bạn cần lưu thuộc tính scannerHandle này.

    • Bạn cần đặt một thuộc tính tuỳ chọn chứa các thuộc tính dành riêng cho trình quét. Xem tuỳ chọn Truy xuất trình quét để biết thêm thông tin.

  2. (Không bắt buộc) Nếu bạn cần người dùng cung cấp các giá trị cho các tuỳ chọn trình quét, hãy tạo một giao diện người dùng. Bạn cần có các tuỳ chọn trình quét ở bước trước và cần truy xuất các nhóm tuỳ chọn do trình quét cung cấp. Xem Xây dựng giao diện người dùng để biết thêm thông tin.

  3. Tạo một mảng các đối tượng OptionSetting bằng cách sử dụng các giá trị có lập trình hoặc do người dùng cung cấp. Xem Đặt tuỳ chọn trình quét để biết thêm thông tin.

  4. Truyền mảng đối tượng OptionSetting đến setOptions() để đặt các tuỳ chọn cho trình quét. Thao tác này trả về một Promise sẽ phân giải bằng SetOptionsResponse. Đối tượng này chứa phiên bản cập nhật của các tuỳ chọn trình quét được truy xuất ở bước 1 của quá trình định cấu hình trình quét.

    Vì việc thay đổi một tuỳ chọn có thể làm thay đổi các quy tắc hạn chế đối với một tuỳ chọn khác, nên bạn có thể cần lặp lại các bước này nhiều lần.

Đang quét

  1. Tạo một đối tượng StartScanOptions rồi truyền đối tượng đó đến startScan(). Phương thức này trả về một Promise sẽ phân giải bằng StartScanResponse. Thuộc tính job là một tên người dùng mà bạn sẽ dùng để đọc dữ liệu quét hoặc huỷ quá trình quét.

  2. Truyền tên công việc đến readScanData(). Phương thức này trả về một Promise sẽ phân giải bằng đối tượng ReadScanDataResponse. Nếu dữ liệu được đọc thành công, thuộc tính result của nó sẽ bằng SUCCESS và thuộc tính data của nó chứa ArrayBuffer trong quá trình quét. Xin lưu ý rằng estimatedCompletion chứa một tỷ lệ phần trăm ước tính trong tổng số dữ liệu đã được phân phối đến nay.

  3. Lặp lại bước trước đó cho đến khi thuộc tính result bằng EOF hoặc xuất hiện lỗi.

Khi quét xong, hãy gọi closeScanner() bằng tay cầm trình quét được lưu ở bước 3. Phương thức này trả về một Promise sẽ phân giải bằng CloseScannerResponse. Nếu bạn gọi cancelScan() bất cứ lúc nào sau khi tạo công việc, quá trình quét sẽ kết thúc.

Đối tượng phản hồi

Tất cả các phương thức đều trả về một Promise sẽ phân giải bằng một đối tượng phản hồi thuộc loại nào đó. Hầu hết các đối tượng này đều chứa thuộc tính result có giá trị là thành phần của OperationResult. Một số thuộc tính của đối tượng phản hồi sẽ không chứa các giá trị trừ phi giá trị của result có một giá trị cụ thể. Các mối quan hệ này được mô tả trong tệp tham chiếu cho từng đối tượng phản hồi.

Ví dụ: OpenScannerResponse.scannerHandle sẽ chỉ có giá trị khi OpenScannerResponse.result bằng SUCCESS.

Tuỳ chọn máy quét

Các tuỳ chọn trình quét khác nhau đáng kể tuỳ theo thiết bị. Do đó, bạn không thể trực tiếp phản ánh các tuỳ chọn trình quét trong API documentScan. Để giải quyết vấn đề này, OpenScannerResponse (được truy xuất bằng openScanner()) và SetOptionsResponse (đối tượng phản hồi cho setOptions()) chứa thuộc tính options, là một đối tượng chứa các tuỳ chọn dành riêng cho trình quét. Mỗi tuỳ chọn là một liên kết khoá-giá trị, trong đó khoá là một tuỳ chọn dành riêng cho thiết bị và giá trị là một thực thể của ScannerOption.

Cấu trúc thường có dạng như sau:

{
  "key1": { scannerOptionInstance }
  "key2": { scannerOptionInstance }
}

Ví dụ: hãy tưởng tượng một trình quét trả về các tuỳ chọn có tên là "source" và "Resolution" (Độ phân giải). Cấu trúc của đối tượng options được trả về sẽ có dạng như ví dụ sau. Để đơn giản, chỉ hiển thị một phần phản hồi ScannerOption.

{
  "source": {
    "name": "source",
    "type": OptionType.STRING,
...
},
  "resolution": {
    "name": "resolution",
    "type": OptionType.INT,
...
  },
...
}

Xây dựng giao diện người dùng

Mặc dù không bắt buộc phải sử dụng API này, nhưng bạn có thể muốn người dùng chọn giá trị cho một tuỳ chọn cụ thể. Việc này yêu cầu giao diện người dùng. Sử dụng OpenScannerResponse (mở bằng openScanner()) để truy xuất các tuỳ chọn cho trình quét đính kèm như mô tả trong phần trước.

Một số trình quét nhóm các tuỳ chọn theo các cách riêng cho thiết bị. Chúng không ảnh hưởng đến các hành vi của tuỳ chọn, nhưng vì các nhóm này có thể được đề cập trong tài liệu về sản phẩm của trình quét, nên người dùng phải thấy các nhóm như vậy. Bạn có thể truy xuất các nhóm này bằng cách gọi getOptionGroups(). Thao tác này sẽ trả về một Promise sẽ phân giải bằng đối tượng GetOptionGroupsResponse. Thuộc tính groups của lớp này chứa một mảng nhóm dành riêng cho trình quét. Sử dụng thông tin trong các nhóm này để sắp xếp các tuỳ chọn trong OpenScannerResponse để hiển thị.

{
  scannerHandle: "123456",
  result: SUCCESS,
  groups: [
    {
      title: "Standard",
      members: [ "resolution", "mode", "source" ]
    }
  ]
}

Như đã nêu trong cấu hình Trình quét, việc thay đổi một tuỳ chọn có thể làm thay đổi các quy tắc ràng buộc trên một tuỳ chọn khác. Đây là lý do tại sao setOptionsResponse (đối tượng phản hồi cho setOptions()) chứa một thuộc tính options khác. Hãy sử dụng tính năng này để cập nhật giao diện người dùng. Sau đó, lặp lại nếu cần cho đến khi tất cả các tuỳ chọn được đặt.

Đặt tuỳ chọn trình quét

Đặt các tuỳ chọn trình quét bằng cách truyền một mảng các đối tượng OptionSetting vào setOptions(). Để biết ví dụ, hãy xem phần Quét một trang có kích thước bằng chữ cái sau.

Ví dụ

Truy xuất trang dưới dạng blob

Ví dụ này minh hoạ một cách truy xuất một trang từ trình quét dưới dạng blob, đồng thời minh hoạ việc sử dụng startScan()readScanData() bằng giá trị OperationResult.

async function pageAsBlob(handle) {
  let response = await chrome.documentScan.startScan(
      handle, {format: "image/jpeg"});
  if (response.result != chrome.documentScan.OperationResult.SUCCESS) {
    return null;
  }
  const job = response.job;

  let imgParts = [];
  response = await chrome.documentScan.readScanData(job);
  while (response.result == chrome.documentScan.OperationResult.SUCCESS) {
    if (response.data && response.data.byteLength > 0) {
        imgParts.push(response.data);
    } else {
      // Delay so hardware can make progress.
      await new Promise(r => setTimeout(r, 100));
    }
    response = await chrome.documentScan.readScanData(job);
  }
  if (response.result != chrome.documentScan.OperationResult.EOF) {
    return null;
  }
  if (response.data && response.data.byteLength > 0) {
    imgParts.push(response.data);
  }
  return new Blob(imgParts, { type: "image/jpeg" });
}

Quét một trang có kích thước bằng chữ cái

Ví dụ này cho biết cách chọn một trình quét, đặt các tuỳ chọn và mở trình quét đó. Sau đó, Chrome sẽ truy xuất nội dung của một trang và đóng trình quét. Quy trình này được minh hoạ bằng cách sử dụng getScannerList(), openScanner(), setOptions()closeScanner(). Xin lưu ý rằng nội dung của trang được truy xuất bằng cách gọi hàm pageAsBlob() từ ví dụ trước.

async function scan() {
    let response = await chrome.documentScan.getScannerList({ secure: true });
    let scanner = await chrome.documentScan.openScanner(
        response.scanners[0].scannerId);
    const handle = scanner.scannerHandle;

    let options = [];
    for (source of scanner.options["source"].constraint.list) {
        if (source.includes("ADF")) {
            options.push({
                name: "source",
                type: chrome.documentScan.OptionType.STRING,
                value: { value: source }
            });
            break;
        }
    }
    options.push({
        name: "tl-x",
        type: chrome.documentScan.OptionType.FIXED,
        value: 0.0
    });
    options.push({
        name: "br-x",
        type: chrome.documentScan.OptionType.FIXED,
        value: 215.9  // 8.5" in mm
    });
    options.push({
        name: "tl-y",
        type: chrome.documentScan.OptionType.FIXED,
        value: 0.0
    });
    options.push({
        name: "br-y",
        type: chrome.documentScan.OptionType.FIXED,
        value: 279.4  // 11" in mm
    });
    response = await chrome.documentScan.setOptions(handle, options);

    let imgBlob = await pageAsBlob(handle);
    if (imgBlob != null) {
        // Insert imgBlob into DOM, save to disk, etc
    }
    await chrome.documentScan.closeScanner(handle);
}

Hiển thị cấu hình

Như đã nêu ở nơi khác, việc hiển thị các tuỳ chọn cấu hình của trình quét cho người dùng yêu cầu gọi getOptionGroups() ngoài các tuỳ chọn trình quét được trả về từ lệnh gọi đến openScanner(). Nhờ đó, người dùng có thể thấy các tuỳ chọn trong các nhóm do nhà sản xuất xác định. Ví dụ sau cho thấy cách thực hiện việc đó.

async function showConfig() {
  let response = await chrome.documentScan.getScannerList({ secure: true });
  let scanner = await chrome.documentScan.openScanner(
      response.scanners[0].scannerId);
  let groups = await chrome.documentScan.getOptionGroups(scanner.scannerHandle);

  for (const group of groups.groups) {
    console.log("=== " + group.title + " ===");
    for (const member of group.members) {
      const option = scanner.options[member];
      if (option.isActive) {
        console.log("  " + option.name + " = " + option.value);
      } else {
        console.log("  " + option.name + " is inactive");
      }
    }
  }
}

Loại

CancelScanResponse

Đang chờ xử lý

Thuộc tính

  • việc làm

    string

    Cung cấp cùng một tên người dùng công việc đã được truyền đến cancelScan().

  • kết quả

    Kết quả quét huỷ của phần phụ trợ. Nếu kết quả là OperationResult.SUCCESS hoặc OperationResult.CANCELLED, thì quá trình quét đã bị huỷ và máy quét sẵn sàng bắt đầu một lượt quét mới. Nếu kết quả là OperationResult.DEVICE_BUSY , thì tức là trình quét vẫn đang xử lý yêu cầu huỷ theo yêu cầu; phương thức gọi nên đợi trong một khoảng thời gian ngắn rồi thử lại yêu cầu. Các giá trị kết quả khác cho biết một lỗi vĩnh viễn và bạn không nên thử lại.

CloseScannerResponse

Đang chờ xử lý

Thuộc tính

  • kết quả

    Kết quả đóng trình quét. Ngay cả khi giá trị này không phải là SUCCESS, tên người dùng sẽ không hợp lệ và bạn không nên dùng nó cho bất kỳ thao tác nào khác.

  • scannerHandle

    string

    Tên người dùng của trình quét tương tự được truyền cho closeScanner.

Configurability

Đang chờ xử lý

Cách thay đổi lựa chọn.

Liệt kê

"NOT_CONFIGURABLE"
Tuỳ chọn này ở chế độ chỉ có thể đọc.

"SOFTWARE_CONFIGURABLE"
Bạn có thể đặt tuỳ chọn này trong phần mềm.

"HARDWARE_CONFIGURABLE"
Người dùng có thể đặt lựa chọn này bằng cách bật/tắt một nút trên máy quét.

ConnectionType

Đang chờ xử lý

Cho biết cách trình quét được kết nối với máy tính.

Liệt kê

"UNSPECIFIED"

"USB"

ConstraintType

Đang chờ xử lý

Loại dữ liệu của quy tắc ràng buộc được biểu thị bằng OptionConstraint.

Liệt kê

"INT_RANGE"
Giới hạn trên một dải ô gồm các giá trị OptionType.INT. Các thuộc tính min, maxquant của OptionConstraint sẽ là long và cấp độ list của thuộc tính này sẽ không được thiết lập.

"FIXED_RANGE"
Giới hạn đối với một dải ô của OptionType.FIXED giá trị. Các thuộc tính min, maxquant của OptionConstraint sẽ là double và thuộc tính list của các thuộc tính đó sẽ bị huỷ thiết lập.

"INT_LIST"
Quy tắc ràng buộc trong một danh sách cụ thể gồm các giá trị OptionType.INT. Thuộc tính OptionConstraint.list sẽ chứa giá trị long và các thuộc tính khác sẽ bị huỷ thiết lập.

"FIXED_LIST"
Giới hạn đối với một danh sách giá trị OptionType.FIXED cụ thể. Thuộc tính OptionConstraint.list sẽ chứa giá trị double và các thuộc tính khác sẽ bị huỷ thiết lập.

"STRING_LIST"
Giới hạn đối với một danh sách cụ thể của các giá trị OptionType.STRING. Thuộc tính OptionConstraint.list sẽ chứa giá trị DOMString và các thuộc tính khác sẽ bị huỷ thiết lập.

DeviceFilter

Đang chờ xử lý

Thuộc tính

  • local

    boolean không bắt buộc

    Chỉ trả lại máy quét được gắn trực tiếp vào máy tính.

  • bảo mật

    boolean không bắt buộc

    Chỉ trả về trình quét sử dụng một phương thức truyền tải an toàn, chẳng hạn như USB hoặc TLS.

GetOptionGroupsResponse

Đang chờ xử lý

Thuộc tính

  • nhóm

    OptionGroup[] không bắt buộc

    Nếu resultSUCCESS, hãy cung cấp danh sách các nhóm tuỳ chọn theo thứ tự do trình điều khiển máy quét cung cấp.

  • kết quả

    Kết quả của việc nhận được các nhóm lựa chọn. Nếu giá trị của thuộc tính này là SUCCESS, thì thuộc tính groups sẽ được điền.

  • scannerHandle

    string

    Tên người dùng của trình quét tương tự được truyền cho getOptionGroups.

GetScannerListResponse

Đang chờ xử lý

Thuộc tính

  • kết quả

    Kết quả liệt kê. Lưu ý rằng hệ thống có thể trả về một phần kết quả ngay cả khi chỉ ra lỗi.

  • máy quét

    Danh sách trình quét có thể trống phù hợp với DeviceFilter được cung cấp.

OpenScannerResponse

Đang chờ xử lý

Thuộc tính

  • tùy chọn

    đối tượng không bắt buộc

    Nếu resultSUCCESS, cung cấp mục ánh xạ khoá-giá trị, trong đó khoá là một tuỳ chọn dành riêng cho thiết bị và giá trị là một thực thể của ScannerOption.

  • kết quả

    Kết quả khi mở trình quét. Nếu giá trị của thuộc tính này là SUCCESS, thì thuộc tính scannerHandleoptions sẽ được điền.

  • scannerHandle

    chuỗi không bắt buộc

    Nếu resultSUCCESS, bạn có thể dùng một tên người dùng cho trình quét để thực hiện các thao tác khác.

  • scannerId

    string

    Mã máy quét được chuyển tới openScanner().

OperationResult

Đang chờ xử lý

Một giá trị enum cho biết kết quả của từng toán tử.

Liệt kê

"UNKNOWN"
Đã xảy ra lỗi không xác định hoặc lỗi chung.

" THÀNH CÔNG"
Thao tác thành công.

"UNSUPPORTED"
Thao tác này không được hỗ trợ.

"CANCELLED"
Thao tác đã bị huỷ.

"DEVICE_BUSY"
Thiết bị đang bận.

"INVALID"
Dữ liệu hoặc đối số được truyền đến phương thức này không hợp lệ.

"WRONG_TYPE"
Giá trị đã cung cấp không đúng loại dữ liệu cho lựa chọn cơ bản.

"EOF"
Không có dữ liệu nào khác.

"ADF_JAMMED"
Bộ nạp tài liệu bị kẹt.

"ADF_EMPTY"
Nguồn cấp dữ liệu trống.

"COVER_OPEN"
Nắp bìa phẳng đang mở.

"IO_ERROR"
Đã xảy ra lỗi khi kết nối với thiết bị này.

"ACCESS_DENIED"
Thiết bị yêu cầu xác thực.

"NO_MEMORY"
Không có đủ bộ nhớ trên Chromebook để hoàn tất thao tác.

"UNREACHABLE"
Không kết nối được với thiết bị.

"Thiếu"
Thiết bị đã bị ngắt kết nối.

"Nội bộ_ERROR"
Đã xảy ra lỗi ở nơi không phải ứng dụng gọi.

OptionConstraint

Đang chờ xử lý

Thuộc tính

  • danh sách

    string[]|number[] optional

  • tối đa

    số không bắt buộc

  • phút

    số không bắt buộc

  • lượng tử

    số không bắt buộc

OptionGroup

Đang chờ xử lý

Thuộc tính

  • thành viên

    chuỗi[]

    Một mảng các tên lựa chọn theo thứ tự do người lái xe cung cấp.

  • title

    string

    Cung cấp tiêu đề có thể in, ví dụ: "Tuỳ chọn hình học".

OptionSetting

Đang chờ xử lý

Thuộc tính

  • tên

    string

    Cho biết tên của tuỳ chọn cần đặt.

  • loại

    Cho biết loại dữ liệu của lựa chọn. Loại dữ liệu được yêu cầu phải khớp với loại dữ liệu thực của lựa chọn cơ bản.

  • value

    string|number|boolean|number[] optional

    Cho biết giá trị cần đặt. Hãy không đặt chính sách này để yêu cầu chế độ cài đặt tự động cho những chế độ đã bật autoSettable. Loại dữ liệu được cung cấp cho value phải khớp với type.

OptionType

Đang chờ xử lý

Loại dữ liệu của một lựa chọn.

Liệt kê

"UNKNOWN"
Loại dữ liệu của lựa chọn chưa xác định. Thuộc tính value sẽ bị huỷ thiết lập.

"BOOL"
Thuộc tính value sẽ là một trong các giá trị truefalse.

"INT"
Một số nguyên 32 bit có dấu. Thuộc tính value sẽ dài hoặc dài[], tuỳ thuộc vào việc tuỳ chọn đó có nhận nhiều giá trị hay không.

"FIXED"
Giá trị gấp đôi trong dải ô -32768-32767.9999 với độ phân giải là 1/65535. Thuộc tính value sẽ tăng gấp đôi hoặc gấp đôi [] tuỳ thuộc vào việc lựa chọn đó có nhận nhiều giá trị hay không. Các giá trị kép không thể được biểu thị chính xác sẽ được làm tròn thành phạm vi và độ chính xác có sẵn.

"STRING"
Một chuỗi bất kỳ byte nào ngoại trừ NUL ('\0'). Thuộc tính value sẽ là một DOMString.

"NÚT"
Lựa chọn thuộc loại này không có giá trị. Thay vào đó, việc đặt một tuỳ chọn thuộc loại này sẽ gây ra hiệu ứng phụ dành riêng cho tuỳ chọn trong trình điều khiển máy quét. Ví dụ: Trình điều khiển máy quét có thể sử dụng chế độ nhập bằng nút để đưa ra phương thức chọn các giá trị mặc định hoặc yêu cầu bộ nạp tài liệu tự động chuyển sang trang giấy tiếp theo.

"GROUP"
Tùy chọn nhóm. Không có giá trị. API này được đưa vào để đảm bảo khả năng tương thích, nhưng thường sẽ không được trả về trong các giá trị ScannerOption. Sử dụng getOptionGroups() để truy xuất danh sách nhóm có tuỳ chọn thành viên.

OptionUnit

Đang chờ xử lý

Cho biết loại dữ liệu của ScannerOption.unit.

Liệt kê

"UNITLESS"
Giá trị là một số không đơn vị. Ví dụ: đó có thể là một ngưỡng.

"PIXEL"
Giá trị là một số pixel, ví dụ: kích thước quét.

"BIT"
Giá trị là số bit, ví dụ: độ sâu màu.

"MM"
Giá trị được đo bằng milimét, ví dụ: kích thước quét.

"DPI"
Giá trị này được đo bằng số điểm trên mỗi inch, ví dụ như độ phân giải.

"PERCENT"
Giá trị là phần trăm, ví dụ: độ sáng.

"MICRO SECOND"
Giá trị được đo bằng micrô giây, ví dụ như thời gian phơi sáng.

ReadScanDataResponse

Đang chờ xử lý

Thuộc tính

  • data

    ArrayBuffer không bắt buộc

    Nếu resultSUCCESS, chứa phần dữ liệu hình ảnh đã quét tiếp theo. Nếu resultEOF, thì chứa phần cuối của dữ liệu hình ảnh đã quét.

  • estimatedCompletion

    số không bắt buộc

    Nếu resultSUCCESS, ước tính lượng dữ liệu quét đã được gửi cho đến nay, trong phạm vi từ 0 đến 100.

  • việc làm

    string

    Cung cấp tên công việc được truyền đến readScanData().

  • kết quả

    Kết quả của việc đọc dữ liệu. Nếu giá trị của lớp này là SUCCESS, thì data sẽ chứa phần tiếp theo (có thể là độ dài bằng 0) của dữ liệu hình ảnh đã sẵn sàng để đọc. Nếu giá trị của lớp này là EOF, thì data sẽ chứa phần cuối cùng của dữ liệu hình ảnh.

ScannerInfo

Đang chờ xử lý

Thuộc tính

  • connectionType

    Cho biết cách trình quét được kết nối với máy tính.

  • deviceUuid

    string

    Để so khớp với các mục nhập ScannerInfo khác trỏ đến cùng một thiết bị thực.

  • imageFormats

    chuỗi[]

    Một mảng các loại MIME có thể được yêu cầu cho các lần quét được trả về.

  • nhà sản xuất

    string

    Nhà sản xuất máy quét.

  • model

    string

    Kiểu máy quét (nếu có) hoặc nội dung mô tả chung.

  • tên

    string

    Tên mà con người có thể đọc được để hiển thị trình quét trong giao diện người dùng.

  • protocolType

    string

    Nội dung mô tả mà con người có thể đọc được về giao thức hoặc trình điều khiển dùng để truy cập vào máy quét, chẳng hạn như Mopria, WSD hoặc epsonds. Việc này chủ yếu hữu ích khi cho phép người dùng chọn giữa các giao thức nếu thiết bị hỗ trợ nhiều giao thức.

  • scannerId

    string

    Mã của một trình quét cụ thể.

  • bảo mật

    boolean

    Nếu đúng, quá trình truyền tải kết nối của máy quét sẽ không bị trình nghe thụ động chặn, chẳng hạn như TLS hoặc USB.

ScannerOption

Đang chờ xử lý

Thuộc tính

  • khả năng định cấu hình

    Cho biết liệu có thể thay đổi lựa chọn này hay không và cách thay đổi.

  • quy tắc ràng buộc

    OptionConstraint không bắt buộc

    Xác định OptionConstraint trên tuỳ chọn trình quét hiện tại.

  • description

    string

    Nội dung mô tả dài hơn về lựa chọn này.

  • isActive

    boolean

    Cho biết tuỳ chọn đang hoạt động và có thể được thiết lập hoặc truy xuất. Nếu giá trị là false, thuộc tính value sẽ không được đặt.

  • isAdvanced

    boolean

    Cho biết rằng giao diện người dùng sẽ không hiển thị tuỳ chọn này theo mặc định.

  • isAutoSettable

    boolean

    Trình điều khiển máy quét có thể tự động thiết lập.

  • isDetectable

    boolean

    Cho biết rằng lựa chọn này có thể được phát hiện qua phần mềm.

  • isEmulated

    boolean

    Trình điều khiển máy quét mô phỏng nếu đúng.

  • tên

    string

    Tên lựa chọn sử dụng chữ cái ASCII viết thường, chữ số và dấu gạch ngang. Không được phép sử dụng dấu phụ.

  • title

    string

    Tiêu đề dài một dòng, in được.

  • loại

    Loại dữ liệu có trong thuộc tính value cần thiết để đặt tuỳ chọn này.

  • đơn vị

    Đơn vị đo lường cho lựa chọn này.

  • value

    string|number|boolean|number[] optional

    Giá trị hiện tại của tuỳ chọn, nếu có liên quan. Lưu ý rằng loại dữ liệu của thuộc tính này phải khớp với loại dữ liệu được chỉ định trong type.

ScanOptions

Thuộc tính

  • maxImages

    số không bắt buộc

    Số lượng hình ảnh đã quét được cho phép. Giá trị mặc định là 1.

  • mimeTypes

    string[] không bắt buộc

    Loại MIME được phương thức gọi chấp nhận.

ScanResults

Thuộc tính

  • dataUrls

    chuỗi[]

    Một mảng gồm các URL hình ảnh dữ liệu dưới dạng có thể được truyền dưới dạng giá trị "src" vào thẻ hình ảnh.

  • mimeType

    string

    Loại MIME của dataUrls.

SetOptionResult

Đang chờ xử lý

Thuộc tính

  • tên

    string

    Cho biết tên của lựa chọn đã được đặt.

  • kết quả

    Cho biết kết quả của việc đặt lựa chọn này.

SetOptionsResponse

Đang chờ xử lý

Thuộc tính

  • tùy chọn

    đối tượng không bắt buộc

    Ánh xạ khoá-giá trị được cập nhật từ tên tuỳ chọn đến giá trị ScannerOption có chứa cấu hình mới sau khi thử đặt tất cả các tuỳ chọn đã cung cấp. Thuộc tính này có cấu trúc giống như thuộc tính options trong OpenScannerResponse.

    Thuộc tính này sẽ được thiết lập ngay cả khi một số tuỳ chọn không được thiết lập thành công, nhưng sẽ không được đặt nếu không truy xuất được cấu hình đã cập nhật (ví dụ: nếu máy quét bị ngắt kết nối khi đang quét).

  • kết quả

    Một mảng kết quả, mỗi mảng cho một OptionSetting được truyền vào.

  • scannerHandle

    string

    Cung cấp tay điều khiển trình quét được truyền đến setOptions().

StartScanOptions

Đang chờ xử lý

Thuộc tính

  • định dạng

    string

    Chỉ định loại MIME để trả về dữ liệu đã quét.

  • maxReadSize

    số không bắt buộc

    Nếu bạn chỉ định một giá trị khác 0, hãy giới hạn số byte quét tối đa được trả về trong một phản hồi readScanData duy nhất cho giá trị đó. Giá trị nhỏ nhất được phép là 32768 (32 KB). Nếu thuộc tính này không được chỉ định, thì kích thước của phần được trả về có thể lớn bằng toàn bộ hình ảnh được quét.

StartScanResponse

Đang chờ xử lý

Thuộc tính

  • việc làm

    chuỗi không bắt buộc

    Nếu resultSUCCESS, hãy cung cấp một tên người dùng có thể dùng để đọc dữ liệu quét hoặc huỷ công việc.

  • kết quả

    Kết quả của việc bắt đầu quét. Nếu giá trị của thuộc tính này là SUCCESS, thì thuộc tính job sẽ được điền.

  • scannerHandle

    string

    Cung cấp cùng một tay điều khiển trình quét đã được truyền đến startScan().

Phương thức

cancelScan()

Hứa hẹn Đang chờ xử lý
chrome.documentScan.cancelScan(
  job: string,
  callback?: function,
)

Huỷ quá trình quét đã bắt đầu và trả về một Promise phân giải bằng đối tượng CancelScanResponse. Nếu lệnh gọi lại được sử dụng, đối tượng sẽ được truyền đến đối tượng đó.

Tham số

  • việc làm

    string

    Xử lý một công việc quét đang hoạt động trước đó được trả về từ lệnh gọi đến startScan.

  • số gọi lại

    hàm không bắt buộc

    Tham số callback sẽ có dạng như sau:

    (response: CancelScanResponse)=>void

Giá trị trả về

  • Lời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp để có khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ được phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

closeScanner()

Hứa hẹn Đang chờ xử lý
chrome.documentScan.closeScanner(
  scannerHandle: string,
  callback?: function,
)

Đóng trình quét có tay điều khiển được truyền và trả về một Promise phân giải bằng đối tượng CloseScannerResponse. Nếu lệnh gọi lại được sử dụng, đối tượng sẽ được truyền đến đối tượng đó. Ngay cả khi phản hồi không thành công, tên người dùng đã cung cấp sẽ trở thành không hợp lệ và không nên được dùng cho các thao tác tiếp theo.

Tham số

  • scannerHandle

    string

    Chỉ định tên người dùng của một trình quét đang mở trước đó được trả về từ lệnh gọi đến openScanner.

  • số gọi lại

    hàm không bắt buộc

    Tham số callback sẽ có dạng như sau:

    (response: CloseScannerResponse)=>void

Giá trị trả về

  • Lời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp để có khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ được phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

getOptionGroups()

Hứa hẹn Đang chờ xử lý
chrome.documentScan.getOptionGroups(
  scannerHandle: string,
  callback?: function,
)

Lấy tên nhóm và tuỳ chọn thành viên từ trình quét mà openScanner đã mở trước đó. Phương thức này trả về một Promise sẽ phân giải bằng đối tượng GetOptionGroupsResponse. Nếu lệnh gọi lại được truyền đến hàm này, thì dữ liệu trả về sẽ được truyền vào hàm đó.

Tham số

  • scannerHandle

    string

    Tên người dùng của một trình quét đang mở được trả về từ lệnh gọi đến openScanner.

  • số gọi lại

    hàm không bắt buộc

    Tham số callback sẽ có dạng như sau:

    (response: GetOptionGroupsResponse)=>void

Giá trị trả về

  • Lời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp để có khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ được phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

getScannerList()

Hứa hẹn Đang chờ xử lý
chrome.documentScan.getScannerList(
  filter: DeviceFilter,
  callback?: function,
)

Lấy danh sách các trình quét có sẵn và trả về một Promise phân giải bằng đối tượng GetScannerListResponse. Nếu lệnh gọi lại được truyền đến hàm này, thì dữ liệu trả về sẽ được truyền vào hàm đó.

Tham số

Giá trị trả về

  • Lời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp để có khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ được phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

openScanner()

Hứa hẹn Đang chờ xử lý
chrome.documentScan.openScanner(
  scannerId: string,
  callback?: function,
)

Mở một trình quét để có quyền truy cập độc quyền và trả về một Lời hứa giải quyết được bằng đối tượng OpenScannerResponse. Nếu lệnh gọi lại được truyền đến hàm này, thì dữ liệu trả về sẽ được truyền vào hàm đó.

Tham số

  • scannerId

    string

    Mã của máy quét sắp mở. Giá trị này được trả về từ lệnh gọi trước đó đến getScannerList.

  • số gọi lại

    hàm không bắt buộc

    Tham số callback sẽ có dạng như sau:

    (response: OpenScannerResponse)=>void

Giá trị trả về

  • Lời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp để có khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ được phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

readScanData()

Hứa hẹn Đang chờ xử lý
chrome.documentScan.readScanData(
  job: string,
  callback?: function,
)

Đọc phần dữ liệu hình ảnh có sẵn tiếp theo từ vị trí công việc đang hoạt động và trả về một Lời hứa giải quyết bằng đối tượng ReadScanDataResponse. Nếu lệnh gọi lại được sử dụng, đối tượng sẽ được truyền đến đối tượng đó.

**Lưu ý:**Kết quả phản hồi là SUCCESS với thành phần data có độ dài bằng 0 là hợp lệ. Điều này có nghĩa là trình quét vẫn đang hoạt động nhưng chưa có thêm dữ liệu sẵn sàng. Phương thức gọi nên đợi một thời gian ngắn rồi thử lại.

Khi lệnh quét hoàn tất, phản hồi sẽ có giá trị kết quả là EOF. Phản hồi này có thể chứa một thành phần data cuối cùng khác 0.

Tham số

  • việc làm

    string

    Tên công việc đang hoạt động được trả về trước đó từ startScan.

  • số gọi lại

    hàm không bắt buộc

    Tham số callback sẽ có dạng như sau:

    (response: ReadScanDataResponse)=>void

Giá trị trả về

  • Lời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp để có khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ được phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

scan()

Cam kết
chrome.documentScan.scan(
  options: ScanOptions,
  callback?: function,
)

Thực hiện quét tài liệu và trả về một Promise có thể phân giải bằng đối tượng ScanResults. Nếu lệnh gọi lại được truyền đến hàm này, thì dữ liệu trả về sẽ được truyền vào hàm đó.

Tham số

  • tùy chọn

    Đối tượng chứa các thông số quét.

  • số gọi lại

    hàm không bắt buộc

    Tham số callback sẽ có dạng như sau:

    (result: ScanResults)=>void

Giá trị trả về

  • Promise<ScanResults>

    Chrome 96 trở lên

    Lời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp để có khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ được phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

setOptions()

Hứa hẹn Đang chờ xử lý
chrome.documentScan.setOptions(
  scannerHandle: string,
  options: OptionSetting[],
  callback?: function,
)

Đặt các tuỳ chọn trên trình quét được chỉ định và trả về một Promise giúp phân giải bằng đối tượng SetOptionsResponse chứa kết quả của việc cố gắng đặt mọi giá trị theo thứ tự của đối tượng OptionSetting được truyền vào. Nếu lệnh gọi lại được sử dụng, đối tượng sẽ được truyền đến đối tượng đó.

Tham số

  • scannerHandle

    string

    Tay cầm của máy quét để đặt các tuỳ chọn. Đây phải là một giá trị trước đó được trả về từ lệnh gọi đến openScanner.

  • tùy chọn

    Danh sách các đối tượng OptionSetting sẽ được áp dụng cho trình quét.

  • số gọi lại

    hàm không bắt buộc

    Tham số callback sẽ có dạng như sau:

    (response: SetOptionsResponse)=>void

Giá trị trả về

  • Lời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp để có khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ được phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

startScan()

Hứa hẹn Đang chờ xử lý
chrome.documentScan.startScan(
  scannerHandle: string,
  options: StartScanOptions,
  callback?: function,
)

Bắt đầu quét trên máy quét đã chỉ định và trả về một Hứa hẹn giải quyết bằng StartScanResponse. Nếu lệnh gọi lại được sử dụng, đối tượng sẽ được truyền đến đối tượng đó. Nếu lệnh gọi thành công, phản hồi sẽ bao gồm tên công việc có thể dùng trong các lệnh gọi tiếp theo để đọc dữ liệu quét hoặc huỷ quá trình quét.

Tham số

  • scannerHandle

    string

    Tay cầm của một trình quét đang mở. Đây phải là một giá trị trước đó được trả về từ lệnh gọi đến openScanner.

  • tùy chọn

    Một đối tượng StartScanOptions cho biết các tuỳ chọn quét. Thuộc tính StartScanOptions.format phải khớp với một trong các mục nhập được trả về trong ScannerInfo của trình quét.

  • số gọi lại

    hàm không bắt buộc

    Tham số callback sẽ có dạng như sau:

    (response: StartScanResponse)=>void

Giá trị trả về

  • Lời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp để có khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ được phân giải bằng cùng một loại được truyền đến lệnh gọi lại.