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
printingPhạm vi cung cấp
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
ticketchỉ đị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ằnggetPrinterInfo(). - 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úcticket. - 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,PageRangeTicketItemvàReverseOrderTicketItemvì các trường này không liên quan đến tính năng in gốc.VendorTicketItemlà 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()
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ố
callbackcó dạng như sau:() => void
Giá trị trả về
-
Promise<void>
Chrome 100 trở lênLờ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()
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ố
callbackcó dạng như sau:(status: JobStatus) => void
-
trạng thái
-
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()
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ố
-
printerId
chuỗi
-
callback
hàm không bắt buộc
Tham số
callbackcó dạng như sau:(response: GetPrinterInfoResponse) => void
-
phản hồi
-
Giá trị trả về
-
Promise<GetPrinterInfoResponse>
Chrome 100 trở lênLờ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()
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ố
Giá trị trả về
-
Promise<Printer[]>
Chrome 100 trở lênLờ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()
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ố
-
request
-
callback
hàm không bắt buộc
Tham số
callbackcó dạng như sau:(response: SubmitJobResponse) => void
-
phản hồi
-
Giá trị trả về
-
Promise<SubmitJobResponse>
Chrome 100 trở lênLờ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.