Skip to content

Commit 94e27aa

Browse files
committed
Move to PDF.js v5.5.207
1 parent afddb40 commit 94e27aa

File tree

338 files changed

+190277
-355
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

338 files changed

+190277
-355
lines changed

README.md

Lines changed: 44 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ Supported in all [major browsers](https://caniuse.com/custom-elementsv1), and wo
3131

3232
[CodePen demo](https://codepen.io/redrobot753/pen/bNwVVvp)
3333

34-
[React integration CodePen](https://codepen.io/redrobot753/pen/xbEwNrO)
34+
[CodePen demo with React](https://codepen.io/redrobot753/pen/xbEwNrO)
3535

36-
[Vue integration CodePen](https://codepen.io/redrobot753/pen/JoRYqwN)
36+
[CodePen demo with Vue](https://codepen.io/redrobot753/pen/JoRYqwN)
3737

38-
[Various use cases](https://github.com/alekswebnet/pdfjs-viewer-element/tree/master/demo)
38+
[Usage examples](https://github.com/alekswebnet/pdfjs-viewer-element/tree/master/demo)
3939

4040
## Install
4141

@@ -62,7 +62,7 @@ import 'pdfjs-viewer-element'
6262

6363
```html
6464
<pdfjs-viewer-element
65-
src="/sample.pdf"
65+
src="https://alekswebnet.github.io/sample-pdf-with-images.pdf"
6666
style="height: 100dvh">
6767
</pdfjs-viewer-element>
6868
```
@@ -115,9 +115,10 @@ Use `viewer-css-theme` attribute to set light or dark theme manually:
115115
Runtime example:
116116

117117
```javascript
118-
const viewer = document.querySelector('pdfjs-viewer-element')
119-
viewer.setAttribute('viewer-css-theme', 'DARK')
120-
viewer.setAttribute('viewer-css-theme', 'AUTOMATIC')
118+
const viewerElement = document.querySelector('pdfjs-viewer-element')
119+
viewerElement.setAttribute('viewer-css-theme', 'DARK')
120+
viewerElement.setAttribute('viewer-css-theme', 'LIGHT')
121+
viewerElement.setAttribute('viewer-css-theme', 'AUTOMATIC')
121122
```
122123

123124
## Viewer custom styles
@@ -130,8 +131,8 @@ You can add your own CSS rules to the viewer application using `injectViewerStyl
130131
```
131132

132133
```javascript
133-
const viewer = document.querySelector('#viewer')
134-
viewer.injectViewerStyles(`
134+
const viewerElement = document.querySelector('#viewer')
135+
viewerElement.injectViewerStyles(`
135136
#toolbarViewerMiddle, #toolbarViewerRight { display: none; }
136137
`)
137138
```
@@ -161,89 +162,63 @@ Build your own theme with viewer custom variables and inject it via `injectViewe
161162
}
162163
```
163164

164-
## Methods
165+
## Methods and Public properties
165166

166-
`injectViewerStyles(styles: string)` - Adds custom CSS to the viewer now (when ready) and for future rebuilds.
167+
Methods:
167168

168-
## Programmatic access to PDF.js
169+
`injectViewerStyles(styles: string)` - Adds custom CSS to the viewer now (when ready) and for future rebuilds.
169170

170-
```html
171-
<pdfjs-viewer-element></pdfjs-viewer-element>
172-
```
171+
Example (`injectViewerStyles`):
173172

174173
```javascript
175-
// Open PDF file programmatically accessing the viewer application
176-
document.addEventListener('DOMContentLoaded', async () => {
177-
document.querySelector('pdfjs-viewer-element').addEventListener('initialized', (event) => {
178-
const { viewerApp, viewerOptions } = event.detail
179-
viewerApp.open({ data: pdfData })
180-
})
181-
})
182-
```
183-
184-
You can also react to source changes dynamically:
174+
const viewerElement = document.querySelector('pdfjs-viewer-element')
185175

186-
```javascript
187-
const viewer = document.querySelector('pdfjs-viewer-element')
188-
viewer.setAttribute('src', '/another-file.pdf')
176+
await viewerElement.injectViewerStyles(`
177+
#toolbarViewerRight { display: none; }
178+
#findbar { border-top: 2px solid #0200a8; }
179+
`)
189180
```
190181

191-
## Events
192-
193-
`initialized` - Fired after the PDF.js viewer is ready (after `PDFViewerApplication.initializedPromise` resolves). The event `detail` contains:
194-
195-
- `viewerApp` (`PDFViewerApplication`)
196-
- `viewerOptions` (`PDFViewerApplicationOptions`)
197-
198-
The event is emitted each time the internal viewer is rebuilt (for example after changing `locale`).
199-
200-
## Migration notes
182+
Public properties:
201183

202-
If you are upgrading from an older version:
184+
`initPromise: Promise<InitializationData>` - Resolves after internal viewer is completely loaded and initialized, returning `{ viewerApp }`, that gives a programmatic access to PDF.js viewer app (PDFViewerApplication).
203185

204-
- `viewer-extra-styles` and `viewer-extra-styles-urls` attributes are removed.
205-
- Use `injectViewerStyles(styles)` instead of style attributes.
206-
- Use the `initialized` event for `viewerApp` / `viewerOptions` access.
207-
- Runtime `src` updates are supported with `setAttribute('src', ...)`.
186+
Example (`initPromise`):
208187

209-
## Accessibility
188+
```javascript
189+
const viewerElement = document.querySelector('pdfjs-viewer-element')
190+
const { viewerApp } = await viewerElement.initPromise
210191

211-
Use `iframe-title` to add a title to the `iframe` element and improve accessibility.
192+
viewerApp.open({ url: '/sample.pdf' })
193+
```
212194

213-
## Known issues
195+
`iframe: PdfjsViewerElementIframe` - Public reference to the internal `iframe` element. Useful when you need direct access to `contentWindow`/`contentDocument`.
214196

215-
### The `.mjs` files support
197+
Example (`iframe`):
216198

217-
Since v4 PDF.js requires `.mjs` files support, make sure your server has it.
199+
```javascript
200+
const viewerElement = document.querySelector('pdfjs-viewer-element')
218201

219-
In case of `nginx` this may cause errors, see https://github.com/mozilla/pdf.js/issues/17296
202+
// Access iframe window directly when needed.
203+
const iframeWindow = viewerElement.iframe.contentWindow
220204

221-
Add `.mjs` files support for `nginx` example:
205+
// Read current location hash applied to the viewer.
206+
console.log(iframeWindow.location.hash)
222207

223-
```bash
224-
server {
225-
# ...
226-
227-
location / {
228-
root /usr/share/nginx/html;
229-
index index.html;
230-
231-
location ~* \.mjs$ {
232-
types {
233-
text/javascript mjs;
234-
}
235-
}
236-
}
237-
}
208+
// Inspect iframe document title.
209+
console.log(viewerElement.iframe.contentDocument.title)
238210
```
239211

240-
## Support via Ko-fi
212+
You can also react to source changes dynamically:
241213

242-
If you find `pdfjs-viewer-element` useful and want to support its development, consider making a donation via Ko-fi:
214+
```javascript
215+
const viewerElement = document.querySelector('pdfjs-viewer-element')
216+
viewer.setAttribute('src', '/another-file.pdf')
217+
```
243218

244-
[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/oleksandrshevchuk)
219+
## Accessibility
245220

246-
> ❤️ Your support helps with maintenance, bug fixes, and long-term improvements.
221+
Use `iframe-title` to add a title to the `iframe` element and improve accessibility.
247222

248223
## License
249224
[MIT](http://opensource.org/licenses/MIT)

demo/extra-styles-urls.html

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,10 @@
2222

2323
<script>
2424
document.addEventListener('DOMContentLoaded', async () => {
25-
// Create a very simple toolbar by hiding the middle and right toolbar parts.
26-
document.querySelector('pdfjs-viewer-element').injectViewerStyles(`
27-
:root {
28-
--main-color: #5755FE;
29-
--toolbar-icon-bg-color: #0200a8;
30-
--field-color: #5755FE;
31-
--separator-color: #5755FE;
32-
--toolbar-border-color: #5755FE;
33-
--field-border-color: #5755FE;
34-
--toolbar-bg-color: rgba(139, 147, 255, .1);
35-
--body-bg-color: rgba(255, 247, 252, .7);
36-
--button-hover-color: rgba(139, 147, 255, .1);
37-
--toolbar-icon-hover-bg-color: #0200a8;
38-
--toggled-btn-color: #0200a8;
39-
--toggled-btn-bg-color: rgba(139, 147, 255, .1);
40-
--toggled-hover-active-btn-color: #5755FE;
41-
--doorhanger-hover-bg-color: rgba(139, 147, 255, .1);
42-
--doorhanger-hover-color: #0200a8;
43-
--dropdown-btn-bg-color: rgba(139, 147, 255, .1);
44-
}
45-
`)
25+
// Load some extra styles from an external CSS file and inject them into the viewer.
26+
const styles = await fetch('./viewer-custom-theme.css').then((res) => res.text())
27+
const viewerElement = document.querySelector('pdfjs-viewer-element')
28+
viewerElement.injectViewerStyles(styles)
4629
})
4730
</script>
4831
</body>

demo/extra-styles.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222

2323
<script>
2424
document.addEventListener('DOMContentLoaded', async () => {
25+
const viewerElement = document.querySelector('pdfjs-viewer-element')
26+
await viewerElement.initPromise
2527
// Create a very simple toolbar by hiding the middle and right toolbar parts.
26-
document.querySelector('pdfjs-viewer-element').injectViewerStyles(`
28+
viewerElement.injectViewerStyles(`
2729
#toolbarViewerMiddle, #toolbarViewerRight { display: none; }
2830
`)
2931
})

demo/iframe-access.html

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+
<title>pdfjs-viewer-element | Iframe access demo</title>
7+
<script type="module" src="../dist/pdfjs-viewer-element.js"></script>
8+
<style>
9+
body {
10+
margin: 0;
11+
padding: 0;
12+
}
13+
</style>
14+
</head>
15+
16+
<body>
17+
<pdfjs-viewer-element
18+
src="/public/sample-pdf-with-images.pdf"
19+
style="height: 100dvh">
20+
</pdfjs-viewer-element>
21+
</body>
22+
23+
<script>
24+
document.addEventListener('DOMContentLoaded', async () => {
25+
const viewerElement = document.querySelector('pdfjs-viewer-element')
26+
await viewerElement.initPromise
27+
// Access iframe window directly when needed.
28+
const iframeWindow = viewerElement.iframe.contentWindow
29+
30+
// Read current location hash applied to the viewer.
31+
console.log(iframeWindow.location.hash)
32+
33+
// Inspect iframe document title.
34+
console.log(viewerElement.iframe.contentDocument.title)
35+
})
36+
</script>
37+
</html>

demo/opened-findbar.html

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,14 @@
2222

2323
<script>
2424
document.addEventListener('DOMContentLoaded', async () => {
25-
document.querySelector('#viewer').addEventListener('initialized', (event) => {
26-
const { viewerApp } = event.detail
25+
const viewerElement = document.querySelector('#viewer')
26+
const { viewerApp } = await viewerElement.initPromise
2727
viewerApp.eventBus.on('pagesloaded', () => {
2828
viewerApp.findBar.open()
2929
viewerApp.findBar.findField.value = 'and'
3030
viewerApp.findBar.highlightAll.checked = true
3131
viewerApp.findBar.findNextButton.click()
3232
})
33-
})
3433
})
3534
</script>
3635
</body>

demo/pdf-data-load.html

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<head>
44
<meta charset="UTF-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6-
<title>pdfjs-viewer-element | Basic demo</title>
6+
<title>pdfjs-viewer-element | PDF data load demo</title>
77
<script type="module" src="../dist/pdfjs-viewer-element.js"></script>
88
<style>
99
body {
@@ -36,10 +36,9 @@
3636

3737

3838
document.addEventListener('DOMContentLoaded', async () => {
39-
document.querySelector('pdfjs-viewer-element').addEventListener('initialized', (event) => {
40-
const { viewerApp } = event.detail
41-
viewerApp.open({ data: pdfData })
42-
})
39+
const viewerElement = document.querySelector('pdfjs-viewer-element')
40+
const { viewerApp } = await viewerElement.initPromise
41+
viewerApp.open({ data: pdfData })
4342
})
4443
</script>
4544
</body>

index.js

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,14 @@ const pdfData = Uint8Array.from(atob(
1414
'dCAxIDAgUgo+PgpzdGFydHhyZWYKNDkyCiUlRU9G'), (m) => m.codePointAt(0));
1515

1616
document.addEventListener('DOMContentLoaded', async () => {
17-
document.querySelector('#base-viewer').addEventListener('initialized', (event) => {
18-
const { viewerApp } = event.detail
19-
viewerApp.open({ data: pdfData })
20-
})
17+
const viewerElement = document.querySelector('#base-viewer')
18+
const { viewerApp } = await viewerElement.initPromise
19+
viewerApp.open({ data: pdfData })
2120
})
2221

2322
const toggleDownloadButton = async (viewerElement) => {
24-
viewerElement.addEventListener('initialized', (event) => {
25-
const { viewerApp } = event.detail
26-
viewerApp.appConfig.toolbar.download.classList.toggle('hidden')
27-
})
23+
const { viewerApp } = await viewerElement.initPromise
24+
viewerApp.appConfig.toolbar.download.classList.toggle('hidden')
2825
}
2926

3027
window.toggleDownloadButton = toggleDownloadButton

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "pdfjs-viewer-element",
3-
"version": "3.1.0",
3+
"version": "3.1.1",
44
"license": "MIT",
55
"author": {
66
"name": "Oleksandr Shevchuk",

src/build/pdf.min.mjs

Lines changed: 0 additions & 21 deletions
This file was deleted.

0 commit comments

Comments
 (0)