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

1.0.0 • Public • Published

pdf2mp4

Module that converts pdf files to MP4 in high resolution. Can be used for fast reading applications.

Required system dependencies:

multithreaded!

Installation

npm install pdf2mp4

Prerequisites

  • git
  • npm & node
  • ImageMagick & gm
  • ffmpeg

Setup

git clone https://github.com/irgipaulius/pdf2mp4

cd pdf2mp4

npm install

GraphicsMagick

Next, you must install ImageMagick and gm on your system:

FFMPEG

  • OSX
    • brew install ffmpeg
  • Windows
  • Linux
    • sudo apt install ffmpeg
  • FreeBSD
    • pkg install ffmpeg

Usage

import { pdf2mp4, createEventLogger } from "pdf2mp4";

const e = createEventLogger(); // optional, but great for debugging

await pdf2mp4(
  {
    fileName: "sample.pdf",
    secondsPerFrame: 2.15,
    uploadDir: "./",
    outputDir: "./",
  },
  e
);

Properties

Property type default value description
fileName mandatory string name of the pdf file.
secondsPerFrame optional number either this or framesPerSecond must be set.
framesPerSecond optional number either this or secondsPerFrame must be set.
maxConcurrency optional number 8 max concurrent frames to process at the same time. Directly affects performance and stability.
uploadDir optional string "pdf2mp4/upload" path to directory where pdf files are located
tempDir optional string "pdf2mp4/generated/temp" path to directory where temporary files will be generated
outputDir optional string "pdf2mp4/generated/video" path to directory where generated mp4 file is placed

Events (optional)

For example, on front-end you can implement a full-fledged processing loading animation, which is accurate to the actual process:

const e = new EventEmitter();

e.on("start", (message, filename) => {
  console.log(message); // Converting sample.pdf...
});

e.on("benchmark_raster", (message, benchmarkSeconds) => {
  console.log(message); // `Finished rasterization in 6.9420 seconds.`
});

e.on("benchmark_render", (message, benchmarkSeconds) => {
  console.log(message); // `Finished render in 6.9420 seconds.`
});

e.on("progress_raster", (message, progress) => {
  console.log(message); // Rasterizing... 69/100
  setProgress(progress / 100); // great to use with states for react
});

e.on("progress_render", (message, progress) => {
  console.log(message); // Rendering... 69/100
  setProgress(progress / 100); // great to use with states for react
});

e.on("end", (message, videoFilename, videoDestination) => {
  console.log(message); // Finished converting sample.pdf to /usr/Johnny/.../pdf2mp4/Am83rH3ar0.mp4.
  resolve(videoDestination); // final location of the mp4 file.
});

// no need to await, result will be in the 'end' event
pdf2mp4("sample.pdf", { framesPerSecond: 0.33 }, e);

Notes

This is my first ever published npm package. Submit issues to the github repository for any extra features or questions.

There is also a fully developed website that uses this package at https://www.hyperreader.eu, and it's source code is here.

Package Sidebar

Install

npm i pdf2mp4

Weekly Downloads

0

Version

1.0.0

License

MIT

Unpacked Size

77.2 kB

Total Files

38

Last publish

Collaborators

  • irgipaulius