Commit 6c45705f authored by Nikita Podguzov's avatar Nikita Podguzov Committed by Commit Bot

Printing API: Add example extension for chrome.printing API

This extension demonstrates how chrome.printing API can be used to
submit print jobs to the printers.
This extension will be used for external documentation as well.

Bug: 996785
Change-Id: Idb221bb99f2e157983edfb0356ae87ca655a9e12
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2050780Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Commit-Queue: Nikita Podguzov <nikitapodguzov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#743464}
parent aca480af
{
"name": "Print Extension",
"version": "1.0",
"description": "Sends print job directly to the printers installed on the Chromebook",
"permissions": [
"printing"
],
"browser_action": {
"default_popup": "printers.html",
"default_icon": "icons/icon.png"
},
"icons": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
},
"manifest_version": 2
}
/**
* 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.
*/
table, th, td, tr {
border: 1px solid black;
}
table {
width: 100%;
border-collapse: collapse;
}
div {
overflow: auto;
}
<!--
* 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.
-->
<!DOCTYPE HTML>
<html>
<head>
<title>Printers</title>
<link href="printers.css" rel="stylesheet" type="text/css">
<script src="printers.js"></script>
</head>
<body>
<h2>Printers:</h2>
<div id="printers">
<table id="printersTable">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Description</th>
<th>URI</th>
<th>Source</th>
<th>Default</th>
<th>Recently used</th>
<th>Capabilities</th>
<th>Status</th>
<th>Print</th>
</tr>
</thead>
</table>
</div>
</body>
</html>
// 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) {
var 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();
});
This diff was suppressed by a .gitattributes entry.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment