Skip to content

Commit

Permalink
Merge pull request mozilla#7677 from yurydelendik/print
Browse files Browse the repository at this point in the history
Bug 1302069 - Printing canvases at PDF document size.
  • Loading branch information
yurydelendik committed Oct 6, 2016
2 parents 7f2518e + 7bdc7ff commit edc4fc5
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 29 deletions.
29 changes: 10 additions & 19 deletions web/pdf_page_view.js
Original file line number Diff line number Diff line change
Expand Up @@ -546,22 +546,18 @@ var PDFPageView = (function PDFPageViewClosure() {
var pdfPage = this.pdfPage;

var viewport = pdfPage.getViewport(1);
// Use the same hack we use for high dpi displays for printing to get
// better output until bug 811002 is fixed in FF.
var PRINT_OUTPUT_SCALE = 2;
var canvas = document.createElement('canvas');

// The logical size of the canvas.
canvas.width = Math.floor(viewport.width) * PRINT_OUTPUT_SCALE;
canvas.height = Math.floor(viewport.height) * PRINT_OUTPUT_SCALE;
var canvas = document.createElement('canvas');

// The rendered size of the canvas, relative to the size of canvasWrapper.
canvas.style.width = (PRINT_OUTPUT_SCALE * 100) + '%';
// The size of the canvas in pixels for printing.
var PRINT_RESOLUTION = 150;
var PRINT_UNITS = PRINT_RESOLUTION / 72.0;
canvas.width = Math.floor(viewport.width * PRINT_UNITS);
canvas.height = Math.floor(viewport.height * PRINT_UNITS);

var cssScale = 'scale(' + (1 / PRINT_OUTPUT_SCALE) + ', ' +
(1 / PRINT_OUTPUT_SCALE) + ')';
CustomStyle.setProp('transform' , canvas, cssScale);
CustomStyle.setProp('transformOrigin' , canvas, '0% 0%');
// The physical size of the canvas as specified by the PDF document.
canvas.style.width = Math.floor(viewport.width * CSS_UNITS) + 'px';
canvas.style.height = Math.floor(viewport.height * CSS_UNITS) + 'px';

var canvasWrapper = document.createElement('div');
canvasWrapper.appendChild(canvas);
Expand All @@ -574,15 +570,10 @@ var PDFPageView = (function PDFPageViewClosure() {
ctx.fillStyle = 'rgb(255, 255, 255)';
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.restore();
//#if !(MOZCENTRAL || FIREFOX)
// Used by the mozCurrentTransform polyfill in src/display/canvas.js.
ctx._transformMatrix =
[PRINT_OUTPUT_SCALE, 0, 0, PRINT_OUTPUT_SCALE, 0, 0];
//#endif
ctx.scale(PRINT_OUTPUT_SCALE, PRINT_OUTPUT_SCALE);

var renderContext = {
canvasContext: ctx,
transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],
viewport: viewport,
intent: 'print'
};
Expand Down
8 changes: 0 additions & 8 deletions web/viewer-snippet-mozPrintCallback-polyfill.html
Original file line number Diff line number Diff line change
@@ -1,12 +1,4 @@
<div id="mozPrintCallback-shim" hidden>
<style>
@media print {
#printContainer div {
page-break-after: always;
page-break-inside: avoid;
}
}
</style>
<style scoped>
#mozPrintCallback-shim {
position: fixed;
Expand Down
7 changes: 5 additions & 2 deletions web/viewer.css
Original file line number Diff line number Diff line change
Expand Up @@ -1810,8 +1810,11 @@ html[dir='rtl'] #documentPropertiesOverlay .row > * {
position: relative;
top: 0;
left: 0;
height: 100%;
overflow: hidden;
width: 1px;
height: 1px;
overflow: visible;
page-break-after: always;
page-break-inside: avoid;
}
#printContainer canvas {
display: block;
Expand Down

0 comments on commit edc4fc5

Please sign in to comment.