chrome.printing

Beschreibung

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

Berechtigungen

printing

Verfügbarkeit

Chrome 81 oder höher Nur ChromeOS

Manifest

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 Namespace „printing“ veranschaulicht. Dieser Code wurde aus dem api-samples/printing-Verzeichnis im GitHub-Repository „extensions-samples“ kopiert oder basiert darauf.

cancelJob()

In diesem Beispiel wird der onJobStatusChanged-Handler verwendet, um die Schaltfläche „Abbrechen“ auszublenden, wenn jobStatus weder PENDING noch IN_PROGRESS ist. Hinweis: In einigen Netzwerken oder wenn ein Chromebook direkt mit dem Drucker verbunden ist, werden diese Status möglicherweise zu schnell durchlaufen, sodass die Schaltfläche „Abbrechen“ nicht lange genug sichtbar ist, 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 ein einzelnes Beispiel verwendet, da zum Abrufen von Druckerinformationen eine Drucker-ID erforderlich ist, die durch Aufrufen von getPrinters() abgerufen wird. In diesem Beispiel werden der Name und die 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 aus den verfügbaren Funktionen auswählen muss, können Sie diese 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. Diese Struktur enthält einen Verweis auf die ticket-Struktur.
  • Ein Blob der zu druckenden Datei oder Daten.

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

Dies ist eine vereinfachte Version des Druckbeispiels. ticket ist an die SubmitJobRequest-Struktur angehängt (Zeile 8) und die zu druckenden Daten werden in einen Blob konvertiert (Zeile 10). Die ID des Druckers (Zeile 1) abzurufen, ist im Beispiel komplizierter als hier dargestellt.

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

In diesem Beispiel wird gezeigt, wie Sie ein Druckerticket für den kontinuierlichen Druck (oder Rollendruck) erstellen, der häufig für den Belegdruck verwendet wird. Das submitJobRequest-Objekt für den Rollendruck ist dasselbe wie im Beispiel für submitJob().

Wenn Sie den Standardwert für das Schneiden von Papier ändern möchten, verwenden Sie die Taste vendor_ticket_item. Der Standardwert variiert je nach Drucker. Wenn dieser Schlüssel enthalten ist, muss er ein Array mit einem Element sein: einem Objekt, dessen id 'finishings' ist. Der Wert kann entweder 'trim' für Drucker sein, die die Rolle am Ende des Druckvorgangs schneiden, oder 'none' für Drucker, bei denen der Druckauftrag abgerissen 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. Wenn Sie herausfinden möchten, ob Ihr Drucker das unterstützt, rufen Sie getPrinterInfo() auf und suchen Sie nach einem "display_name" von "finishings/11".

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

Die Werte im media_size-Schlüssel eines Tickets sind für jeden Drucker spezifisch. Rufen Sie getPrinterInfo() auf, um eine geeignete Größe auszuwählen. Das zurückgegebene GetPrinterResponse enthält ein Array mit unterstützten Mediengrößen unter "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 für das Ticket.

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

Typen

GetPrinterInfoResponse

Properties

  • capabilities

    object optional

    Druckerfunktionen im CDD-Format. Die Property fehlt möglicherweise.

  • 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.

FEHLGESCHLAGEN
Der Druckauftrag wurde aufgrund eines Fehlers unterbrochen.

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

GEDRUCKT
Der Druckauftrag wurde ohne Fehler gedruckt.

Printer

Properties

  • Beschreibung

    String

    Die menschenlesbare Beschreibung des Druckers.

  • id

    String

    Die Kennung des Druckers, die garantiert unter den Druckern auf dem Gerät eindeutig ist.

  • isDefault

    boolean

    Der Parameter, der angibt, ob der Drucker den DefaultPrinterSelection-Regeln entspricht. Es kann sein, dass mehrere Drucker gekennzeichnet werden.

  • name

    String

    Der Name des Druckers.

  • recentlyUsedRank

    number optional

    Der Wert gibt an, wie lange es her ist, dass der Drucker zum Drucken aus Chrome verwendet wurde. Je niedriger der Wert ist, desto kürzer ist es her, dass der Drucker verwendet wurde. Der Mindestwert ist 0. Ein fehlender Wert gibt an, dass der Drucker in letzter Zeit nicht verwendet wurde. Dieser Wert ist garantiert eindeutig für alle Drucker.

  • source

    Die Quelle des Druckers (vom Nutzer oder durch eine Richtlinie konfiguriert).

  • uri

    String

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

PrinterSource

Die Quelle des Druckers.

Enum

„USER“
Der Drucker wurde vom Nutzer hinzugefügt.

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

PrinterStatus

Der Status des Druckers.

Enum

"DOOR_OPEN"
Die Druckerklappe ist geöffnet. Der Drucker nimmt weiterhin Druckaufträge an.

„TRAY_MISSING“
Das Papierfach des Druckers fehlt. Der Drucker nimmt weiterhin Druckaufträge an.

