light-markdown-pdf

Lightweight conversion scheme from markdown to pdf.

Usage no npm install needed!

<script type="module">
  import lightMarkdownPdf from 'https://cdn.skypack.dev/light-markdown-pdf';
</script>

README

light-markdown-pdf

Lightweight conversion scheme from markdown to pdf.

Warn

Because the Chinese font file is too large, npm cannot upload it.
Please download the font file from github and use a custom configuration.

Intro

No Puppeteer or PhantomJS dependency.
Use CommonMark to convert markdown files to abstract syntax tree (AST), and then use pdfkit to convert to pdf files.

Unsupported

Features outside the specification are not supported.

e.g.

Supported

Features inside the specification are supported.

e.g.

  • document (bookmark)
  • text
  • linebreak
  • softbreak
  • emph
  • strong
  • link (http/anchor)
  • thematic_break
  • heading (bookmark)
  • paragraph
  • image (http/local png/jpg)
  • code
  • code_block (syntax highlighter)
  • block_quote (nested)
  • list (ordered/unordered/nested)
  • item
  • html_inline (like code)
  • html_block (like code_block)

Issues

  1. Sometimes the anchor will fail for unknown reasons.

Usage

Install

npm install --save light-markdown-pdf

CLI

lmp --help
Usage: lmp [options]

Lightweight conversion scheme from markdown to pdf

Options:
  -V, --version             output the version number
  -s, --sourceDir <dir>     input *.md file directory
  -t, --targetFile <file>   output *.pdf file path
  -c, --configFile <file>   custom config file path
  --verbose                 output all log
  --coverTitle <title>      pdf cover title
  --coverAuthor <author>    pdf cover author
  --coverVersion <version>  pdf cover version
  --fontName <name>         default font name
  --fontFile <file>         default font file path
  --ignoreDirBookmark       don't use directory name as bookmark
  --ignoreFileBookmark      don't use file name as bookmark
  -h, --help                display help for command

Custom

lmp --sourceDir . --targetFile $npm_package_name.pdf --fontName PingFang --fontFile ./src/asset/PingFang-SC-Regular.ttf --coverTitle $npm_package_name --coverAuthor $npm_package_author_name --coverVersion $npm_package_version --ignoreFileBookmark

or

lmp --configFile ./src/config.js
// ./src/config.js

const path = require('path');
const pkg = require('../package.json');

module.exports = {
  sourceDir: process.cwd(),
  targetFile: path.join(process.cwd(), `${pkg.name}.pdf`),
  font: {
    defaultFontName: 'PingFang',
    registerFont: {
      PingFang: path.join(process.cwd(), 'src/asset/PingFang-SC-Regular.ttf'),
    },
  },
  cover: {
    title: pkg.name,
    author: pkg.author,
    version: pkg.version,
  },
}