Do the AppOptions.get("printResolution")
lookup once in web/app.js
, when initializing PDFPrintServiceFactory
-instances, rather than for every printed page
There's really no point in repeating these lookups over and over, since the value should be constant for the duration of one print invocation anyway.
This commit is contained in:
parent
63e33a5895
commit
97d796e372
@ -1609,10 +1609,13 @@ const PDFViewerApplication = {
|
|||||||
|
|
||||||
const pagesOverview = this.pdfViewer.getPagesOverview();
|
const pagesOverview = this.pdfViewer.getPagesOverview();
|
||||||
const printContainer = this.appConfig.printContainer;
|
const printContainer = this.appConfig.printContainer;
|
||||||
|
const printResolution = AppOptions.get("printResolution");
|
||||||
|
|
||||||
const printService = PDFPrintServiceFactory.instance.createPrintService(
|
const printService = PDFPrintServiceFactory.instance.createPrintService(
|
||||||
this.pdfDocument,
|
this.pdfDocument,
|
||||||
pagesOverview,
|
pagesOverview,
|
||||||
printContainer,
|
printContainer,
|
||||||
|
printResolution,
|
||||||
this.l10n
|
this.l10n
|
||||||
);
|
);
|
||||||
this.printService = printService;
|
this.printService = printService;
|
||||||
|
@ -13,18 +13,22 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { AppOptions } from "./app_options.js";
|
|
||||||
import { CSS_UNITS } from "./ui_utils.js";
|
import { CSS_UNITS } from "./ui_utils.js";
|
||||||
import { PDFPrintServiceFactory } from "./app.js";
|
import { PDFPrintServiceFactory } from "./app.js";
|
||||||
import { shadow } from "pdfjs-lib";
|
import { shadow } from "pdfjs-lib";
|
||||||
|
|
||||||
// Creates a placeholder with div and canvas with right size for the page.
|
// Creates a placeholder with div and canvas with right size for the page.
|
||||||
function composePage(pdfDocument, pageNumber, size, printContainer) {
|
function composePage(
|
||||||
|
pdfDocument,
|
||||||
|
pageNumber,
|
||||||
|
size,
|
||||||
|
printContainer,
|
||||||
|
printResolution
|
||||||
|
) {
|
||||||
const canvas = document.createElement("canvas");
|
const canvas = document.createElement("canvas");
|
||||||
|
|
||||||
// The size of the canvas in pixels for printing.
|
// The size of the canvas in pixels for printing.
|
||||||
const PRINT_RESOLUTION = AppOptions.get("printResolution") || 150;
|
const PRINT_UNITS = printResolution / 72.0;
|
||||||
const PRINT_UNITS = PRINT_RESOLUTION / 72.0;
|
|
||||||
canvas.width = Math.floor(size.width * PRINT_UNITS);
|
canvas.width = Math.floor(size.width * PRINT_UNITS);
|
||||||
canvas.height = Math.floor(size.height * PRINT_UNITS);
|
canvas.height = Math.floor(size.height * PRINT_UNITS);
|
||||||
|
|
||||||
@ -76,21 +80,38 @@ function composePage(pdfDocument, pageNumber, size, printContainer) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function FirefoxPrintService(pdfDocument, pagesOverview, printContainer) {
|
function FirefoxPrintService(
|
||||||
|
pdfDocument,
|
||||||
|
pagesOverview,
|
||||||
|
printContainer,
|
||||||
|
printResolution
|
||||||
|
) {
|
||||||
this.pdfDocument = pdfDocument;
|
this.pdfDocument = pdfDocument;
|
||||||
this.pagesOverview = pagesOverview;
|
this.pagesOverview = pagesOverview;
|
||||||
this.printContainer = printContainer;
|
this.printContainer = printContainer;
|
||||||
|
this._printResolution = printResolution || 150;
|
||||||
}
|
}
|
||||||
|
|
||||||
FirefoxPrintService.prototype = {
|
FirefoxPrintService.prototype = {
|
||||||
layout() {
|
layout() {
|
||||||
const { pdfDocument, pagesOverview, printContainer } = this;
|
const {
|
||||||
|
pdfDocument,
|
||||||
|
pagesOverview,
|
||||||
|
printContainer,
|
||||||
|
_printResolution,
|
||||||
|
} = this;
|
||||||
|
|
||||||
const body = document.querySelector("body");
|
const body = document.querySelector("body");
|
||||||
body.setAttribute("data-pdfjsprinting", true);
|
body.setAttribute("data-pdfjsprinting", true);
|
||||||
|
|
||||||
for (let i = 0, ii = pagesOverview.length; i < ii; ++i) {
|
for (let i = 0, ii = pagesOverview.length; i < ii; ++i) {
|
||||||
composePage(pdfDocument, i + 1, pagesOverview[i], printContainer);
|
composePage(
|
||||||
|
pdfDocument,
|
||||||
|
/* pageNumber = */ i + 1,
|
||||||
|
pagesOverview[i],
|
||||||
|
printContainer,
|
||||||
|
_printResolution
|
||||||
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -110,8 +131,18 @@ PDFPrintServiceFactory.instance = {
|
|||||||
return shadow(this, "supportsPrinting", value);
|
return shadow(this, "supportsPrinting", value);
|
||||||
},
|
},
|
||||||
|
|
||||||
createPrintService(pdfDocument, pagesOverview, printContainer) {
|
createPrintService(
|
||||||
return new FirefoxPrintService(pdfDocument, pagesOverview, printContainer);
|
pdfDocument,
|
||||||
|
pagesOverview,
|
||||||
|
printContainer,
|
||||||
|
printResolution
|
||||||
|
) {
|
||||||
|
return new FirefoxPrintService(
|
||||||
|
pdfDocument,
|
||||||
|
pagesOverview,
|
||||||
|
printContainer,
|
||||||
|
printResolution
|
||||||
|
);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -22,12 +22,17 @@ let overlayManager = null;
|
|||||||
|
|
||||||
// Renders the page to the canvas of the given print service, and returns
|
// Renders the page to the canvas of the given print service, and returns
|
||||||
// the suggested dimensions of the output page.
|
// the suggested dimensions of the output page.
|
||||||
function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) {
|
function renderPage(
|
||||||
|
activeServiceOnEntry,
|
||||||
|
pdfDocument,
|
||||||
|
pageNumber,
|
||||||
|
size,
|
||||||
|
printResolution
|
||||||
|
) {
|
||||||
const scratchCanvas = activeService.scratchCanvas;
|
const scratchCanvas = activeService.scratchCanvas;
|
||||||
|
|
||||||
// The size of the canvas in pixels for printing.
|
// The size of the canvas in pixels for printing.
|
||||||
const PRINT_RESOLUTION = AppOptions.get("printResolution") || 150;
|
const PRINT_UNITS = printResolution / 72.0;
|
||||||
const PRINT_UNITS = PRINT_RESOLUTION / 72.0;
|
|
||||||
scratchCanvas.width = Math.floor(size.width * PRINT_UNITS);
|
scratchCanvas.width = Math.floor(size.width * PRINT_UNITS);
|
||||||
scratchCanvas.height = Math.floor(size.height * PRINT_UNITS);
|
scratchCanvas.height = Math.floor(size.height * PRINT_UNITS);
|
||||||
|
|
||||||
@ -61,10 +66,17 @@ function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function PDFPrintService(pdfDocument, pagesOverview, printContainer, l10n) {
|
function PDFPrintService(
|
||||||
|
pdfDocument,
|
||||||
|
pagesOverview,
|
||||||
|
printContainer,
|
||||||
|
printResolution,
|
||||||
|
l10n
|
||||||
|
) {
|
||||||
this.pdfDocument = pdfDocument;
|
this.pdfDocument = pdfDocument;
|
||||||
this.pagesOverview = pagesOverview;
|
this.pagesOverview = pagesOverview;
|
||||||
this.printContainer = printContainer;
|
this.printContainer = printContainer;
|
||||||
|
this._printResolution = printResolution || 150;
|
||||||
this.l10n = l10n || NullL10n;
|
this.l10n = l10n || NullL10n;
|
||||||
this.disableCreateObjectURL = AppOptions.get("disableCreateObjectURL");
|
this.disableCreateObjectURL = AppOptions.get("disableCreateObjectURL");
|
||||||
this.currentPage = -1;
|
this.currentPage = -1;
|
||||||
@ -154,7 +166,13 @@ PDFPrintService.prototype = {
|
|||||||
}
|
}
|
||||||
const index = this.currentPage;
|
const index = this.currentPage;
|
||||||
renderProgress(index, pageCount, this.l10n);
|
renderProgress(index, pageCount, this.l10n);
|
||||||
renderPage(this, this.pdfDocument, index + 1, this.pagesOverview[index])
|
renderPage(
|
||||||
|
this,
|
||||||
|
this.pdfDocument,
|
||||||
|
/* pageNumber = */ index + 1,
|
||||||
|
this.pagesOverview[index],
|
||||||
|
this._printResolution
|
||||||
|
)
|
||||||
.then(this.useRenderedPage.bind(this))
|
.then(this.useRenderedPage.bind(this))
|
||||||
.then(function () {
|
.then(function () {
|
||||||
renderNextPage(resolve, reject);
|
renderNextPage(resolve, reject);
|
||||||
@ -347,7 +365,13 @@ function ensureOverlay() {
|
|||||||
PDFPrintServiceFactory.instance = {
|
PDFPrintServiceFactory.instance = {
|
||||||
supportsPrinting: true,
|
supportsPrinting: true,
|
||||||
|
|
||||||
createPrintService(pdfDocument, pagesOverview, printContainer, l10n) {
|
createPrintService(
|
||||||
|
pdfDocument,
|
||||||
|
pagesOverview,
|
||||||
|
printContainer,
|
||||||
|
printResolution,
|
||||||
|
l10n
|
||||||
|
) {
|
||||||
if (activeService) {
|
if (activeService) {
|
||||||
throw new Error("The print service is created and active.");
|
throw new Error("The print service is created and active.");
|
||||||
}
|
}
|
||||||
@ -355,6 +379,7 @@ PDFPrintServiceFactory.instance = {
|
|||||||
pdfDocument,
|
pdfDocument,
|
||||||
pagesOverview,
|
pagesOverview,
|
||||||
printContainer,
|
printContainer,
|
||||||
|
printResolution,
|
||||||
l10n
|
l10n
|
||||||
);
|
);
|
||||||
return activeService;
|
return activeService;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user