„OUT_OF_INK“
Der Drucker hat keine Tinte mehr. Der Drucker nimmt weiterhin Druckaufträge an.

„OUT_OF_PAPER“
Der Drucker hat kein Papier mehr. Der Drucker nimmt weiterhin Druckaufträge an.

„OUTPUT_FULL“
Der Ausgabebereich des Druckers (z.B. das Fach) ist voll. Der Drucker nimmt weiterhin Druckaufträge an.

„PAPER_JAM“
Der Drucker hat einen Papierstau. Der Drucker nimmt weiterhin Druckaufträge an.

„GENERIC_ISSUE“
Ein allgemeines Problem. Der Drucker nimmt weiterhin Druckaufträge an.

„STOPPED“
Der Drucker ist angehalten und druckt nicht, akzeptiert aber weiterhin Druckaufträge.

„UNREACHABLE“
Der Drucker ist nicht erreichbar und nimmt keine Druckaufträge an.

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

„AVAILABLE“
Der Drucker ist verfügbar.

SubmitJobRequest

Properties

  • Job

    Der Druckauftrag, der gesendet werden soll. Die unterstützten Inhaltstypen sind „application/pdf“ und „image/png“. Das Cloud Job Ticket sollte die Felder FitToPageTicketItem, PageRangeTicketItem und ReverseOrderTicketItem nicht enthalten, da sie für die systemeigene Druckfunktion irrelevant sind. VendorTicketItem ist optional. Alle anderen Felder müssen vorhanden sein.

SubmitJobResponse

Properties

  • jobId

    String optional

    Die ID des erstellten Druckauftrags. Dies ist 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.

Properties

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

Promise
chrome.printing.cancelJob(
  jobId: string,
  callback?: function,
)
: Promise<void>

Bricht einen zuvor eingereichten Job ab.

Parameter

  • jobId

    String

    Die ID des Druckauftrags, der abgebrochen werden soll. Dies sollte dieselbe ID sein, die Sie in einer SubmitJobResponse erhalten haben.

  • callback

    Funktion optional

    Der Parameter callback sieht so aus:

    () => void

Ausgabe

  • Promise<void>

    Chrome 100 und höher

    Promises werden nur für Manifest V3 und höher unterstützt. Auf anderen Plattformen müssen Callbacks verwendet werden.

getJobStatus()

Promise Chrome 135 oder höher
chrome.printing.getJobStatus(
  jobId: string,
  callback?: function,
)
: Promise<JobStatus>

Gibt den Status des Druckauftrags zurück. Dieser Aufruf schlägt mit einem Laufzeitfehler fehl, wenn der Druckauftrag mit der angegebenen jobId nicht vorhanden ist. jobId: Die ID des Druckauftrags, für den der Status zurückgegeben werden soll. Dies sollte dieselbe ID sein, die Sie in einer SubmitJobResponse erhalten haben.

Parameter

  • jobId

    String

  • callback

    Funktion optional

    Der Parameter callback sieht so aus:

    (status: JobStatus) => void

Ausgabe

  • Promise<JobStatus>

    Promises werden nur für Manifest V3 und höher unterstützt. Auf anderen Plattformen müssen Callbacks verwendet werden.

getPrinterInfo()

Promise
chrome.printing.getPrinterInfo(
  printerId: string,
  callback?: function,
)
: Promise<GetPrinterInfoResponse>

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

Ausgabe

  • Chrome 100 und höher

    Promises werden nur für Manifest V3 und höher unterstützt. Auf anderen Plattformen müssen Callbacks verwendet werden.

getPrinters()

Promise
chrome.printing.getPrinters(
  callback?: function,
)
: Promise<Printer[]>

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

Parameter

  • callback

    Funktion optional

    Der Parameter callback sieht so aus:

    (printers: Printer[]) => void

Ausgabe

  • Promise<Printer[]>

    Chrome 100 und höher

    Promises werden nur für Manifest V3 und höher unterstützt. Auf anderen Plattformen müssen Callbacks verwendet werden.

submitJob()

Promise
chrome.printing.submitJob(
  request: SubmitJobRequest,
  callback?: function,
)
: Promise<SubmitJobResponse>

Sendet den Job zum Drucken. Wenn die Erweiterung nicht in der Richtlinie PrintingAPIExtensionsAllowlist aufgeführt ist, wird der Nutzer aufgefordert, den Druckauftrag zu akzeptieren. Vor Chrome 120 wurde von dieser Funktion kein Promise zurückgegeben.

Parameter

Ausgabe

  • Chrome 100 und höher

    Promises werden nur für Manifest V3 und höher unterstützt. Auf anderen Plattformen müssen Callbacks verwendet werden.

Ereignisse

onJobStatusChanged

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

Ereignis, das ausgelöst wird, wenn sich der Status des Jobs ändert. Dieses Ereignis wird nur für Jobs ausgelöst, die von dieser Erweiterung erstellt wurden.

Parameter

  • callback

    Funktion

    Der Parameter callback sieht so aus:

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