// Copyright 2020 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. function onPrintButtonClicked(printerId, dpi) { let ticket = { version: '1.0', print: { color: { type: 'STANDARD_MONOCHROME' }, duplex: { type: 'NO_DUPLEX' }, page_orientation: { type: 'LANDSCAPE' }, copies: { copies: 1 }, dpi: { horizontal_dpi: dpi.horizontal_dpi, vertical_dpi: dpi.vertical_dpi }, media_size: { width_microns: 210000, height_microns: 297000, vendor_id: 'iso_a4_210x297mm' }, collate: { collate: false } } }; fetch('test.pdf') .then((response) => response.arrayBuffer()) .then((arrayBuffer) => { const request = { job: { printerId: printerId, title: 'test job', ticket: ticket, contentType: 'application/pdf', document: new Blob([new Uint8Array(arrayBuffer)], { type: 'application/pdf' }) } }; chrome.printing.submitJob(request, (response) => { if (response !== undefined) { console.log(response.status); } if (chrome.runtime.lastError !== undefined) { console.log(chrome.runtime.lastError.message); } }); }); } function createPrintButton(onClicked) { const button = document.createElement('button'); button.innerHTML = 'Print'; button.onclick = onClicked; return button; } function createPrintersTable() { chrome.printing.getPrinters(function (printers) { const tbody = document.createElement('tbody'); for (let i = 0; i < printers.length; ++i) { const printer = printers[i]; chrome.printing.getPrinterInfo(printer.id, function (response) { const columnValues = [ printer.id, printer.name, printer.description, printer.uri, printer.source, printer.isDefault, printer.recentlyUsedRank, JSON.stringify(response.capabilities), response.status ]; let tr = document.createElement('tr'); for (const columnValue of columnValues) { const td = document.createElement('td'); td.appendChild(document.createTextNode(columnValue)); td.setAttribute('align', 'center'); tr.appendChild(td); } const printTd = document.createElement('td'); printTd.appendChild( createPrintButton(function () { onPrintButtonClicked( printer.id, response.capabilities.printer.dpi.option[0] ); }) ); tr.appendChild(printTd); tbody.appendChild(tr); }); } const table = document.getElementById('printersTable'); table.appendChild(tbody); }); } document.addEventListener('DOMContentLoaded', function () { createPrintersTable(); });