chrome.printing

ब्यौरा

Chromebook पर इंस्टॉल किए गए प्रिंटर पर प्रिंट जॉब भेजने के लिए, chrome.printing API का इस्तेमाल करें.

अनुमतियां

printing

उपलब्धता

Chrome 81 और उसके बाद के वर्शन सिर्फ़ ChromeOS के लिए

मेनिफ़ेस्ट

chrome.printing के सभी तरीकों और इवेंट के लिए, आपको एक्सटेंशन मेनिफ़ेस्ट में "printing" की अनुमति का एलान करना होगा. उदाहरण के लिए:

{
  "name": "My extension",
  ...
  "permissions": [
    "printing"
  ],
  ...
}

उदाहरण

नीचे दिए गए उदाहरणों में, प्रिंटिंग नेमस्पेस में हर तरीके का इस्तेमाल करने के बारे में बताया गया है. यह कोड, एक्सटेंशन-सैंपल GitHub रेपो में मौजूद api-samples/printing से कॉपी किया गया है या उनके आधार पर बनाया गया है.

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() तरीके के लिए तीन चीज़ों की ज़रूरत होती है.

  • ticket स्ट्रक्चर, यह तय करता है कि प्रिंटर की किन क्षमताओं का इस्तेमाल किया जाएगा. अगर उपयोगकर्ता को उपलब्ध क्षमताओं में से किसी को चुनना हो, तो getPrinterInfo() का इस्तेमाल करके किसी खास प्रिंटर के लिए, उपयोगकर्ता की पहचान की जा सकती है.
  • SubmitJobRequest स्ट्रक्चर, जिसमें प्रिंटर और प्रिंट करने के लिए फ़ाइल या तारीख की जानकारी होती है. इस स्ट्रक्चर में ticket स्ट्रक्चर का रेफ़रंस है.
  • प्रिंट करने के लिए, फ़ाइल या डेटा का ब्लॉब.

submitJob() को कॉल करने पर एक डायलॉग बॉक्स ट्रिगर होता है. इस बॉक्स में, उपयोगकर्ता से प्रिंटिंग की पुष्टि करने के लिए कहा जाता है. पुष्टि करने की प्रक्रिया को बायपास करने के लिए, PrintingAPIExtensionsAllowlist का इस्तेमाल करें.

