Skip to content

Commit ddc52b6

Browse files
committed
feat(doc-viewer): allow self hosted pdfjs worker file
1 parent 2d86021 commit ddc52b6

File tree

6 files changed

+23
-9
lines changed

6 files changed

+23
-9
lines changed

packages/pluggableWidgets/document-viewer-web/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66

77
## [Unreleased]
88

9+
### Changed
10+
11+
- We added advance config for user to allow self-hosted pdfjs worker file.
12+
913
## [1.1.0] - 2025-09-11
1014

1115
### Changed

packages/pluggableWidgets/document-viewer-web/components/PDFViewer.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createElement, Fragment, useCallback, useEffect, useState } from "react";
1+
import { createElement, Fragment, useCallback, useEffect, useMemo, useState } from "react";
22
import { Document, Page, pdfjs } from "react-pdf";
33
import "react-pdf/dist/Page/AnnotationLayer.css";
44
import "react-pdf/dist/Page/TextLayer.css";
@@ -7,18 +7,20 @@ import { useZoomScale } from "../utils/useZoomScale";
77
import BaseViewer from "./BaseViewer";
88
import { DocRendererElement, DocumentRendererProps, DocumentStatus } from "./documentRenderer";
99

10-
pdfjs.GlobalWorkerOptions.workerSrc = new URL(
11-
"/widgets/com/mendix/shared/pdfjs/pdf.worker.mjs",
12-
import.meta.url
13-
).toString();
14-
1510
const options = {
1611
cMapUrl: "/widgets/com/mendix/shared/pdfjs/cmaps/",
1712
standardFontDataUrl: "/widgets/com/mendix/shared/pdfjs/standard_fonts"
1813
};
1914

2015
const PDFViewer: DocRendererElement = (props: DocumentRendererProps) => {
21-
const { file, setDocumentStatus } = props;
16+
const { file, setDocumentStatus, pdfjsWorkerUrl } = props;
17+
pdfjs.GlobalWorkerOptions.workerSrc = useMemo(() => {
18+
if (pdfjsWorkerUrl?.status === "available" && pdfjsWorkerUrl?.value) {
19+
return pdfjsWorkerUrl.value;
20+
}
21+
return `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;
22+
}, [pdfjsWorkerUrl]);
23+
2224
const [numberOfPages, setNumberOfPages] = useState<number>(1);
2325
const { zoomLevel, zoomIn, zoomOut, reset } = useZoomScale();
2426
const [currentPage, setCurrentPage] = useState<number>(1);

packages/pluggableWidgets/document-viewer-web/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@mendix/document-viewer-web",
33
"widgetName": "DocumentViewer",
4-
"version": "1.1.0",
4+
"version": "1.1.1",
55
"description": "View PDF and other document types",
66
"copyright": "© Mendix Technology BV 2025. All rights reserved.",
77
"license": "Apache-2.0",

packages/pluggableWidgets/document-viewer-web/src/DocumentViewer.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@
8181
</property>
8282
</propertyGroup>
8383
</propertyGroup>
84+
<propertyGroup caption="Advanced">
85+
<property key="pdfjsWorkerUrl" type="textTemplate" required="false">
86+
<caption>PDF.js worker URL</caption>
87+
<description>URL to the PDF.js worker script. Change this if you want to host the script yourself. Leave empty to use the default URL.</description>
88+
</property>
89+
</propertyGroup>
8490
<propertyGroup caption="Common">
8591
<systemProperty key="Name" />
8692
<systemProperty key="TabIndex" />

packages/pluggableWidgets/document-viewer-web/src/package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8" ?>
22
<package xmlns="http://www.mendix.com/package/1.0/">
3-
<clientModule name="Document Viewer" version="1.1.0" xmlns="http://www.mendix.com/clientModule/1.0/">
3+
<clientModule name="Document Viewer" version="1.1.1" xmlns="http://www.mendix.com/clientModule/1.0/">
44
<widgetFiles>
55
<widgetFile path="DocumentViewer.xml" />
66
</widgetFiles>

packages/pluggableWidgets/document-viewer-web/typings/DocumentViewerProps.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export interface DocumentViewerContainerProps {
3131
maxHeightUnit: MaxHeightUnitEnum;
3232
maxHeight: number;
3333
overflowY: OverflowYEnum;
34+
pdfjsWorkerUrl?: DynamicValue<string>;
3435
}
3536

3637
export interface DocumentViewerPreviewProps {
@@ -54,4 +55,5 @@ export interface DocumentViewerPreviewProps {
5455
maxHeightUnit: MaxHeightUnitEnum;
5556
maxHeight: number | null;
5657
overflowY: OverflowYEnum;
58+
pdfjsWorkerUrl: string;
5759
}

0 commit comments

Comments
 (0)