chrome.printing

refresh date: 2026-09-25 robots: noindex

Mô tả

Sử dụng API chrome.printing để gửi lệnh in đến 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

Tệp kê khai

Tất cả 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ụ dưới đây 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 hoặc dựa trên api-samples/printing trong kho lưu trữ GitHub extensions-samples.

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, các trạng thái này có thể trôi qua quá nhanh khiến nút huỷ không xuất hiện đủ lâu để người dùng có thể nhấp vào. Đây là một ví dụ về việc in ấn được đơn giản hoá rất nhiều.

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 dùng cho các hàm này vì việc lấy thông tin máy in cần 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ụ về việc 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 các 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 cần sử dụng và tệp hoặc ngày cần in. Cấu trúc này chứa một tham chiếu đến cấu trúc ticket.
  • Một blob của tệp hoặc dữ liệu cần in.

Khi gọi submitJob(), một hộp thoại sẽ xuất hiện để 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ụ về việc in. Lưu ý rằng 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 một blob (dòng 10). Việc lấy mã nhận dạng của máy in (dòng 1) trong mẫu phức tạp hơn so với những gì được 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 phiếu in cho việc in liên tục (hoặc in cuộn), thường được dùng để in biên nhận. Đối tượng submitJobRequest cho việc in cuộn giống như đối tượng trong ví dụ về submitJob().

Nếu bạn cần thay đổi giá trị mặc định cho việc cắt giấy, hãy sử dụng khoá vendor_ticket_item. (Chế độ mặc định sẽ khác nhau tuỳ theo máy in.) Khi được đưa vào, khoá này cần phải là một mảng có một thành viên: một đối tượng có id là 'finishings'. Giá trị có thể là 'trim' đối với máy in cắt cuộn giấy khi in xong hoặc 'none' đối với máy in yêu cầu xé giấy sau khi in xong.

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ợ lựa chọn "finishings". Để xác định xem máy in của bạn có hỗ trợ hay không, hãy gọi getPrinterInfo() và 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 là riêng biệt 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 lựa chọn có giá trị "is_continuous_feed" là true. Sử dụng giá trị chiều cao và chiều rộng của 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

  • khả năng

    object không bắt buộc

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

  • 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" (ĐANG CHỜ)
Chrome đã nhận được lệnh in nhưng chưa 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"
Người dùng hoặc API đã huỷ lệnh in.

"PRINTED"
Lệnh in đã được in mà không gặp lỗi nào.

Printer

Thuộc tính

  • mô tả

    chuỗi

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

  • id

    chuỗi

    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 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 nhiều máy in có thể bị gắn cờ.

  • tên

    chuỗi

    Tên của máy in.

  • recentlyUsedRank

    number không bắt buộc

    Giá trị cho biết thời gian gần đây nhất máy in được dùng để in từ Chrome. 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. Giá trị bị thiếu cho biết rằng máy in không được sử dụng gần đây. Giá trị này được đảm bảo là duy nhất trong số các máy in.

  • source

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

  • uri

    chuỗi

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

PrinterSource

Nguồn của máy in.

Enum

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

"CHÍNH SÁCH"
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 máy in đang mở. Máy in vẫn chấp nhận lệnh in.

"TRAY_MISSING"
Thiếu khay của máy in. Máy in vẫn chấp nhận lệnh in.

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

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

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

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

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

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

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

"SẴN SÀNG"
Máy in đang sẵn sàng.

SubmitJobRequest

Thuộc tính

  • công việc

    Lệnh in cần gửi. Các loại nội dung được hỗ trợ là "application/pdf" và "image/png". Cloud Job Ticket không được bao gồm các trường FitToPageTicketItem, PageRangeTicketItem và ReverseOrderTicketItem vì các trường này không liên quan đến tính năng in gốc. VendorTicketItem là không bắt buộc. Tất cả các trường khác phải có mặt.

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 riêng biệt trong số tất cả lệnh in trên thiết bị. Nếu trạng thái không phải là OK, thì jobId sẽ 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 gửi lệnh in đã được chấp nhận.

"USER_REJECTED"
Người dùng từ chối yêu cầu gửi lệnh in.

Thuộc tính

MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE

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

Giá trị

20

MAX_SUBMIT_JOB_CALLS_PER_MINUTE

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

Giá trị

40

Phương thức

cancelJob()

Promise
chrome.printing.cancelJob(
  jobId: string,
  callback?: function,
)
: Promise<void>

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

Thông số

  • jobId

    chuỗi

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

  • callback

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

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

    () => void

Giá trị trả về

  • Promise<void>

    Chrome 100 trở lên

    Lời hứa chỉ được hỗ trợ cho Manifest V3 trở lên, các nền tảng khác cần sử dụng lệnh gọi lại.

getJobStatus()

Promise Chrome 135 trở lên
chrome.printing.getJobStatus(
  jobId: string,
  callback?: function,
)
: Promise<JobStatus>

Trả về trạng thái của lệnh in. Lệnh gọi này sẽ không thành công và xảy ra lỗi thời gian chạy nếu không có lệnh in nào có jobId đã cho. jobId: Mã của lệnh in để trả về trạng thái. Mã này phải giống với mã nhận được trong SubmitJobResponse.

Thông số

  • jobId

    chuỗi

  • callback

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

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

    (status: JobStatus) => void

Giá trị trả về

  • Promise<JobStatus>

    Lời hứa chỉ được hỗ trợ cho Manifest V3 trở lên, các nền tảng khác cần sử dụng lệnh gọi lại.

getPrinterInfo()

Promise
chrome.printing.getPrinterInfo(
  printerId: string,
  callback?: function,
)
: Promise<GetPrinterInfoResponse>

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

Thông số

Giá trị trả về

  • Chrome 100 trở lên

    Lời hứa chỉ được hỗ trợ cho Manifest V3 trở lên, các nền tảng khác cần sử dụng lệnh gọi lại.

getPrinters()

Promise
chrome.printing.getPrinters(
  callback?: function,
)
: Promise<Printer[]>

Trả về danh sách các máy in có sẵn trên thiết bị. Bao gồm cả máy in được thêm thủ công, máy in doanh nghiệp và máy in được phát hiện.

Thông số

  • callback

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

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

    (printers: Printer[]) => void

Giá trị trả về

  • Promise<Printer[]>

    Chrome 100 trở lên

    Lời hứa chỉ được hỗ trợ cho Manifest V3 trở lên, các nền tảng khác cần sử dụng lệnh gọi lại.

submitJob()

Promise
chrome.printing.submitJob(
  request: SubmitJobRequest,
  callback?: function,
)
: Promise<SubmitJobResponse>

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.

Thông số

Giá trị trả về

  • Chrome 100 trở lên

    Lời hứa chỉ được hỗ trợ cho Manifest V3 trở lên, các nền tảng khác cần sử dụng 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. Sự kiện này chỉ được kích hoạt cho các công việc do tiện ích này tạo.

Thông số

  • callback

    hàm

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

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