Browse Source

Adds support for the new mozPrintCallback api.

Brendan Dahl 13 years ago
parent
commit
7e5a9b7a39
  1. 30
      web/viewer.css
  2. 1
      web/viewer.html
  3. 63
      web/viewer.js

30
web/viewer.css

@ -1113,28 +1113,26 @@ canvas {
font-size: 10px; font-size: 10px;
} }
@media print { @page {
#sidebarContainer, .toolbar, #loadingBox, #errorWrapper, .textLayer { margin: 0;
display: none; }
}
#mainContainer, #viewerContainer, .page, .page canvas { #printContainer {
position: static; display: none;
padding: 0; }
margin: 0;
}
.page { @media print {
float: left; #outerContainer {
display: none; display: none;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
} }
#printContainer {
.page[data-loaded] {
display: block; display: block;
} }
canvas {
position: relative;
top: 0;
left: 0;
}
} }
@media all and (max-width: 950px) { @media all and (max-width: 950px) {

1
web/viewer.html

@ -176,5 +176,6 @@
</div> <!-- mainContainer --> </div> <!-- mainContainer -->
</div> <!-- outerContainer --> </div> <!-- outerContainer -->
<div id="printContainer"></div>
</body> </body>
</html> </html>

63
web/viewer.js

@ -379,6 +379,11 @@ var PDFView = {
return currentPageNumber; return currentPageNumber;
}, },
get supportsPrinting() {
var canvas = document.createElement('canvas');
return 'mozPrintCallback' in canvas;
},
open: function pdfViewOpen(url, scale, password) { open: function pdfViewOpen(url, scale, password) {
var parameters = {password: password}; var parameters = {password: password};
if (typeof url === 'string') { // URL if (typeof url === 'string') { // URL
@ -1041,6 +1046,22 @@ var PDFView = {
params[unescape(key)] = unescape(value); params[unescape(key)] = unescape(value);
} }
return params; return params;
},
beforePrint: function pdfViewSetupBeforePrint() {
if (!this.supportsPrinting) {
alert('Printing is not supported by this browser.');
return;
}
for (var i = 0, ii = this.pages.length; i < ii; ++i) {
this.pages[i].beforePrint();
}
},
afterPrint: function pdfViewSetupAfterPrint() {
var div = document.getElementById('printContainer');
while (div.hasChildNodes())
div.removeChild(div.lastChild);
} }
}; };
@ -1360,6 +1381,40 @@ var PageView = function pageView(container, pdfPage, id, scale,
div.setAttribute('data-loaded', true); div.setAttribute('data-loaded', true);
}; };
this.beforePrint = function pageViewBeforePrint() {
var pdfPage = this.pdfPage;
var viewport = pdfPage.getViewport(1);
var canvas = this.canvas = document.createElement('canvas');
canvas.width = viewport.width;
canvas.height = viewport.height;
canvas.style.width = viewport.width + 'pt';
canvas.style.height = viewport.height + 'pt';
var printContainer = document.getElementById('printContainer');
printContainer.appendChild(canvas);
var self = this;
canvas.mozPrintCallback = function(obj) {
var ctx = obj.context;
var renderContext = {
canvasContext: ctx,
viewport: viewport
};
pdfPage.render(renderContext).then(function() {
// Tell the printEngine that rendering this canvas/page has finished.
obj.done();
self.pdfPage.destroy();
}, function(error) {
console.error(error);
// Tell the printEngine that rendering this canvas/page has failed.
// This will make the print proces stop.
obj.abort();
});
};
};
this.updateStats = function pageViewUpdateStats() { this.updateStats = function pageViewUpdateStats() {
if (PDFJS.pdfBug && Stats.enabled) { if (PDFJS.pdfBug && Stats.enabled) {
var stats = this.stats; var stats = this.stats;
@ -1960,3 +2015,11 @@ window.addEventListener('keydown', function keydown(evt) {
evt.preventDefault(); evt.preventDefault();
} }
}); });
window.addEventListener('beforeprint', function beforePrint(evt) {
PDFView.beforePrint();
});
window.addEventListener('afterprint', function afterPrint(evt) {
PDFView.afterPrint();
});

Loading…
Cancel
Save