logo dile-components dile-components

dile-pdf-viewer

Web component for viewing PDF documents with zoom controls, page navigation, and download functionality. Built with PDF.js, it provides an accessible and responsive PDF viewing experience.

Installation

npm i @dile/pdf-viewer

Usage

Import the component:

import '@dile/pdf-viewer/pdf-viewer.js';

Use the component:

<dile-pdf-viewer 
  src="document.pdf"
  filename="document.pdf"
></dile-pdf-viewer>

Properties

Methods

None. Use property bindings to control the viewer.

Events

Keyboard Navigation

Accessibility Features

CSS Custom Properties

You can customize the viewer using these CSS Custom Properties. The component uses a cascade of fallbacks to design system variables.

Custom property Description Fallback chain
--dile-pdf-viewer-toolbar-background Toolbar background color --dile-gray-very-light-color#f4f4f4
--dile-pdf-viewer-toolbar-border-radius Toolbar border radius 0
--dile-pdf-viewer-border-color Border color for toolbar and canvas #ddd
--dile-pdf-viewer-color Page info text color --dile-on-gray-very-light-color#303030
--dile-pdf-viewer-button-color Button text/icon color #333
--dile-pdf-viewer-icon-color Icon color --dile-on-gray-very-light-color#303030
--dile-pdf-viewer-canvas-background PDF canvas background color #525659

Important: PDF Accessibility Requirements

The src property accepts a URL to the PDF file. The PDF resource must be:

External PDFs without proper CORS headers (like many public PDF services) will fail to load due to browser security restrictions. For best results, store PDF files in your project's assets directory or configure your server to allow CORS requests.

dile-pdf-viewer demos

Basic PDF Viewer

<script type="module">
  import '@dile/pdf-viewer/pdf-viewer.js';
</script>
<dile-pdf-viewer 
  src="/pdf/crud-docs.pdf"
  filename="crud-docs.pdf">
</dile-pdf-viewer>

Styled PDF Viewer

<style>
  .custom-styled {
    --dile-pdf-viewer-toolbar-background: #2c3e50;
    --dile-pdf-viewer-toolbar-border-radius: 0.5rem;
    --dile-pdf-viewer-border-color: #34495e;
    --dile-pdf-viewer-color: #ecf0f1;
    --dile-pdf-viewer-button-color: #ecf0f1;
    --dile-pdf-viewer-icon-color: #3498db;
    --dile-pdf-viewer-canvas-background: #1c2833;
  }
</style>
<dile-pdf-viewer 
  class="custom-styled"
  src="/pdf/spinner-icon-docs.pdf"
  filename="spinner-icon-docs.pdf">
</dile-pdf-viewer>

Setting Initial Page

<dile-pdf-viewer 
  src="/pdf/crud-docs.pdf"
  filename="crud-docs.pdf"
  page="2">
</dile-pdf-viewer>

Language Support

<dile-pdf-viewer 
  src="/pdf/spinner-icon-docs.pdf"
  filename="spinner-icon-docs.pdf"
  language="es">
</dile-pdf-viewer>

With Event Listeners

<script type="module">
  import '@dile/pdf-viewer/pdf-viewer.js';
  
  document.addEventListener('DOMContentLoaded', function() {
    const viewer = document.querySelector('#fdf-events');
    
    viewer.addEventListener('dile-pdf-viewer-opened', (e) => {
      console.log(`PDF loaded with ${e.detail.numPages} pages`);
    });
    
    viewer.addEventListener('dile-pdf-viewer-page-changed', (e) => {
      console.log(`Now viewing page ${e.detail.page} of ${e.detail.numPages}`);
    });
    
    viewer.addEventListener('dile-pdf-viewer-error', (e) => {
      console.error('Failed to load PDF:', e.detail.error);
    });
  });
</script>
<dile-pdf-viewer 
  id="fdf-events"
  src="/pdf/crud-docs.pdf"
  filename="crud-docs.pdf">
</dile-pdf-viewer>