คำอธิบาย
ใช้ chrome.printing
API เพื่อส่งงานพิมพ์ไปยังเครื่องพิมพ์ที่ติดตั้งใน Chromebook
สิทธิ์
printing
ความพร้อมใช้งาน
เมธอดและเหตุการณ์ทั้งหมดของ chrome.printing
กำหนดให้คุณต้องประกาศสิทธิ์ "printing"
ในไฟล์ Manifest ของส่วนขยาย เช่น
{ "name": "My extension", ... "permissions": [ "printing" ], ... }
ตัวอย่าง
ตัวอย่างด้านล่างแสดงการใช้วิธีการแต่ละอย่างในเนมสเปซการพิมพ์ โค้ดนี้คัดลอกมาจากหรืออิงตาม api-samples/printing ในที่เก็บของ 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
พร็อพเพอร์ตี้
- ความสามารถ
object ไม่บังคับ
ความสามารถของเครื่องพิมพ์ในรูปแบบ CDD พร็อพเพอร์ตี้อาจหายไป
- สถานะ
สถานะของเครื่องพิมพ์
JobStatus
สถานะของงานพิมพ์
ค่าแจกแจง
"รอดำเนินการ"
ได้รับงานพิมพ์ในฝั่ง Chrome แต่ยังไม่ได้ประมวลผล
"IN_PROGRESS"
ส่งงานพิมพ์เพื่อพิมพ์
"ไม่สำเร็จ"
งานพิมพ์ถูกขัดจังหวะเนื่องจากมีข้อผิดพลาดบางอย่าง
"ยกเลิกแล้ว"
ผู้ใช้หรือ API ยกเลิกงานพิมพ์
"พิมพ์แล้ว"
พิมพ์งานพิมพ์โดยไม่มีข้อผิดพลาด
Printer
พร็อพเพอร์ตี้
- คำอธิบาย
สตริง
คำอธิบายเครื่องพิมพ์ที่มนุษย์อ่านได้
- id
สตริง
ตัวระบุของเครื่องพิมพ์ ซึ่งรับประกันว่าจะไม่ซ้ำกันในบรรดาเครื่องพิมพ์ในอุปกรณ์
- isDefault
บูลีน
แฟล็กที่แสดงว่าเครื่องพิมพ์เป็นไปตามกฎ DefaultPrinterSelection หรือไม่ โปรดทราบว่าอาจมีการแจ้งว่าเครื่องพิมพ์หลายเครื่องไม่ปลอดภัย
- ชื่อ
สตริง
ชื่อเครื่องพิมพ์
- recentlyUsedRank
หมายเลข ไม่บังคับ
ค่าที่แสดงว่าใช้เครื่องพิมพ์ล่าสุดเมื่อใดในการพิมพ์จาก Chrome ค่าที่ต่ำกว่าหมายถึงมีการใช้เครื่องพิมพ์เมื่อเร็วๆ นี้ ค่าต่ำสุดคือ 0 ค่าที่ขาดหายไปแสดงว่าไม่ได้ใช้เครื่องพิมพ์เมื่อเร็วๆ นี้ ค่านี้รับประกันได้ว่าจะไม่ซ้ำกันในบรรดาเครื่องพิมพ์
- source
แหล่งที่มาของเครื่องพิมพ์ (ผู้ใช้หรือนโยบายที่กำหนดค่าไว้)
- uri
สตริง
URI ของเครื่องพิมพ์ ส่วนขยายสามารถใช้ข้อมูลนี้เพื่อเลือกเครื่องพิมพ์ให้ผู้ใช้ได้
PrinterSource
แหล่งที่มาของเครื่องพิมพ์
ค่าแจกแจง
"ผู้ใช้"
ผู้ใช้เพิ่มเครื่องพิมพ์
"นโยบาย"
เพิ่มเครื่องพิมพ์ผ่านนโยบายแล้ว
PrinterStatus
สถานะของเครื่องพิมพ์
ค่าแจกแจง
"DOOR_OPEN"
ฝาเครื่องพิมพ์เปิดอยู่ เครื่องพิมพ์ยังคงรับงานพิมพ์
"TRAY_MISSING"
ไม่มีถาดของเครื่องพิมพ์ เครื่องพิมพ์ยังคงรับงานพิมพ์
"OUT_OF_INK"
เครื่องพิมพ์หมึกหมด เครื่องพิมพ์ยังคงรับงานพิมพ์
"OUT_OF_PAPER"
เครื่องพิมพ์กระดาษหมด เครื่องพิมพ์ยังคงรับงานพิมพ์
"OUTPUT_FULL"
พื้นที่สำหรับกระดาษออกของเครื่องพิมพ์ (เช่น ถาด) เต็มแล้ว เครื่องพิมพ์ยังคงรับงานพิมพ์
"PAPER_JAM"
เครื่องพิมพ์มีกระดาษติด เครื่องพิมพ์ยังคงรับงานพิมพ์
"GENERIC_ISSUE"
ปัญหาทั่วไปบางอย่าง เครื่องพิมพ์ยังคงรับงานพิมพ์
"หยุดแล้ว"
เครื่องพิมพ์หยุดทำงานและไม่พิมพ์ แต่ยังรับงานพิมพ์ได้
"เข้าถึงไม่ได้"
เข้าถึงเครื่องพิมพ์ไม่ได้และไม่ยอมรับงานพิมพ์
"EXPIRED_CERTIFICATE"
ใบรับรอง SSL หมดอายุแล้ว เครื่องพิมพ์รับงานแต่ดำเนินการไม่สำเร็จ
"พร้อมใช้งาน"
เครื่องพิมพ์พร้อมใช้งาน
SubmitJobRequest
พร็อพเพอร์ตี้
- งาน
งานพิมพ์ที่จะส่ง ประเภทเนื้อหาที่รองรับคือ "application/pdf" และ "image/png" ตั๋วงานในระบบคลาวด์ไม่ควรรวมฟิลด์
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,
): Promise<void>
ยกเลิกงานที่ส่งก่อนหน้านี้
พารามิเตอร์
- jobId
สตริง
รหัสของงานพิมพ์ที่จะยกเลิก ซึ่งควรเป็นรหัสเดียวกับที่ได้รับใน
SubmitJobResponse
การคืนสินค้า
-
Promise<void>
Chrome 100 ขึ้นไป
getJobStatus()
chrome.printing.getJobStatus(
jobId: string,
): Promise<JobStatus>
แสดงสถานะของงานพิมพ์ การเรียกนี้จะล้มเหลวพร้อมข้อผิดพลาดรันไทม์หากไม่มีงานพิมพ์ที่มี jobId
ที่ระบุ jobId
: รหัสของงานพิมพ์ที่จะแสดงสถานะ ซึ่งควรเป็นรหัสเดียวกับที่ได้รับใน SubmitJobResponse
พารามิเตอร์
- jobId
สตริง
การคืนสินค้า
-
Promise<JobStatus>
getPrinterInfo()
chrome.printing.getPrinterInfo(
printerId: string,
): Promise<GetPrinterInfoResponse>
แสดงผลสถานะและความสามารถของเครื่องพิมพ์ในรูปแบบ CDD การเรียกนี้จะล้มเหลวพร้อมข้อผิดพลาดรันไทม์หากไม่ได้ติดตั้งเครื่องพิมพ์ที่มีรหัสที่ระบุ
พารามิเตอร์
- printerId
สตริง
การคืนสินค้า
-
Promise<GetPrinterInfoResponse>
Chrome 100 ขึ้นไป
getPrinters()
chrome.printing.getPrinters(): Promise<Printer[]>
แสดงรายการเครื่องพิมพ์ที่พร้อมใช้งานในอุปกรณ์ ซึ่งรวมถึงเครื่องพิมพ์ที่เพิ่มด้วยตนเอง เครื่องพิมพ์ขององค์กร และเครื่องพิมพ์ที่ค้นพบ
การคืนสินค้า
-
Promise<Printer[]>
Chrome 100 ขึ้นไป
submitJob()
chrome.printing.submitJob(
request: SubmitJobRequest,
): Promise<SubmitJobResponse>
ส่งงานไปพิมพ์ หากส่วนขยายไม่ได้อยู่ในนโยบาย PrintingAPIExtensionsAllowlist
ระบบจะแจ้งให้ผู้ใช้ยอมรับงานพิมพ์ ในเวอร์ชันก่อนหน้า Chrome 120 ฟังก์ชันนี้จะไม่แสดงผล Promise
พารามิเตอร์
- ส่งคำขอ
การคืนสินค้า
-
Promise<SubmitJobResponse>
Chrome 100 ขึ้นไป
กิจกรรม
onJobStatusChanged
chrome.printing.onJobStatusChanged.addListener(
callback: function,
)
เหตุการณ์ที่ทริกเกอร์เมื่อมีการเปลี่ยนสถานะของงาน เหตุการณ์นี้จะทริกเกอร์เฉพาะสำหรับงานที่สร้างโดยส่วนขยายนี้เท่านั้น