chrome.printing

Nội dung mô tả

Sử dụng API chrome.printing để gửi lệnh in tới máy in được 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- mẫu tiện ích.

cancelJob()

Ví dụ này sử dụng trình xử lý onJobStatusChanged để ẩn nút "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, những trạng thái này có thể chuyển quá nhanh khiến nút huỷ hiển thị đủ lâu để được gọi. Đâ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()

Một ví dụ duy nhất được sử dụng cho các hàm này vì việc nhận thông tin máy in yêu cầu phải có mã máy in, mã này được truy xuất bằng cách gọi getPrinters(). Ví dụ này ghi lại 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}`);

sendJob()

Phương thức submitJob() yêu cầu 3 yếu tố.

  • Cấu trúc ticket xác định những chức năng sẽ được sử dụng của máy in. Nếu người dùng cần chọn trong số các chức năng hiện có, thì bạn có thể truy xuất những 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ẽ 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.
  • 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 xác nhận.

Đây là phiên bản đơn giản của ví dụ in. Lưu ý ticket được đính kèm vào 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) phức tạp hơn trong mẫu so với cách trình bày ở đâ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 thấy cách tạo vé máy in để in liên tục (hoặc cuộn), thường dùng với dịch vụ in biên nhận. Đối tượng submitJobRequest để in dạng cuộn cũng giống như đối tượng trong ví dụ submitJob().

Nếu bạn cần thay đổi giá trị mặc định khi cắt giấy, hãy sử dụng khoá vendor_ticket_item. (Chế độ mặc định khác nhau tuỳ theo máy in). Khi được đưa vào, khoá này phải là một mảng có một thành phần: một đối tượng có id'finishings'. Giá trị có thể là 'trim' cho các máy in cắt cuộn sau khi in hoặc 'none' cho các 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ợ chế độ "finishings". Để xác định xem máy in của bạn có đang 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 một vé là 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 các 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

  • capabilities

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

    Các chức năng của máy in ở định dạng CDD. Thuộc tính có thể bị thiếu.

  • status

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

JobStatus

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

Liệt kê

"PENDING"
Đã nhận được lệnh in bên phía Chrome nhưng chưa xử lý.

"IN_PROGRESS"
Đã gửi lệnh in để in.

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

"HUỶ"
Người dùng hoặc đã huỷ lệnh in thông qua API.

"INED"
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; được đảm bảo là duy nhất giữa các máy in trên thiết bị.

  • isDefault

    boolean

    Cờ cho biết liệu máy in có phù hợp với các quy tắc DefaultPrinterSelection hay không. Xin lưu ý rằng một số 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 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 sử dụng cà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 được đảm bảo là duy nhất giữa các máy in.

  • source

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

  • uri

    string

    URI máy in. Tiện ích có thể dùng tính năng này để chọn máy in cho người dùng.

PrinterSource

Nguồn của máy in.

Liệt kê

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

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

PrinterStatus

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

Liệt kê

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

"TRAY_;
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"
Vùng đầ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.

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

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

"UNREACHABLE"
Không kết nối được với máy in 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 in nhưng không thành công.

"AVAILABLE"
Máy in khả dụng.

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 chế độ in gốc. Tất cả các trường khác đều phải xuất hiện.

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ả các lệnh in trên thiết bị. Nếu trạng thái không ổn, thì JobId sẽ có giá trị rỗng.

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

SubmitJobStatus

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

Liệt kê

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

"USER_REJECTED"
Người dùng đã từ chối yêu cầu lệnh in đã gử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()

Cam kết
chrome.printing.cancelJob(
  jobId: string,
  callback?: function,
)

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

Tham số

  • jobId

    string

    Mã của lệnh in cần huỷ. Đây phải là mã nhận dạng đã 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ề

  • Promise<void>

    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 để 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.

getPrinterInfo()

Cam kết
chrome.printing.getPrinterInfo(
  printerId: string,
  callback?: function,
)

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

Tham số

Giá trị trả về

  • 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 để 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.

getPrinters()

Cam kết
chrome.printing.getPrinters(
  callback?: function,
)

Trả về danh sách các máy in hiện có trên thiết bị. Số lượng này bao gồm các máy in được thêm theo cách thủ công, dành cho doanh nghiệp và máy in đã được khám phá.

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<Máy in[]>

    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 để 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.

submitJob()

Cam kết
chrome.printing.submitJob(
  request: SubmitJobRequest,
  callback?: function,
)

Gửi lệnh in. Nếu tiện ích 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.

Tham số

Giá trị trả về

  • 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 để 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.

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. Mã 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