คำอธิบาย
ใช้ chrome.printing
API เพื่อส่งงานพิมพ์ไปยังเครื่องพิมพ์ที่ติดตั้งใน Chromebook
สิทธิ์
printing
ความพร้อมใช้งาน
คุณต้องประกาศสิทธิ์ "printing"
ในไฟล์ Manifest ของส่วนขยายสำหรับเมธอดและเหตุการณ์ chrome.printing
ทั้งหมด เช่น
{
"name": "My extension",
...
"permissions": [
"printing"
],
...
}
ตัวอย่าง
ตัวอย่างด้านล่างแสดงการใช้แต่ละเมธอดในเนมสเปซการพิมพ์ โค้ดนี้คัดลอกมาจากหรืออิงตาม api-samples/printing ในที่เก็บ extensions-samples ของ GitHub
cancelJob()
ตัวอย่างนี้ใช้ตัวแฮนเดิล onJobStatusChanged
เพื่อซ่อนปุ่ม "ยกเลิก" เมื่อ jobStatus
ไม่ใช่ PENDING
หรือ IN_PROGRESS
โปรดทราบว่าในบางเครือข่ายหรือเมื่อ Chromebook เชื่อมต่อกับเครื่องพิมพ์โดยตรง สถานะเหล่านี้อาจผ่านไปอย่างรวดเร็วจนทำให้ปุ่มยกเลิกไม่ปรากฏขึ้นนานพอที่จะเรียกให้แสดง นี่เป็นตัวอย่างการพิมพ์ที่เข้าใจง่าย
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()
ฟังก์ชันเหล่านี้ใช้ตัวอย่างเพียงรายการเดียว เนื่องจากการรับข้อมูลเครื่องพิมพ์ต้องใช้รหัสเครื่องพิมพ์ ซึ่งดึงข้อมูลได้โดยเรียกใช้ getPrinters()
ตัวอย่างนี้จะบันทึกชื่อและคำอธิบายของพรินเตอร์เริ่มต้นลงในคอนโซล นี่เป็นตัวอย่างการพิมพ์เวอร์ชันที่เข้าใจง่าย
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()
วิธีการ submitJob()
ต้องใช้ 3 สิ่ง
- โครงสร้าง
ticket
ที่ระบุความสามารถของเครื่องพิมพ์ที่จะใช้ หากผู้ใช้ต้องเลือกจากความสามารถที่มี คุณก็สามารถเรียกข้อมูลความสามารถสำหรับเครื่องพิมพ์ที่ต้องการได้โดยใช้getPrinterInfo()
- โครงสร้าง
SubmitJobRequest
ซึ่งระบุเครื่องพิมพ์ที่จะใช้ รวมถึงไฟล์หรือวันที่ที่จะพิมพ์ โครงสร้างนี้มีข้อมูลอ้างอิงถึงโครงสร้างticket
- Blob ของไฟล์หรือข้อมูลที่จะพิมพ์
การเรียกใช้ submitJob()
จะทริกเกอร์กล่องโต้ตอบที่ขอให้ผู้ใช้ยืนยันการพิมพ์ ใช้ PrintingAPIExtensionsAllowlist
เพื่อข้ามการยืนยัน
นี่เป็นตัวอย่างการพิมพ์เวอร์ชันที่เข้าใจง่าย โปรดทราบว่า ticket
แนบอยู่กับโครงสร้าง SubmitJobRequest
(บรรทัดที่ 8) และข้อมูลที่จะพิมพ์ได้รับการแปลงเป็น Blob (บรรทัดที่ 10) การรับรหัสของพรินเตอร์ (บรรทัด 1) มีความซับซ้อนกว่าในตัวอย่างที่แสดงที่นี่
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);
}
});
การพิมพ์แบบม้วน
ตัวอย่างนี้แสดงวิธีสร้างตั๋วเครื่องพิมพ์สำหรับการพิมพ์แบบต่อเนื่อง (หรือแบบม้วน) ซึ่งมักใช้กับการพิมพ์ใบเสร็จ ออบเจ็กต์ submitJobRequest
สําหรับการพิมพ์แบบม้วนจะเหมือนกับที่แสดงในตัวอย่าง submitJob()
หากต้องการเปลี่ยนค่าเริ่มต้นสำหรับการตัดกระดาษ ให้ใช้แป้น vendor_ticket_item
(ค่าเริ่มต้นจะแตกต่างกันไปในแต่ละเครื่องพิมพ์) หากต้องการเปลี่ยนค่า ให้ระบุอาร์เรย์ที่มีสมาชิก 1 คน: ออบเจ็กต์ที่มี id
เป็น 'finishings'
ค่าอาจเป็น 'trim'
สำหรับเครื่องพิมพ์ที่ตัดม้วนกระดาษเมื่อสิ้นสุดการพิมพ์ หรือ 'none'
สำหรับเครื่องพิมพ์ที่ต้องฉีกงานพิมพ์ออก
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}
}
};
เครื่องพิมพ์บางรุ่นไม่รองรับตัวเลือก "finishings"
หากต้องการตรวจสอบว่าเครื่องพิมพ์ของคุณมีหรือไม่ ให้โทรไปที่ getPrinterInfo()
แล้วมองหา "display_name"
ของ "finishings/11"
"vendor_capability": [
{
"display_name": "finishings/11",
"id": "finishings/11",
"type": "TYPED_VALUE",
"typed_value_cap": {
"value_type": "BOOLEAN"
}
},
...
]
ค่าในคีย์ media_size
ของคำขอแจ้งปัญหาจะเจาะจงสำหรับเครื่องพิมพ์แต่ละเครื่อง หากต้องการเลือกขนาดที่เหมาะสม ให้กด getPrinterInfo()
GetPrinterResponse
ที่แสดงผลจะมีอาร์เรย์ของขนาดสื่อที่รองรับที่ "media_size"."option"
เลือกตัวเลือกที่มีค่า "is_continuous_feed"
เป็น "จริง" ใช้ค่าความสูงและความกว้างของรูปภาพนั้นสำหรับตั๋ว
"media_size": {
"option": [
{
"custom_display_name": "",
"is_continuous_feed": true,
"max_height_microns": 2000000,
"min_height_microns": 25400,
"width_microns": 50800
},
...
]
}
ประเภท
GetPrinterInfoResponse
พร็อพเพอร์ตี้
-
ความสามารถ
ออบเจ็กต์ ไม่บังคับ
ความสามารถของเครื่องพิมพ์ในรูปแบบ CDD พร็อพเพอร์ตี้อาจหายไป
-
สถานะ
สถานะของเครื่องพิมพ์
JobStatus
สถานะงานพิมพ์
ค่าแจกแจง
"รอดำเนินการ"
ระบบได้รับงานพิมพ์ฝั่ง Chrome แล้ว แต่ยังไม่ได้ประมวลผล
"IN_PROGRESS"
ส่งงานพิมพ์เพื่อพิมพ์แล้ว
"FAILED"
งานพิมพ์ถูกขัดจังหวะเนื่องจากข้อผิดพลาดบางอย่าง
"ยกเลิกแล้ว"
ผู้ใช้ยกเลิกงานพิมพ์หรือยกเลิกผ่าน API
"พิมพ์แล้ว"
งานพิมพ์พิมพ์โดยไม่มีข้อผิดพลาด
Printer
พร็อพเพอร์ตี้
-
คำอธิบาย
สตริง
คำอธิบายเครื่องพิมพ์ที่มนุษย์อ่านได้
-
id
สตริง
ตัวระบุของเครื่องพิมพ์ ซึ่งรับประกันว่าไม่ซ้ำกันกับเครื่องพิมพ์อื่นๆ ในอุปกรณ์
-
isDefault
บูลีน
Flag ที่แสดงว่าเครื่องพิมพ์เป็นไปตามกฎ DefaultPrinterSelection หรือไม่ โปรดทราบว่าระบบอาจแจ้งว่าเครื่องพิมพ์หลายเครื่องไม่ถูกต้อง
-
ชื่อ
สตริง
ชื่อเครื่องพิมพ์
-
recentlyUsedRank
ตัวเลข ไม่บังคับ
ค่าที่แสดงว่าเครื่องพิมพ์มีการใช้งานเมื่อใดล่าสุดสำหรับการพิมพ์จาก Chrome ยิ่งค่าต่ำลง แสดงว่าเครื่องพิมพ์มีการใช้งานล่าสุด ค่าต่ำสุดคือ 0 ค่าที่ขาดหายไปบ่งบอกว่าไม่มีการใช้งานเครื่องพิมพ์เมื่อเร็วๆ นี้ ค่านี้รับประกันว่าจะไม่ซ้ำกันสำหรับเครื่องพิมพ์ทุกเครื่อง
-
source
แหล่งที่มาของเครื่องพิมพ์ (ผู้ใช้หรือนโยบายที่กําหนดค่าไว้)
-
uri
สตริง
URI ของเครื่องพิมพ์ ส่วนขยายสามารถใช้ข้อมูลนี้เพื่อเลือกเครื่องพิมพ์ให้กับผู้ใช้
PrinterSource
แหล่งที่มาของเครื่องพิมพ์
ค่าแจกแจง
"USER"
ผู้ใช้เพิ่มเครื่องพิมพ์
"นโยบาย"
เพิ่มเครื่องพิมพ์ผ่านนโยบายแล้ว
PrinterStatus
สถานะของเครื่องพิมพ์
ค่าแจกแจง
"DOOR_OPEN"
ฝาเครื่องพิมพ์เปิดอยู่ เครื่องพิมพ์ยังคงรับงานพิมพ์
"TRAY_MISSING"
ไม่มีถาดของพรินเตอร์ เครื่องพิมพ์ยังคงรับงานพิมพ์
"OUT_OF_INK"
เครื่องพิมพ์ไม่มีหมึก เครื่องพิมพ์ยังคงรับงานพิมพ์
"OUT_OF_PAPER"
เครื่องพิมพ์ไม่มีกระดาษ เครื่องพิมพ์ยังคงรับงานพิมพ์
"OUTPUT_FULL"
พื้นที่สำหรับกระดาษออกของเครื่องพิมพ์ (เช่น ถาด) เต็มแล้ว เครื่องพิมพ์ยังคงรับงานพิมพ์
"PAPER_JAM"
กระดาษติดอยู่ในเครื่องพิมพ์ เครื่องพิมพ์ยังคงรับงานพิมพ์
"GENERIC_ISSUE"
ปัญหาทั่วไปบางอย่าง เครื่องพิมพ์ยังคงรับงานพิมพ์
"หยุดแล้ว"
เครื่องพิมพ์หยุดทำงานและไม่ได้พิมพ์ แต่ยังคงรับงานพิมพ์
"UNREACHABLE"
เข้าถึงเครื่องพิมพ์ไม่ได้และไม่ยอมรับงานพิมพ์
"EXPIRED_CERTIFICATE"
ใบรับรอง SSL หมดอายุแล้ว เครื่องพิมพ์ยอมรับงานแต่งานไม่สำเร็จ
"พร้อมใช้งาน"
เครื่องพิมพ์พร้อมใช้งาน
SubmitJobRequest
พร็อพเพอร์ตี้
-
งาน
งานพิมพ์ที่จะส่ง ประเภทเนื้อหาที่รองรับเพียงประเภทเดียวคือ "application/pdf" และคำของานในระบบคลาวด์ไม่ควรมีช่อง
FitToPageTicketItem
,PageRangeTicketItem
,ReverseOrderTicketItem
และVendorTicketItem
เนื่องจากไม่เกี่ยวข้องกับการพิมพ์จากต้นทาง แต่ต้องกรอกข้อมูลในช่องอื่นๆ ทั้งหมด
SubmitJobResponse
พร็อพเพอร์ตี้
-
jobId
สตริง ไม่บังคับ
รหัสของงานพิมพ์ที่สร้าง ซึ่งเป็นตัวระบุที่ไม่ซ้ำกันสำหรับงานพิมพ์ทั้งหมดในอุปกรณ์ หากสถานะไม่ใช่ "OK" jobId จะเท่ากับ Null
-
สถานะ
สถานะของคําขอ
SubmitJobStatus
สถานะของคำขอ submitJob
ค่าแจกแจง
"ตกลง"
คำของานพิมพ์ที่ส่งมาได้รับการยอมรับ
"USER_REJECTED"
ผู้ใช้ปฏิเสธคำของานพิมพ์ที่ส่ง
พร็อพเพอร์ตี้
MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE
จำนวนครั้งสูงสุดที่เรียก getPrinterInfo
ต่อนาที
ค่า
20
MAX_SUBMIT_JOB_CALLS_PER_MINUTE
จำนวนครั้งสูงสุดที่เรียก submitJob
ต่อนาที
ค่า
40
เมธอด
cancelJob()
chrome.printing.cancelJob(
jobId: string,
callback?: function,
)
ยกเลิกงานที่ส่งก่อนหน้านี้
พารามิเตอร์
-
jobId
สตริง
รหัสงานพิมพ์ที่จะยกเลิก ซึ่งควรเป็นรหัสเดียวกับที่ได้รับใน
SubmitJobResponse
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 100 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
getJobStatus()
chrome.printing.getJobStatus(
jobId: string,
callback?: function,
)
แสดงสถานะงานพิมพ์ การเรียกใช้นี้จะดำเนินการไม่สำเร็จโดยมีข้อผิดพลาดรันไทม์ หากไม่มีงานพิมพ์ที่มี jobId
ที่ระบุ jobId
: รหัสของงานพิมพ์ที่จะแสดงสถานะ ซึ่งควรเป็นรหัสเดียวกับที่ได้รับใน SubmitJobResponse
พารามิเตอร์
-
jobId
สตริง
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีรูปแบบดังนี้(status: JobStatus) => void
-
สถานะ
-
การคืนสินค้า
-
Promise<JobStatus>
ไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
getPrinterInfo()
chrome.printing.getPrinterInfo(
printerId: string,
callback?: function,
)
แสดงสถานะและความสามารถของเครื่องพิมพ์ในรูปแบบ CDD การเรียกใช้นี้จะดำเนินการไม่สำเร็จโดยมีข้อผิดพลาดรันไทม์หากไม่มีการติดตั้งเครื่องพิมพ์ที่มีรหัสที่ระบุ
พารามิเตอร์
-
printerId
สตริง
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีรูปแบบดังนี้(response: GetPrinterInfoResponse) => void
-
การตอบกลับ
-
การคืนสินค้า
-
Promise<GetPrinterInfoResponse>
Chrome 100 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
getPrinters()
chrome.printing.getPrinters(
callback?: function,
)
แสดงรายการเครื่องพิมพ์ที่ใช้ได้บนอุปกรณ์ ซึ่งรวมถึงเครื่องพิมพ์ที่เพิ่มด้วยตนเอง เครื่องพิมพ์สำหรับองค์กร และเครื่องพิมพ์ที่ค้นพบ
พารามิเตอร์
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้(printers: Printer[]) => void
-
เครื่องพิมพ์
-
การคืนสินค้า
-
Promise<Printer[]>
Chrome 100 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
submitJob()
chrome.printing.submitJob(
request: SubmitJobRequest,
callback?: function,
)
ส่งงานเข้าพิมพ์ หากส่วนขยายไม่อยู่ในนโยบาย PrintingAPIExtensionsAllowlist
ระบบจะแจ้งให้ผู้ใช้ยอมรับงานพิมพ์
ก่อนหน้านี้ใน Chrome เวอร์ชัน 120 ฟังก์ชันนี้ไม่ได้แสดงผลพรอมต์
พารามิเตอร์
-
ส่งคำขอ
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีรูปแบบดังนี้(response: SubmitJobResponse) => void
-
การตอบกลับ
-
การคืนสินค้า
-
Promise<SubmitJobResponse>
Chrome 100 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
กิจกรรม
onJobStatusChanged
chrome.printing.onJobStatusChanged.addListener(
callback: function,
)
เหตุการณ์เริ่มทํางานเมื่อสถานะของงานมีการเปลี่ยนแปลง ซึ่งจะทริกเกอร์สําหรับงานที่สร้างขึ้นโดยส่วนขยายนี้เท่านั้น