Git Product home page Git Product logo

react-pdfjs-multi's Introduction

react-pdfjs-multi

Build Status David Dependencies Coverage Status

React wrapper for pdfjs with multiple file support.

This library uses pdf.js.

For a preview of the current development visit github pages.

What does in development mean:

  1. MINOR versions represent breaking changes
  2. PATCH versions represent fixes and features
  3. There are no deprecation warnings between releases

Installation & Usage

yarn add react-pdfjs-multi

or

npm i react-pdfjs-multi

Example Usage MultiViewer:

import React from 'react';
import { PdfMultiViewer } from 'react-pdfjs-multi';
import 'react-pdfjs-multi/dist/react-pdfjs-multi.css';

const MultiViewerExample = () => {
  const pdfFiles = [
    'pdfs/test-pdf-a.pdf',
    {
      title:
        'Trace-based Just-in-Time Type Specialization for DynamicLanguages',
      source: 'pdfs/compressed.tracemonkey-pldi-09.pdf',
    },
    'pdfs/test-pdf-b.pdf',
    'pdfs/test-pdf-c.pdf',
  ];

  return (
    <PdfMultiViewer
      pdfs={pdfFiles}
      i18nData={{
        download: 'Herunterladen',
        scaleDown: 'Verkleinern',
        scaleUp: 'Vergrößern',
        originalSize: 'Originalgröße',
        pages: 'Seiten',
        zoom: 'Automatischer Zoom',
      }}
    />
  );
};

export default MultiViewerExample;

Example Usage Renderer (Typescript)

import React, { FC, useState, useEffect } from 'react';
import { PdfRenderer, PdfjsLib, PDFDocumentProxy } from 'react-pdfjs-multi';

PdfjsLib.GlobalWorkerOptions.workerSrc =
  '//cdnjs.cloudflare.com/ajax/libs/pdf.js/2.5.207/pdf.worker.js';

const RendererExample: FC = () => {
  const [pdfDoc, setPdfDoc] = useState<PDFDocumentProxy>();

  useEffect(() => {
    const getPdfDoc = async () => {
      const doc = await PdfjsLib.getDocument({
        url: 'pdfs/compressed.tracemonkey-pldi-09.pdf',
      }).promise;

      setPdfDoc(doc);
    };

    getPdfDoc();
  }, []);

  if (!pdfDoc) return null;

  return <PdfRenderer pdfDoc={pdfDoc} downloadBtn={false} />;
};

export default RendererExample;

PdfMultiViewer

The MultiViewer allows you to pass an array of source strings or an object definition and it then loads all PDF's async and shows the renderer as soon as the first PDF is loaded.

Props:

Name Required Default Type Description
pdfs true {array} An array of strings or objects
autoZoom true {boolean} enables/disables autoZoom on component mount and window resize
controls true {boolean} enables/disables controls to e.g. change renderer zoom
i18nData {}* {I18nData} An object of translated strings, default language is en
startIndex 0 {number} first pdf to load using array index

i18n

To be able to use different i18n libraries eg. i18next or react-intl you can pass an i18n object with translated strings to the component.

*defaults:

{
  // Viewer
  pages: 'Pages',
  // Renderer
  zoom: 'Automatic zoom',
  originalSize: 'Original size',
  rotateLeft: 'Rotate left',
  rotateRight: 'Rotate right',
  scaleUp: 'Scale up',
  scaleDown: 'Scale down',
  download: 'Download',
}

PdfRenderer

If you like to implement your own custom multi renderer logic you can use the PdfRenderer component. For an implementation example see Example.

Props:

Name Required Default Type Description
pdfDoc true {PDFDocumentProxy} A proxy of the pdf document to display
autoZoom true {boolean} enables/disables autoZoom on component mount and window resize
controls true {boolean} enables/disables controls to e.g. change renderer zoom
downloadBtn true {boolean} enables/disables download button
i18nData {}* {I18nDataRenderer} An object of translated strings, default language is en
zoom null {number} Initial Zoom
rotation null {number} Initial Rotation
scrollTop null {number} Initial ScrollTop
scrollLeft null {number} Initial ScrollLeft
activeIndex null {number} Is required whenn the pdfChangeHook is used
pdfChangeHook null {func} Callback function which gets a position object

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.