: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
PDFViewerApplication.updateZoom(ticks, null, origin);
function webViewerTouchStart(evt) {
if (PDFViewerApplication.pdfViewer.isInPresentationMode || evt.touches.length < 2) {
if (evt.touches.length !== 2 || PDFViewerApplication.overlayManager.active) {
PDFViewerApplication._touchInfo = null;
let [touch0, touch1] = evt.touches;
if (touch0.identifier > touch1.identifier) {
[touch0, touch1] = [touch1, touch0];
PDFViewerApplication._touchInfo = {
function webViewerTouchMove(evt) {
if (!PDFViewerApplication._touchInfo || evt.touches.length !== 2) {
} = PDFViewerApplication;
let [touch0, touch1] = evt.touches;
if (touch0.identifier > touch1.identifier) {
[touch0, touch1] = [touch1, touch0];
if (Math.abs(pTouch0X - page0X) <= 1 && Math.abs(pTouch0Y - page0Y) <= 1 && Math.abs(pTouch1X - page1X) <= 1 && Math.abs(pTouch1Y - page1Y) <= 1) {
_touchInfo.touch0X = page0X;
_touchInfo.touch0Y = page0Y;
_touchInfo.touch1X = page1X;
_touchInfo.touch1Y = page1Y;
if (pTouch0X === page0X && pTouch0Y === page0Y) {
const v1X = pTouch1X - page0X;
const v1Y = pTouch1Y - page0Y;
const v2X = page1X - page0X;
const v2Y = page1Y - page0Y;
const det = v1X * v2Y - v1Y * v2X;
if (Math.abs(det) > 0.02 * Math.hypot(v1X, v1Y) * Math.hypot(v2X, v2Y)) {
} else if (pTouch1X === page1X && pTouch1Y === page1Y) {
const v1X = pTouch0X - page1X;
const v1Y = pTouch0Y - page1Y;
const v2X = page0X - page1X;
const v2Y = page0Y - page1Y;
const det = v1X * v2Y - v1Y * v2X;
if (Math.abs(det) > 0.02 * Math.hypot(v1X, v1Y) * Math.hypot(v2X, v2Y)) {
const diff0X = page0X - pTouch0X;
const diff1X = page1X - pTouch1X;
const diff0Y = page0Y - pTouch0Y;
const diff1Y = page1Y - pTouch1Y;
const dotProduct = diff0X * diff1X + diff0Y * diff1Y;
const origin = [(page0X + page1X) / 2, (page0Y + page1Y) / 2];
const distance = Math.hypot(page0X - page1X, page0Y - page1Y) || 1;
const pDistance = Math.hypot(pTouch0X - pTouch1X, pTouch0Y - pTouch1Y) || 1;
if (supportsPinchToZoom) {
const newScaleFactor = PDFViewerApplication._accumulateFactor(pdfViewer.currentScale, distance / pDistance, "_touchUnusedFactor");
PDFViewerApplication.updateZoom(null, newScaleFactor, origin);
const PIXELS_PER_LINE_SCALE = 30;
const ticks = PDFViewerApplication._accumulateTicks((distance - pDistance) / PIXELS_PER_LINE_SCALE, "_touchUnusedTicks");
PDFViewerApplication.updateZoom(ticks, null, origin);
function webViewerTouchEnd(evt) {
if (!PDFViewerApplication._touchInfo) {
PDFViewerApplication._touchInfo = null;
PDFViewerApplication._touchUnusedTicks = 0;
PDFViewerApplication._touchUnusedFactor = 1;
function webViewerClick(evt) {
if (!PDFViewerApplication.secondaryToolbar?.isOpen) {
const appConfig = PDFViewerApplication.appConfig;
if (PDFViewerApplication.pdfViewer.containsElement(evt.target) || appConfig.toolbar?.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar?.toggleButton) {
PDFViewerApplication.secondaryToolbar.close();
function webViewerKeyUp(evt) {
if (evt.key === "Control") {
PDFViewerApplication._isCtrlKeyDown = false;
function webViewerKeyDown(evt) {
PDFViewerApplication._isCtrlKeyDown = evt.key === "Control";
if (PDFViewerApplication.overlayManager.active) {
} = PDFViewerApplication;
const isViewerInPresentationMode = pdfViewer.isInPresentationMode;
ensureViewerFocused = false;
const cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0);
if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) {
if (!PDFViewerApplication.supportsIntegratedFind && !evt.shiftKey) {
PDFViewerApplication.findBar?.open();
if (!PDFViewerApplication.supportsIntegratedFind) {
} = PDFViewerApplication.findController;
findPrevious: cmd === 5 || cmd === 12
eventBus.dispatch("find", {
PDFViewerApplication.zoomIn();
PDFViewerApplication.zoomOut();
if (!isViewerInPresentationMode) {
PDFViewerApplication.zoomReset();
if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {
PDFViewerApplication.page = 1;
ensureViewerFocused = true;
if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {
PDFViewerApplication.page = PDFViewerApplication.pagesCount;
ensureViewerFocused = true;
if (cmd === 1 || cmd === 8) {
eventBus.dispatch("download", {
eventBus.dispatch("openfile", {
if (cmd === 3 || cmd === 10) {
PDFViewerApplication.requestPresentationMode();
PDFViewerApplication.externalServices.reportTelemetry({
id: "presentationModeKeyboard"
if (PDFViewerApplication.appConfig.toolbar) {
PDFViewerApplication.appConfig.toolbar.pageNumber.select();
if (ensureViewerFocused && !isViewerInPresentationMode) {
const curElement = getActiveOrFocusedElement();
const curElementTagName = curElement?.tagName.toUpperCase();
if (curElementTagName === "INPUT" || curElementTagName === "TEXTAREA" || curElementTagName === "SELECT" || curElementTagName === "BUTTON" && (evt.keyCode === 13 || evt.keyCode === 32) || curElement?.isContentEditable) {
if (evt.keyCode !== 27) {
turnOnlyIfPageFit = false;
if (PDFViewerApplication.supportsCaretBrowsingMode) {
PDFViewerApplication.moveCaret(true, false);
if (pdfViewer.isVerticalScrollbarEnabled) {
turnOnlyIfPageFit = true;
if (!isViewerInPresentationMode) {
turnOnlyIfPageFit = true;
if (PDFViewerApplication.supportsCaretBrowsingMode) {
if (pdfViewer.isHorizontalScrollbarEnabled) {
turnOnlyIfPageFit = true;
if (PDFViewerApplication.secondaryToolbar?.isOpen) {
PDFViewerApplication.secondaryToolbar.close();
if (!PDFViewerApplication.supportsIntegratedFind && PDFViewerApplication.findBar?.opened) {
PDFViewerApplication.findBar.close();
if (PDFViewerApplication.supportsCaretBrowsingMode) {
PDFViewerApplication.moveCaret(false, false);
if (pdfViewer.isVerticalScrollbarEnabled) {
turnOnlyIfPageFit = true;
if (!isViewerInPresentationMode) {
turnOnlyIfPageFit = true;
if (PDFViewerApplication.supportsCaretBrowsingMode) {
if (pdfViewer.isHorizontalScrollbarEnabled) {
turnOnlyIfPageFit = true;
if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {
PDFViewerApplication.page = 1;
ensureViewerFocused = true;
if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {
PDFViewerApplication.page = PDFViewerApplication.pagesCount;
ensureViewerFocused = true;
PDFViewerApplication.pdfCursorTools?.switchTool(CursorTool.SELECT);
PDFViewerApplication.pdfCursorTools?.switchTool(CursorTool.HAND);
PDFViewerApplication.rotatePages(90);
PDFViewerApplication.pdfSidebar?.toggle();
if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === "page-fit")) {
pdfViewer.previousPage();
if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== "page-fit") {
pdfViewer.previousPage();
PDFViewerApplication.moveCaret(true, true);
PDFViewerApplication.moveCaret(false, true);
PDFViewerApplication.rotatePages(-90);
if (!handled && !isViewerInPresentationMode) {
if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== "BUTTON") {
ensureViewerFocused = true;
if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) {
function beforeUnload(evt) {
function webViewerAnnotationEditorStatesChanged(data) {
PDFViewerApplication.externalServices.updateEditorStates(data);
function webViewerReportTelemetry({
PDFViewerApplication.externalServices.reportTelemetry(details);
;// CONCATENATED MODULE: ./web/viewer.js
const pdfjsVersion = "4.3.136";
const pdfjsBuild = "0cec64437";
RenderingStates: RenderingStates,
window.PDFViewerApplication = PDFViewerApplication;
window.PDFViewerApplicationConstants = AppConstants;
window.PDFViewerApplicationOptions = AppOptions;
function getViewerConfiguration() {
appContainer: document.body,
mainContainer: document.getElementById("viewerContainer"),
viewerContainer: document.getElementById("viewer"),
container: document.getElementById("toolbarViewer"),
numPages: document.getElementById("numPages"),
pageNumber: document.getElementById("pageNumber"),
scaleSelect: document.getElementById("scaleSelect"),
customScaleOption: document.getElementById("customScaleOption"),
previous: document.getElementById("previous"),
next: document.getElementById("next"),
zoomIn: document.getElementById("zoomIn"),
zoomOut: document.getElementById("zoomOut"),
viewFind: document.getElementById("viewFind"),
print: document.getElementById("print"),
editorFreeTextButton: document.getElementById("editorFreeText"),
editorFreeTextParamsToolbar: document.getElementById("editorFreeTextParamsToolbar"),
editorHighlightButton: document.getElementById("editorHighlight"),
editorHighlightParamsToolbar: document.getElementById("editorHighlightParamsToolbar"),
editorHighlightColorPicker: document.getElementById("editorHighlightColorPicker"),
editorInkButton: document.getElementById("editorInk"),
editorInkParamsToolbar: document.getElementById("editorInkParamsToolbar"),
editorStampButton: document.getElementById("editorStamp"),
editorStampParamsToolbar: document.getElementById("editorStampParamsToolbar"),
download: document.getElementById("download")
toolbar: document.getElementById("secondaryToolbar"),
toggleButton: document.getElementById("secondaryToolbarToggle"),
presentationModeButton: document.getElementById("presentationMode"),
openFileButton: document.getElementById("secondaryOpenFile"),
printButton: document.getElementById("secondaryPrint"),
downloadButton: document.getElementById("secondaryDownload"),
viewBookmarkButton: document.getElementById("viewBookmark"),
firstPageButton: document.getElementById("firstPage"),
lastPageButton: document.getElementById("lastPage"),
pageRotateCwButton: document.getElementById("pageRotateCw"),
pageRotateCcwButton: document.getElementById("pageRotateCcw"),
cursorSelectToolButton: document.getElementById("cursorSelectTool"),
cursorHandToolButton: document.getElementById("cursorHandTool"),
scrollPageButton: document.getElementById("scrollPage"),
scrollVerticalButton: document.getElementById("scrollVertical"),
scrollHorizontalButton: document.getElementById("scrollHorizontal"),
scrollWrappedButton: document.getElementById("scrollWrapped"),
spreadNoneButton: document.getElementById("spreadNone"),
spreadOddButton: document.getElementById("spreadOdd"),
spreadEvenButton: document.getElementById("spreadEven"),
documentPropertiesButton: document.getElementById("documentProperties")
outerContainer: document.getElementById("outerContainer"),
sidebarContainer: document.getElementById("sidebarContainer"),
toggleButton: document.getElementById("sidebarToggle"),
resizer: document.getElementById("sidebarResizer"),
thumbnailButton: document.getElementById("viewThumbnail"),
outlineButton: document.getElementById("viewOutline"),
attachmentsButton: document.getElementById("viewAttachments"),
layersButton: document.getElementById("viewLayers"),
thumbnailView: document.getElementById("thumbnailView"),
outlineView: document.getElementById("outlineView"),
attachmentsView: document.getElementById("attachmentsView"),
layersView: document.getElementById("layersView"),
currentOutlineItemButton: document.getElementById("currentOutlineItem")
bar: document.getElementById("findbar"),
toggleButton: document.getElementById("viewFind"),
findField: document.getElementById("findInput"),
highlightAllCheckbox: document.getElementById("findHighlightAll"),
caseSensitiveCheckbox: document.getElementById("findMatchCase"),
matchDiacriticsCheckbox: document.getElementById("findMatchDiacritics"),