From d4714e2b01ae8a1d4c4422239a8da4e5fe5a8990 Mon Sep 17 00:00:00 2001 From: Anton Ramanovich <90370279+rmnvch@users.noreply.github.com> Date: Mon, 9 Feb 2026 11:14:38 +0100 Subject: [PATCH] [MNT-25541] PDFs containing JP2 images (JPEG 2000) cannot be displayed in ADW viewer (#11618) * [MNT-25541]: adds wasmUrl to default options * [MNT-25541]: updates UTs * [MNT-25541]: naming change --- .../viewer/components/mock/pdfjs-lib.mock.ts | 41 +++++++++++++------ .../pdf-viewer/pdf-viewer.component.spec.ts | 19 ++++++++- .../pdf-viewer/pdf-viewer.component.ts | 3 +- 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/lib/core/src/lib/viewer/components/mock/pdfjs-lib.mock.ts b/lib/core/src/lib/viewer/components/mock/pdfjs-lib.mock.ts index 8f4c90cd2f..6c359ebeb3 100644 --- a/lib/core/src/lib/viewer/components/mock/pdfjs-lib.mock.ts +++ b/lib/core/src/lib/viewer/components/mock/pdfjs-lib.mock.ts @@ -17,19 +17,34 @@ export default { GlobalWorkerOptions: {}, - getDocument() { - return { - loadingTask: () => ({ - destroy: () => Promise.resolve() - }), - promise: new Promise((resolve) => { - resolve({ - numPages: 6, - getPage: () => 'fakePage' - }); - }) - }; - }, + getDocument: jasmine.createSpy('getDocument').and.callFake(() => ({ + loadingTask: () => ({ + destroy: () => Promise.resolve() + }), + promise: new Promise((resolve) => { + resolve({ + numPages: 6, + getPage: () => + Promise.resolve({ + getAnnotations: () => [ + { + subtype: 'Text', + name: 'NoIcon', + id: 'R13', + titleObj: { + str: 'Annotation title' + }, + contentsObj: { + str: 'Annotation contents' + }, + modificationDate: "D:20260202104106Z00'00", + popupRef: 'R1' + } + ] + }) + }); + }) + })), PasswordResponses: { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 diff --git a/lib/core/src/lib/viewer/components/pdf-viewer/pdf-viewer.component.spec.ts b/lib/core/src/lib/viewer/components/pdf-viewer/pdf-viewer.component.spec.ts index 3f30d366ca..43c691dbc5 100644 --- a/lib/core/src/lib/viewer/components/pdf-viewer/pdf-viewer.component.spec.ts +++ b/lib/core/src/lib/viewer/components/pdf-viewer/pdf-viewer.component.spec.ts @@ -16,7 +16,7 @@ */ import { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes'; -import { Component, SimpleChange, ViewChild } from '@angular/core'; +import { Component, SimpleChange, SimpleChanges, ViewChild } from '@angular/core'; import { ComponentFixture, fakeAsync, flush, TestBed, tick } from '@angular/core/testing'; import { MatDialog } from '@angular/material/dialog'; import { By } from '@angular/platform-browser'; @@ -326,7 +326,7 @@ describe('Test PdfViewer component', () => { () => ({ afterClosed: () => of('') - } as any) + }) as any ); spyOn(componentUrlTestPasswordComponent.pdfViewerComponent.close, 'emit'); @@ -510,6 +510,21 @@ describe('Test PdfViewer - User interaction', () => { expect(component.displayPage).toBe(2); }); + it('should configure PDF.js with the correct wasmUrl', () => { + const changes: SimpleChanges = { + blobFile: new SimpleChange(null, component.blobFile, true) + }; + + component.ngOnChanges(changes); + + const getDocumentSpy = pdfjsLibraryMock.getDocument; + + expect(getDocumentSpy).toHaveBeenCalled(); + const loadingArgs = getDocumentSpy.calls.mostRecent().args[0]; + + expect(loadingArgs.wasmUrl).toBe('./wasm/'); + }); + describe('Zoom', () => { it('should zoom in increment the scale value', () => { const zoomBefore = component.pdfViewer.currentScaleValue; diff --git a/lib/core/src/lib/viewer/components/pdf-viewer/pdf-viewer.component.ts b/lib/core/src/lib/viewer/components/pdf-viewer/pdf-viewer.component.ts index 8d27698e64..0b3290a122 100644 --- a/lib/core/src/lib/viewer/components/pdf-viewer/pdf-viewer.component.ts +++ b/lib/core/src/lib/viewer/components/pdf-viewer/pdf-viewer.component.ts @@ -147,7 +147,8 @@ export class PdfViewerComponent implements OnChanges, OnDestroy { disableAutoFetch: true, disableStream: true, cMapUrl: './cmaps/', - cMapPacked: true + cMapPacked: true, + wasmUrl: './wasm/' }; private pdfjsWorkerDestroy$ = new Subject();