Skip to content

Latest commit

 

History

History
108 lines (86 loc) · 1.62 KB

README.md

File metadata and controls

108 lines (86 loc) · 1.62 KB

pdfactory-core

  • Generate pdf documents from html files.
  • Generate dynamic pdf documents using ejs files as templates.

Supports

  • html
  • ejs

Installation

yarn add pdfactory-code

Example using ejs and express

Directory structure

/main.js
/templates
  /partials
    /page1.ejs
  /document.ejs

document.ejs

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
</head>

<body>
  <div>
  <%- include('./partials/page1.ejs'); -%>
  </div>
</body>

</html>

page1.ejs

<div>
  <%= title %>
</div>

main.js

const express = require("express");
const path = require("path");
const { pdfactory } = require("pdfactory-core");

const templatesDir = path.join(__dirname, "templates");
const partialsDir = path.join(__dirname, "templates", "partials");

const DEFAULT_CONFIG = {
  templatesDir: [templatesDir, partialsDir],
  ejsOptions: {
    views: [templatesDir], // For relative include paths  
  },
};

const init = async () => {
  const pdfactoryHandler = await pdfactory(DEFAULT_CONFIG);

  const app = express();

  app.use(express.json());

  const requestHandler = async (req, res) => {
    let pdf = null;

     try {
      pdf = await pdfactoryHandler(req.body)
    } catch (e) {
      res.status(400).send(e)
      return
    }
    
    res.set({
      "Content-Type": "application/pdf",
      "Content-Length": pdf.length,
    });

    res.send(pdf);
  };

  app.post("/", requestHandler);

  app.listen(3000);

  return app;
};

init();

Example request

POST https://localhost:3000
{
    "document": "document",
    "data": {
        "title": "pdfactory pdf"
    }
}