chrome.printing

Mô tả

Dùng API chrome.printing để gửi lệnh in tới các máy in đã cài đặt trên Chromebook.

Quyền

printing

Phạm vi cung cấp

Chrome 81 trở lên Chỉ ChromeOS

Mọi phương thức và sự kiện chrome.printing đều yêu cầu bạn khai báo quyền "printing" trong tệp kê khai tiện ích. Ví dụ:

{
  "name": "My extension",
  ...
  "permissions": [
    "printing"
  ],
  ...
}

Ví dụ

Các ví dụ bên dưới minh hoạ cách sử dụng từng phương thức trong không gian tên in. Mã này được sao chép từ hoặc dựa trên api-samples/printing trong kho lưu trữ GitHub của tiện ích mẫu.

cancelJob()

Ví dụ này sử dụng trình xử lý onJobStatusChanged để ẩn thông báo "huỷ" khi jobStatus không phải là PENDING hoặc IN_PROGRESS. Xin lưu ý rằng trên một số mạng hoặc khi Chromebook được kết nối trực tiếp với máy in, các trạng thái này có thể vượt qua quá nhanh khiến nút huỷ hiển thị đủ lâu để gọi được. Đây là ví dụ in được đơn giản hoá đáng kể.

chrome.printing.onJobStatusChanged.addListener((jobId, status) => {
  const cancelButton = document.getElementById("cancelButton");
  cancelButton.addEventListener('click', () => {
    chrome.printing.cancelJob(jobId).then((response) => {
      if (response !== undefined) {
        console.log(response.status);
      }
      if (chrome.runtime.lastError !== undefined) {
        console.log(chrome.runtime.lastError.message);
      }
    });
  });
  if (status !== "PENDING" && status !== "IN_PROGRESS") {
    cancelButton.style.visibility = 'hidden';
  } else {
    cancelButton.style.visibility = 'visible';
  }
}

getPrinters() and getPrinterInfo()

Các hàm này có một ví dụ duy nhất vì việc nhận thông tin máy in yêu cầu mã nhận dạng máy in được truy xuất bằng cách gọi getPrinters(). Ví dụ này sẽ ghi nhật ký tên và nội dung mô tả của máy in mặc định vào bảng điều khiển. Đây là phiên bản đơn giản của ví dụ in.

​​const printers = await chrome.printing.getPrinters();
const defaultPrinter = printers.find((printer) => {
  const printerInfo = await chrome.printing.getPrinterInfo(printer.id);
  return printerInfo.isDefault;
}
console.log(`Default printer: ${defaultPrinter.name}.\n\t${defaultPrinter.description}`);

submitJob()

Phương thức submitJob() yêu cầu 3 điều.

  • Cấu trúc ticket chỉ định những chức năng của máy in sẽ được sử dụng. Nếu người dùng cần chọn trong số các chức năng có sẵn, bạn có thể truy xuất các chức năng đó cho một máy in cụ thể bằng getPrinterInfo().
  • Cấu trúc SubmitJobRequest chỉ định máy in để sử dụng và tệp hoặc ngày để in. Cấu trúc này chứa tham chiếu đến cấu trúc ticket.
  • Một blob của tệp hoặc dữ liệu cần in.

Việc gọi submitJob() sẽ kích hoạt một hộp thoại yêu cầu người dùng xác nhận in. Sử dụng PrintingAPIExtensionsAllowlist để bỏ qua bước xác nhận.

Đây là phiên bản đơn giản của ví dụ in. Vui lòng lưu ý ticket được gắn với cấu trúc SubmitJobRequest (dòng 8) và dữ liệu cần in được chuyển đổi thành blob (dòng 10). Việc lấy mã nhận dạng máy in (dòng 1) trong mẫu sẽ phức tạp hơn so với cách minh hoạ ở đây.

const defaultPrinter = getDefaultPrinter();
const ticket = getPrinterTicket(defaultPrinter);
const arrayBuffer = getPrintData();
const submitJobRequest = {
  job: {
    printerId: defaultPrinter,
    title: 'test job',
    ticket: ticket,
    contentType: 'application/pdf',
    document: new Blob([new Uint8Array(arrayBuffer)], {
      type: 'application/pdf'
    });
  }
};

chrome.printing.submitJob(submitJobRequest, (response) => {
  if (response !== undefined) {
    console.log(response.status);
  }
  if (chrome.runtime.lastError !== undefined) {
    console.log(chrome.runtime.lastError.message);
  }
});

In cuộn

Ví dụ này cho biết cách tạo vé máy in để in liên tục (hoặc in theo cuộn), thường dùng với tính năng in hoá đơn. Đối tượng submitJobRequest để in dạng cuộn giống như đối tượng được thể hiện trong ví dụ submitJob().

Nếu bạn cần thay đổi giá trị mặc định để cắt giấy, hãy dùng phím vendor_ticket_item. (Chế độ mặc định sẽ khác nhau tuỳ theo máy in.) Để thay đổi giá trị, hãy cung cấp một mảng có một phần tử: một đối tượng có id'finishings'. Giá trị có thể là 'trim' đối với máy in cắt cuộn ở cuối quá trình in hoặc 'none' đối với máy in yêu cầu xé lệnh in.

const ticket = {
  version: '1.0',
  print: {
    vendor_ticket_item: [{id: 'finishings', value: 'trim'}],
    color: {type: 'STANDARD_MONOCHROME'},
    duplex: {type: 'NO_DUPLEX'},
    page_orientation: {type: 'PORTRAIT'},
    copies: {copies: 1},
    dpi: {horizontal_dpi: 300, vertical_dpi: 300},
    media_size: {
      width_microns: 72320,
      height_microns: 100000
    },
    collate: {collate: false}
  }
};

Một số máy in không hỗ trợ tuỳ chọn "finishings". Để xác định xem máy in của bạn có hoạt động hay không, hãy gọi getPrinterInfo() rồi tìm "display_name" của "finishings/11".

"vendor_capability": [
  {
    "display_name": "finishings/11",
    "id": "finishings/11",
    "type": "TYPED_VALUE",
    "typed_value_cap": {
      "value_type": "BOOLEAN"
    }
  },
  ...
]

Các giá trị trong khoá media_size của phiếu yêu cầu hỗ trợ là giá trị dành riêng cho từng máy in. Để chọn kích thước phù hợp, hãy gọi getPrinterInfo(). GetPrinterResponse được trả về chứa một mảng kích thước nội dung nghe nhìn được hỗ trợ tại "media_size"."option". Chọn một tuỳ chọn có giá trị "is_continuous_feed" là true. Sử dụng giá trị chiều cao và chiều rộng cho vé.

"media_size": {
  "option": [
  {
    "custom_display_name": "",
    "is_continuous_feed": true,
    "max_height_microns": 2000000,
    "min_height_microns": 25400,
    "width_microns": 50800
  },
  ...
  ]
}

Loại

GetPrinterInfoResponse

Thuộc tính

  • chức năng

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

    Các chức năng của máy in ở định dạng CDD. Cơ sở lưu trú này có thể bị thiếu.

  • trạng thái

    Trạng thái của máy in.

JobStatus

Trạng thái của lệnh in.

Enum

"PENDING"
Lệnh in đã nhận được trên Chrome nhưng chưa được xử lý.

"IN_PROGRESS"
Lệnh in đã được gửi để in.

"FAILED"
Lệnh in bị gián đoạn do một số lỗi.

"CANCELED"
Lệnh in đã bị người dùng hoặc API huỷ.

"PrintED"
Lệnh in đã được in mà không có lỗi nào.

Printer

Thuộc tính

  • description

    string

    Nội dung mô tả mà con người có thể đọc được về máy in.

  • id

    string

    Giá trị nhận dạng của máy in; đảm bảo là duy nhất trong số các máy in trên thiết bị.

  • isDefault

    boolean

    Cờ cho biết máy in có phù hợp với quy tắc DefaultPrinterSelection hay không. Lưu ý rằng có nhiều máy in có thể bị gắn cờ.

  • tên

    string

    Tên máy in.

  • recentlyUsedRank

    số không bắt buộc

    Giá trị cho biết lần gần đây máy in được sử dụng để in từ Chrome như thế nào. Giá trị càng thấp thì máy in càng được sử dụng gần đây. Giá trị tối thiểu là 0. Thiếu giá trị cho biết máy in không được sử dụng gần đây. Giá trị này đảm bảo là riêng biệt trong số các máy in.

  • nguồn

    Nguồn của máy in (người dùng hoặc chính sách đã định cấu hình).

  • uri

    string

    URI của máy in. Tiện ích có thể sử dụng lựa chọn này để chọn máy in cho người dùng.

PrinterSource

Nguồn của máy in.

Enum

"USER"
Máy in đã được người dùng thêm.

"POLICY"
Máy in đã được thêm thông qua chính sách.

PrinterStatus

Trạng thái của máy in.

Enum

"DOOR_OPEN"
Cửa của máy in đang mở. Máy in vẫn chấp nhận các lệnh in.

"TRAY_MISSING"
Khay của máy in bị thiếu. Máy in vẫn chấp nhận các lệnh in.

"OUT_OF_INK"
Máy in đã hết mực. Máy in vẫn chấp nhận các lệnh in.

"OUT_OF_PAPER"
Máy in đã hết giấy. Máy in vẫn chấp nhận các lệnh in.

"OUTPUT_FULL"
Khu vực đầu ra của máy in (ví dụ: khay) đã đầy. Máy in vẫn chấp nhận các lệnh in.

"PAPER_JAM"
Máy in bị kẹt giấy. Máy in vẫn chấp nhận các lệnh in.

"GENERIC_ISSUE"
Một số vấn đề chung. Máy in vẫn chấp nhận các lệnh in.

"STOPPED"
Máy in đã dừng và không in nhưng vẫn chấp nhận lệnh in.

"UNREACHABLE"
Máy in không kết nối được và không nhận lệnh in.

"EXPIRED_CERTIFICATE"
Chứng chỉ SSL đã hết hạn. Máy in chấp nhận lệnh nhưng không thực hiện được.

"AVAILABLE"
Có máy in.

SubmitJobRequest

Thuộc tính

  • việc làm

    Lệnh in cần gửi. Loại nội dung duy nhất được hỗ trợ là "application/pdf" và Cloud Job Ticket không được bao gồm các trường FitToPageTicketItem, PageRangeTicketItem, ReverseOrderTicketItemVendorTicketItem vì các trường này không liên quan đến dịch vụ in gốc. Bạn phải điền vào tất cả các trường khác.

SubmitJobResponse

Thuộc tính

  • jobId

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

    Mã của lệnh in đã tạo. Đây là giá trị nhận dạng duy nhất trong số tất cả lệnh in trên thiết bị. Nếu trạng thái không OK, JobId sẽ là rỗng.

  • trạng thái

    Trạng thái của yêu cầu.

SubmitJobStatus

Trạng thái của yêu cầu submitJob.

Enum

"OK"
Yêu cầu về lệnh in đã gửi đã được chấp nhận.

"USER_}"
Yêu cầu lệnh in đã gửi đã bị người dùng từ chối.

Thuộc tính

MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE

Số lần tối đa mà getPrinterInfo có thể được gọi mỗi phút.

Giá trị

20

MAX_SUBMIT_JOB_CALLS_PER_MINUTE

Số lần tối đa mà submitJob có thể được gọi mỗi phút.

Giá trị

40

Phương thức

cancelJob()

Lời hứa
chrome.printing.cancelJob(
  jobId: string,
  callback?: function,
)

Huỷ công việc đã gửi trước đó.

Tham số

  • jobId

    string

    Mã lệnh in cần huỷ. Đây phải là mã nhận dạng giống với mã nhận được trong SubmitJobResponse.

  • số gọi lại

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

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

    () => void

Giá trị trả về

  • Lời hứa<vô hiệu>

    Chrome 100 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 cho 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. Chiến lược phát hành đĩa đơn Promise phân giải cùng loại được truyền đến lệnh gọi lại.

getPrinterInfo()

Lời hứa
chrome.printing.getPrinterInfo(
  printerId: string,
  callback?: function,
)

Trả về trạng thái và các chức năng của máy in ở định dạng CDD. Lệnh gọi này sẽ không thực hiện được kèm theo lỗi thời gian chạy nếu không có máy in nào có mã nhận dạng nhất định được cài đặt.

Tham số

Giá trị trả về

  • Promise&lt;GetPrinterInfoResponse&gt;

    Chrome 100 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 cho 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. Chiến lược phát hành đĩa đơn Promise phân giải cùng loại được truyền đến lệnh gọi lại.

getPrinters()

Lời hứa
chrome.printing.getPrinters(
  callback?: function,
)

Trả về danh sách các máy in hiện có trên thiết bị. Điều này bao gồm cả máy in được thêm, máy in Enterprise và máy in được khám phá theo cách thủ công.

Tham số

  • số gọi lại

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

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

    (printers: Printer[]) => void

Giá trị trả về

  • Cam kết<Printer[]>

    Chrome 100 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 cho 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. Chiến lược phát hành đĩa đơn Promise phân giải cùng loại được truyền đến lệnh gọi lại.

submitJob()

Lời hứa
chrome.printing.submitJob(
  request: SubmitJobRequest,
  callback?: function,
)

Gửi lệnh in. Nếu tiện ích này không có trong chính sách PrintingAPIExtensionsAllowlist, thì người dùng sẽ được nhắc chấp nhận lệnh in. Trước Chrome 120, hàm này không trả về lời hứa hẹn.

Tham số

Giá trị trả về

  • Promise&lt;SubmitJobResponse&gt;

    Chrome 100 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 cho 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. Chiến lược phát hành đĩa đơn Promise phân giải cùng loại được truyền đến lệnh gọi lại.

Sự kiện

onJobStatusChanged

chrome.printing.onJobStatusChanged.addListener(
  callback: function,
)

Sự kiện được kích hoạt khi trạng thái của công việc thay đổi. Điều này chỉ được kích hoạt cho các công việc do tiện ích này tạo ra.

Tham số

  • số gọi lại

    hàm

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

    (jobId: string, status: JobStatus) => void