chrome.printing

Beschreibung

Mit der chrome.printing API können Sie Druckaufträge an Drucker senden, die auf Chromebook installiert sind.

Berechtigungen

printing

Verfügbarkeit

Chrome (ab Version 81) Nur ChromeOS

Für alle chrome.printing-Methoden und -Ereignisse müssen Sie die Berechtigung "printing" im Erweiterungsmanifest deklarieren. Beispiel:

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

Beispiele

In den folgenden Beispielen wird die Verwendung der einzelnen Methoden im Druck-Namespace veranschaulicht. Dieser Code wurde aus dem Feld api-samples/printing im GitHub-Repository mit Erweiterungen kopiert oder basiert auf diesem Code.

cancelJob()

In diesem Beispiel wird der Handler onJobStatusChanged verwendet, um einen „Abbrechen“-Vorgang auszublenden Schaltfläche, wenn jobStatus weder PENDING noch IN_PROGRESS ist. Beachten Sie, dass diese Status in einigen Netzwerken oder wenn ein Chromebook direkt mit dem Drucker verbunden ist, möglicherweise zu schnell übergeben wird, sodass die Schaltfläche zum Abbrechen nicht lange genug angezeigt wird, um aufgerufen zu werden. Dies ist ein stark vereinfachtes Druckbeispiel.

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()

Für diese Funktionen wird nur ein Beispiel verwendet, da zum Abrufen von Druckerinformationen eine Drucker-ID erforderlich ist, die durch Aufrufen von getPrinters() abgerufen wird. In diesem Beispiel werden Name und Beschreibung des Standarddruckers in der Konsole protokolliert. Dies ist eine vereinfachte Version des Druckbeispiels.

​​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()

Für die Methode submitJob() sind drei Dinge erforderlich.

  • Eine ticket-Struktur, die angibt, welche Funktionen des Druckers verwendet werden sollen. Wenn der Nutzer eine Auswahl aus den verfügbaren Funktionen treffen muss, können Sie sie für einen bestimmten Drucker mit getPrinterInfo() abrufen.
  • Eine SubmitJobRequest-Struktur, die den zu verwendenden Drucker und die zu druckende Datei oder das zu druckende Datum angibt. Dieses Gebäude enthält einen Verweis auf die ticket-Struktur.
  • Ein Blob der Datei oder der zu druckenden Daten.

Durch den Aufruf von submitJob() wird ein Dialogfeld ausgelöst, in dem der Nutzer aufgefordert wird, den Druckvorgang zu bestätigen. Verwenden Sie PrintingAPIExtensionsAllowlist, um die Bestätigung zu überspringen.

Dies ist eine vereinfachte Version des Druckbeispiels. Beachten Sie, dass ticket an die SubmitJobRequest-Struktur (Zeile 8) angehängt ist und die zu druckenden Daten in ein Blob (Zeile 10) konvertiert werden. Im Beispiel ist es komplizierter, die ID des Druckers (Zeile 1) abzurufen, als hier gezeigt wird.

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);
  }
});

Rollendruck

Dieses Beispiel zeigt, wie ein Druckerticket für den fortlaufenden (oder Roll-)Druck erstellt wird, der oft beim Drucken von Belegen verwendet wird. Das Objekt submitJobRequest für den Rolldruck ist dasselbe wie für das Beispiel submitJob().

Wenn Sie den Standardwert für das Ausschneiden auf Papier ändern möchten, verwenden Sie die Taste vendor_ticket_item. Die Standardeinstellung unterscheidet sich von Drucker zu Drucker. Um den Wert zu ändern, stellen Sie ein Array mit einem Mitglied bereit: einem Objekt, dessen id 'finishings' ist. Der Wert kann entweder 'trim' für Drucker sein, bei denen die Rolle am Ende des Druckvorgangs abgeschnitten wird, oder 'none' für Drucker, bei denen der Druckauftrag entfernt werden muss.

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}
  }
};

Einige Drucker unterstützen die Option "finishings" nicht. Um herauszufinden, ob das bei Ihrem Drucker der Fall ist, rufen Sie getPrinterInfo() auf und suchen Sie nach "finishings/11" als "display_name".

"vendor_capability": [
  {
    "display_name": "finishings/11",
    "id": "finishings/11",
    "type": "TYPED_VALUE",
    "typed_value_cap": {
      "value_type": "BOOLEAN"
    }
  },
  ...
]