यह प्रिंटिंग उदाहरण का आसान वर्शन है. ध्यान दें कि ticket, SubmitJobRequest स्ट्रक्चर (लाइन 8) से जुड़ा है और प्रिंट करने के लिए डेटा को ब्लॉब (लाइन 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 बटन का इस्तेमाल करें. (डिफ़ॉल्ट सेटिंग, प्रिंटर के हिसाब से अलग-अलग होती है.) शामिल किए जाने पर, यह कुंजी एक सदस्य वाली अरे होनी चाहिए: एक ऑब्जेक्ट जिसका 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() को कॉल करें और "finishings/11" के "display_name" को देखें.

"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

प्रिंट जॉब की स्थिति.

Enum

"मंज़ूरी बाकी"
प्रिंट जॉब Chrome की ओर से मिल गया है, लेकिन अभी तक प्रोसेस नहीं किया गया है.

"IN_PROGRESS"
प्रिंट जॉब को प्रिंट करने के लिए भेजा गया है.

"प्रोसेस पूरी नहीं हुई"
किसी गड़बड़ी की वजह से प्रिंट जॉब बीच में रुक गया.

"रद्द किया गया"
उपयोगकर्ता ने या एपीआई की मदद से प्रिंट जॉब रद्द किया था.

"प्रिंट किया गया"
प्रिंट जॉब बिना किसी गड़बड़ी के प्रिंट किया गया.

Printer

प्रॉपर्टी

  • ब्यौरा

    स्ट्रिंग

    प्रिंटर के बारे में ऐसी जानकारी जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है.

  • आईडी

    स्ट्रिंग

    प्रिंटर का आइडेंटिफ़ायर. यह पक्का है कि डिवाइस पर मौजूद प्रिंटर में से यह आइडेंटिफ़ायर यूनीक होगा.

  • isDefault

    बूलियन

    यह फ़्लैग दिखाता है कि प्रिंटर, DefaultPrinterSelection के नियमों के मुताबिक है या नहीं. ध्यान दें कि कई प्रिंटर फ़्लैग किए जा सकते हैं.

  • नाम

    स्ट्रिंग

    प्रिंटर का नाम.

  • recentlyUsedRank

    number ज़रूरी नहीं

    इस वैल्यू से पता चलता है कि Chrome से प्रिंट करने के लिए, प्रिंटर का इस्तेमाल हाल ही में किया गया है या नहीं. वैल्यू जितनी कम होगी, प्रिंटर का इस्तेमाल उतना ही हाल ही में किया गया होगा. वैल्यू 0 से कम नहीं हो सकती. वैल्यू मौजूद न होने का मतलब है कि प्रिंटर का इस्तेमाल हाल ही में नहीं किया गया है. हर प्रिंटर के लिए यह वैल्यू यूनीक होगी.

  • source

    प्रिंटर का सोर्स (कॉन्फ़िगर किया गया उपयोगकर्ता या नीति).

  • यूआरआई

    स्ट्रिंग

    प्रिंटर का यूआरआई. एक्सटेंशन इसका इस्तेमाल करके, उपयोगकर्ता के लिए प्रिंटर चुन सकते हैं.

PrinterSource

प्रिंटर का सोर्स.

Enum

"USER"
प्रिंटर को उपयोगकर्ता ने जोड़ा था.

"POLICY"
प्रिंटर को नीति के ज़रिए जोड़ा गया.

PrinterStatus

प्रिंटर की स्थिति.

Enum

"DOOR_OPEN"
प्रिंटर का दरवाज़ा खुला है. प्रिंटर अब भी प्रिंट जॉब स्वीकार करता है.

"TRAY_MISSING"
प्रिंटर की ट्रे मौजूद नहीं है. प्रिंटर अब भी प्रिंट जॉब स्वीकार करता है.

"OUT_OF_INK"
प्रिंटर में स्याही नहीं है. प्रिंटर अब भी प्रिंट जॉब स्वीकार करता है.

"OUT_OF_PAPER"
प्रिंटर में पेपर खत्म हो गया है. प्रिंटर अब भी प्रिंट जॉब स्वीकार करता है.

"OUTPUT_FULL"
प्रिंटर (जैसे कि ट्रे) का आउटपुट एरिया भर गया है. प्रिंटर अब भी प्रिंट जॉब स्वीकार करता है.

"PAPER_JAM"
प्रिंटर में पेपर जाम हो गया है. प्रिंटर अब भी प्रिंट जॉब स्वीकार करता है.

"GENERIC_ISSUE"
कोई सामान्य समस्या. प्रिंटर अब भी प्रिंट जॉब स्वीकार करता है.

"STOPPED"
प्रिंटर बंद हो गया है और प्रिंट नहीं होता है, लेकिन फिर भी प्रिंट जॉब स्वीकार करता है.

"UNREACHABLE"
प्रिंटर कनेक्ट नहीं हो पा रहा है और प्रिंट जॉब स्वीकार नहीं कर रहा है.

"EXPIRED_CERTIFICATE"
एसएसएल सर्टिफ़िकेट की समयसीमा खत्म हो गई है. प्रिंटर जॉब स्वीकार करता है, लेकिन वे फ़ेल हो जाते हैं.

"उपलब्ध"
प्रिंटर उपलब्ध है.

SubmitJobRequest

प्रॉपर्टी

  • नौकरी

    सबमिट किया जाने वाला प्रिंट जॉब. सिर्फ़ "application/pdf" टाइप का कॉन्टेंट इस्तेमाल किया जा सकता है. साथ ही, Cloud जॉब टिकट में FitToPageTicketItem, PageRangeTicketItem, ReverseOrderTicketItem, और VendorTicketItem फ़ील्ड शामिल नहीं होने चाहिए, क्योंकि ये नेटिव प्रिंटिंग के लिए काम के नहीं हैं. अन्य सभी फ़ील्ड मौजूद होने चाहिए.

SubmitJobResponse

प्रॉपर्टी

  • jobId

    स्ट्रिंग ज़रूरी नहीं

    बनाए गए प्रिंट जॉब का आईडी. यह डिवाइस पर मौजूद सभी प्रिंट जॉब में से एक यूनीक आइडेंटिफ़ायर है. अगर स्थिति ठीक नहीं है, तो jobId शून्य होगा.

  • स्थिति

    अनुरोध की स्थिति.

SubmitJobStatus

submitJob अनुरोध की स्थिति.

Enum

"ठीक है"
प्रिंट जॉब का भेजा गया अनुरोध स्वीकार कर लिया गया है.

"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 पैरामीटर इस तरह दिखता है:

    () => void

रिटर्न

  • Promise<void>

    Chrome 100 और उसके बाद के वर्शन

    प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और उसके बाद के वर्शन पर काम करता है. दूसरे प्लैटफ़ॉर्म को कॉलबैक इस्तेमाल करने होते हैं.

getPrinterInfo()

प्रॉमिस
chrome.printing.getPrinterInfo(
  printerId: string,
  callback?: function,
)

सीडीडी फ़ॉर्मैट में, प्रिंटर की स्थिति और सुविधाओं की जानकारी दिखाता है. अगर दिए गए आईडी वाले कोई प्रिंटर इंस्टॉल नहीं है, तो यह कॉल रनटाइम की गड़बड़ी के साथ फ़ेल हो जाएगा.

पैरामीटर

  • printerId

    स्ट्रिंग

  • कॉलबैक

    फ़ंक्शन ज़रूरी नहीं

    callback पैरामीटर इस तरह दिखता है:

    (response: GetPrinterInfoResponse) => void

रिटर्न

  • Promise&lt;GetPrinterInfoResponse&gt;

    Chrome 100 और उसके बाद के वर्शन

    प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और उसके बाद के वर्शन पर काम करता है. दूसरे प्लैटफ़ॉर्म को कॉलबैक इस्तेमाल करने होते हैं.

getPrinters()

वादा करना
chrome.printing.getPrinters(
  callback?: function,
)

डिवाइस पर उपलब्ध प्रिंटर की सूची दिखाता है. इसमें मैन्युअल तरीके से जोड़े गए, एंटरप्राइज़, और 'डिस्कवर किए गए प्रिंटर' शामिल हैं.

पैरामीटर

  • कॉलबैक

    फ़ंक्शन ज़रूरी नहीं

    callback पैरामीटर ऐसा दिखता है:

    (printers: Printer[]) => void

रिटर्न

  • वादा<प्रिंटर[]>

    Chrome 100+

    प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और उसके बाद के वर्शन पर काम करता है. दूसरे प्लैटफ़ॉर्म को कॉलबैक इस्तेमाल करने होते हैं.

submitJob()

प्रॉमिस
chrome.printing.submitJob(
  request: SubmitJobRequest,
  callback?: function,
)

प्रिंट करने के लिए जॉब सबमिट करता है. अगर PrintingAPIExtensionsAllowlist नीति में एक्सटेंशन शामिल नहीं है, तो उपयोगकर्ता से प्रिंट जॉब स्वीकार करने के लिए कहा जाएगा. Chrome 120 से पहले, यह फ़ंक्शन कोई प्रॉमिस नहीं दिखाता था.

पैरामीटर

  • CANNOT TRANSLATE
  • कॉलबैक

    फ़ंक्शन ज़रूरी नहीं

    callback पैरामीटर इस तरह दिखता है:

    (response: SubmitJobResponse) => void

रिटर्न

  • Chrome 100+

    प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और उसके बाद के वर्शन के साथ काम करते हैं. अन्य प्लैटफ़ॉर्म के लिए, कॉलबैक का इस्तेमाल करना ज़रूरी है.

इवेंट

onJobStatusChanged

chrome.printing.onJobStatusChanged.addListener(
  callback: function,
)

जब जॉब की स्थिति बदलती है, तब यह इवेंट ट्रिगर होता है. यह सिर्फ़ इस एक्सटेंशन से बनाई गई नौकरियों के लिए ट्रिगर होता है.

पैरामीटर

  • कॉलबैक

    फ़ंक्शन

    callback पैरामीटर इस तरह दिखता है:

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

    • jobId

      स्ट्रिंग

    • स्थिति