Easily generate full-featured PDF files from HTML and other web formats
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
test
.gitignore
LICENSE
README.md
index.js
package-lock.json
package.json

README.md

pdf-from

Easily generate full-featured PDF files from HTML and other web formats

NPM Version Node Requirement License Number of Downloads

This package is for rendering PDF files on the server, not on the client. If any resources are not accessible to the server, then they will not be included in the resulting PDF.

Installation

To use pdf-from in your Node app:

npm

npm install --save pdf-from

yarn

yarn add pdf-from

Usage

PDF from Html

Basic Example

const pdfFrom = require("pdf-from");

const htmlString = `
<html>
    <body>
        <h1>Hello PDF</h1>
        <p>This is a PDF</p>
    </body>
</html>
`
await pdfFrom.html(htmlString);

Express Example

This example renders a template, converts the resulting HTML to a PDF, and then sends the PDF back to the browser.

const pdfFrom = require("pdf-from");

const template = "my_pug_template";
res.render(template, structuredData, (err, htmlString) => {
    const applicationPdf = await pdfFrom.html(htmlString);
    if (applicationPdf && Buffer.isBuffer(applicationPdf)) {
        res.type("application/pdf");
        res.send(applicationPdf);
    } else {
        res.status(404).send("PDF not found");
    }
});

Example of Changing PDF Options

const pdfFrom = require("pdf-from");

const htmlString = `
<html>
    <body>
        <h1>Hello PDF</h1>
        <p>This is a PDF</p>
    </body>
</html>
`
await pdfFrom.html(htmlString, {
    displayHeaderFooter: true,
    headerTemplate:
        "<span class='title'></span> - <span class='date'></span>"
    footerTemplate:
        "<span class='pageNumber'></span> of <span class='totalPages'></span>",
    format: "Legal",
    landscape: true,
    margin: {
        top: '100px',
        right: '20px',
        bottom: '10px',
        left: '20px'
    },
    scale: 1.25
});

Available Options

  • wrapOutput normally a buffer is returned with the raw PDF data, this switch causes the PDF data to be wrapped in an object: { pdf: [Buffer] }
  • useScreenMedia normally the print styles will be used if they are available, this switch causes any print styles to be ignored

The package also respects all of the Puppeteer PDF rendering options.

Caveats

Docker

The default [node Docker image](node docker image yarn) does not come bundled with all the libraries required by this package, they have to be added manually. The following needs to be added to your Dockerfile

# Install Chromium dependencies
RUN apt-get update && \
    apt-get install -yq \
        ca-certificates \
        fonts-liberation \
        gconf-service \
        libappindicator1 \
        libappindicator3-1 \
        libasound2 \
        libatk1.0-0 \
        libc6 \
        libcairo2 \
        libcups2 \
        libdbus-1-3 \
        libexpat1 \
        libfontconfig1 \
        libgcc1 \
        libgconf-2-4 \
        libgdk-pixbuf2.0-0 \
        libglib2.0-0 \
        libgtk-3-0 \
        libnspr4 \
        libnss3 \
        libpango-1.0-0 \
        libpangocairo-1.0-0 \
        libstdc++6 \
        libx11-6 \
        libx11-xcb1 \
        libxcb1 \
        libxcomposite1 \
        libxcursor1 \
        libxdamage1 \
        libxext6 \
        libxfixes3 \
        libxi6 \
        libxrandr2 \
        libxrender1 \
        libxss1 \
        libxtst6 \
        lsb-release \
        xdg-utils wget