Die Werte im Schlüssel media_size eines Tickets gelten für jeden Drucker. Rufen Sie getPrinterInfo() auf, um eine geeignete Größe auszuwählen. Die zurückgegebene GetPrinterResponse enthält ein Array unterstützter Mediengrößen bei "media_size"."option". Wählen Sie eine Option aus, deren "is_continuous_feed"-Wert „wahr“ ist. Verwenden Sie die Werte für Höhe und Breite des Tickets.

"media_size": {
  "option": [
  {
    "custom_display_name": "",
    "is_continuous_feed": true,
    "max_height_microns": 2000000,
    "min_height_microns": 25400,
    "width_microns": 50800
  },
  ...
  ]
}

Typen

GetPrinterInfoResponse

Attribute

  • capabilities

    Objekt (optional)

    Druckerfunktionen im CDD-Format. Die Eigenschaft fehlt.

  • Status

    Der Status des Druckers.

JobStatus

Status des Druckauftrags.

Enum

"PENDING"
Der Druckauftrag wurde von Chrome empfangen, aber noch nicht verarbeitet.

"IN_PROGRESS"
Der Druckauftrag wird zum Drucken gesendet.

"FAILED"
Der Druckauftrag wurde aufgrund eines Fehlers unterbrochen.

"CANCELED"
Der Druckauftrag wurde vom Nutzer oder über die API abgebrochen.

"PrintED"
Der Druckauftrag wurde ohne Fehler gedruckt.

Printer

Attribute

  • Beschreibung

    String

    Die für Menschen lesbare Beschreibung des Druckers.

  • id

    String

    Die Drucker-ID; dass sie unter den Druckern auf dem Gerät eindeutig sind.

  • isDefault

    boolean

    Das Flag, das angibt, ob der Drucker den DefaultPrinterSelection-Regeln entspricht. Beachten Sie, dass mehrere Drucker gekennzeichnet werden können.

  • Name

    String

    Der Name des Druckers.

  • recentlyUsedRank

    Zahl optional

    Der Wert, der angibt, wann zuletzt der Drucker zum Drucken über Chrome verwendet wurde. Je niedriger der Wert, desto neuer wurde der Drucker verwendet. Der Mindestwert ist 0. Fehlender Wert bedeutet, dass der Drucker in letzter Zeit nicht verwendet wurde. Dieser Wert ist unter den Druckern garantiert eindeutig.

  • source

    Die Quelle des Druckers (Nutzer oder Richtlinie konfiguriert).

  • uri

    String

    Der Drucker-URI. Damit können Erweiterungen den Drucker für den Nutzer auswählen.

PrinterSource

Die Quelle des Druckers.

Enum

"USER"
Drucker wurde vom Nutzer hinzugefügt.

"POLICY"
Drucker wurde über eine Richtlinie hinzugefügt.

PrinterStatus

Der Status des Druckers.

Enum

"DOOR_OPEN"
Die Klappe des Druckers ist offen. Der Drucker akzeptiert weiterhin Druckaufträge.

"TRAY_MISSING"
Das Fach des Druckers fehlt. Der Drucker akzeptiert weiterhin Druckaufträge.

"OUT_OF_INK"
Die Tinte des Druckers ist leer. Der Drucker akzeptiert weiterhin Druckaufträge.

"OUT_OF_PAPER"
Der Drucker hat kein Papier mehr. Der Drucker akzeptiert weiterhin Druckaufträge.

"OUTPUT_FULL"
Der Ausgabebereich des Druckers (z.B. Fach) ist voll. Der Drucker akzeptiert weiterhin Druckaufträge.

"PAPER_JAM"
Der Drucker hat einen Papierstau. Der Drucker akzeptiert weiterhin Druckaufträge.

"GENERIC_ISSUE"
Ein allgemeines Problem. Der Drucker akzeptiert weiterhin Druckaufträge.

"STOPPED"
Der Drucker wurde angehalten und druckt nicht, akzeptiert aber weiterhin Druckaufträge.

"UNREACHABLE"
Der Drucker ist nicht erreichbar und akzeptiert keine Druckaufträge.

"EXPIRED_CERTIFICATE"
Das SSL-Zertifikat ist abgelaufen. Der Drucker nimmt die Aufträge an, schlagen jedoch fehl.

"AVAILABLE"
Der Drucker ist verfügbar.

SubmitJobRequest

Attribute

  • Job

    Der Druckauftrag, der gesendet werden soll. Der einzige unterstützte Inhaltstyp ist „application/pdf“. Das Cloud Job Ticket sollte keine Felder FitToPageTicketItem, PageRangeTicketItem, ReverseOrderTicketItem und VendorTicketItem enthalten, da diese für das native Drucken nicht relevant sind. Alle anderen Felder müssen vorhanden sein.

