use-pdf
TypeScript icon, indicating that this package has built-in type declarations

0.1.2 • Public • Published

use-pdf

This is a simple React Hook around the amazing @react-pdf/renderer.

npm version

Installation

$ npm i use-pdf

or

$ yarn add use-pdf

Usage

@react-pdf/renderer is great, you can render a PDF into an iframe using <PDFViewer/>, but to have full control over loading and error states requires that you use the BlobProvider component and a render prop like some sort of barbarian.

<BlobProvider document={document}>
  {({ loading, url, error }) => {
    if (loading) {
      return <div>Rendering PDF...</div>;
    }

    if (error) {
      return <div>Error rendering PDF</div>;
    }

    return <iframe title="PDF" src={url} />;
  }}
</BlobProvider>

But with use-pdf, you can use a React Hook like a civilized human being.

const { loading, error, url } = usePDF(document);

if (loading) {
  return <div>Rendering PDF...</div>;
}

if (error) {
  return <div>Error rendering PDF</div>;
}

return <iframe title="PDF" src={url} />;

Parameters

Here are the parameters that you can use.

Parameter Description
document A PDFDocument. See react-pdf documentation for more information.

Note: Be sure to memoize the document sent to usePDF or it will endlessly rerender.

Return

This hook returns:

Parameter Description
loading A boolean that is set to true is the PDF is busy rendering.
error An Error object if the PDF rendering failed.
url A string that represents a url suitable to pass to an iframe, a new browser tab, or whatever. This is a blob url that will be revoked when the component containing the usePDF hook is unmounted. Will be null of loading=true or there was an error.
blob A Blob that represents the PDF or null. Will be set if url is set.

Example

See a working example in the /example folder. To run the example execute the following:

cd example
npm i
npm start

PDFViewer

The example above shows a Hook alternative for <PDFViewer/> and supports loading and error fallbacks (which PDFViewer does not).

PDFDownloadLink

If you're looking for a hooks replacement for <PDFDownloadLink/>, use the example code, but replace renderig the iframe with the following:

return (
  <a download="somefilename.pdf" href={results.url}>
    Download PDF
  </a>
);

License

MIT Licensed

Package Sidebar

Install

npm i use-pdf

Weekly Downloads

10

Version

0.1.2

License

MIT

Unpacked Size

205 kB

Total Files

12

Last publish

Collaborators

  • donavon