SubmitJobResponse

Attribute

  • jobId

    String optional

    Die ID des erstellten Druckauftrags. Hierbei handelt es sich um eine eindeutige Kennung für alle Druckaufträge auf dem Gerät. Wenn der Status nicht OK ist, ist jobId null.

  • Der Status der Anfrage.

SubmitJobStatus

Der Status der submitJob-Anfrage.

Enum

"OK"
Die gesendete Druckauftragsanfrage wurde akzeptiert.

"USER_REJECTED"
Die gesendete Druckauftragsanfrage wurde vom Nutzer abgelehnt.

Attribute

MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE

Die maximale Anzahl von Aufrufen von getPrinterInfo pro Minute.

Wert

20

MAX_SUBMIT_JOB_CALLS_PER_MINUTE

Die maximale Anzahl von Aufrufen von submitJob pro Minute.

Wert

40

Methoden

cancelJob()

<ph type="x-smartling-placeholder"></ph> Versprechen
chrome.printing.cancelJob(
  jobId: string,
  callback?: function,
)

Bricht einen zuvor gesendeten Job ab.

Parameter

  • jobId

    String

    Die ID des Druckauftrags, der abgebrochen werden soll. Dies sollte dieselbe ID sein, die in einer SubmitJobResponse empfangen wurde.

  • callback

    Funktion optional

    Der Parameter callback sieht so aus:

    () => void

Returns

  • Versprechen<void>

    Chrome 100 und höher

    Promise-Objekte werden in Manifest V3 und höher unterstützt, Callbacks sind jedoch für Abwärtskompatibilität. Sie können nicht beide in demselben Funktionsaufruf verwenden. Die Promise wird mit demselben Typ aufgelöst, der an das Callback übergeben wird.

getPrinterInfo()

<ph type="x-smartling-placeholder"></ph> Versprechen
chrome.printing.getPrinterInfo(
  printerId: string,
  callback?: function,
)

Gibt den Status und die Funktionen des Druckers im CDD-Format zurück. Dieser Aufruf schlägt mit einem Laufzeitfehler fehl, wenn keine Drucker mit der angegebenen ID installiert sind.

Parameter

Returns

  • Promise&lt;GetPrinterInfoResponse&gt;

    Chrome 100 und höher

    Promise-Objekte werden in Manifest V3 und höher unterstützt, Callbacks sind jedoch für Abwärtskompatibilität. Sie können nicht beide in demselben Funktionsaufruf verwenden. Die Promise wird mit demselben Typ aufgelöst, der an das Callback übergeben wird.

getPrinters()

<ph type="x-smartling-placeholder"></ph> Versprechen
chrome.printing.getPrinters(
  callback?: function,
)

Gibt die Liste der auf dem Gerät verfügbaren Drucker zurück. Dazu gehören manuell hinzugefügte, Unternehmensdrucker und erkannte Drucker.

Parameter

  • callback

    Funktion optional

    Der Parameter callback sieht so aus:

    (printers: Printer[]) => void

Returns

  • Promise<Drucker[]>

    Chrome 100 und höher

    Promise-Objekte werden in Manifest V3 und höher unterstützt, Callbacks sind jedoch für Abwärtskompatibilität. Sie können nicht beide in demselben Funktionsaufruf verwenden. Die Promise wird mit demselben Typ aufgelöst, der an das Callback übergeben wird.

submitJob()

<ph type="x-smartling-placeholder"></ph> Versprechen
chrome.printing.submitJob(
  request: SubmitJobRequest,
  callback?: function,
)

Sendet den Auftrag zum Drucken. Ist die Erweiterung nicht in der Richtlinie PrintingAPIExtensionsAllowlist aufgeführt, wird der Nutzer aufgefordert, den Druckauftrag anzunehmen. Vor Chrome 120 hat diese Funktion kein Promise zurückgegeben.

Parameter

Returns

  • Promise&lt;SubmitJobResponse&gt;

    Chrome 100 und höher

    Promise-Objekte werden in Manifest V3 und höher unterstützt, Callbacks sind jedoch für Abwärtskompatibilität. Sie können nicht beide in demselben Funktionsaufruf verwenden. Die Promise wird mit demselben Typ aufgelöst, der an das Callback übergeben wird.

Ereignisse

onJobStatusChanged

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

Das Ereignis wird ausgelöst, wenn sich der Status des Jobs ändert. Dieses Ereignis wird nur bei den Jobs ausgelöst, die von dieser Erweiterung erstellt wurden.

Parameter

  • callback

    Funktion

    Der Parameter callback sieht so aus:

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