# @e8johan/vuepress-plugin-pdf-export

> Vuepress plugin for exporting site as PDF

Latest version **1.4.0** (published 2022-05-20) · MIT license · 0 weekly downloads

## Install

```sh
npm install @e8johan/vuepress-plugin-pdf-export
pnpm add @e8johan/vuepress-plugin-pdf-export
yarn add @e8johan/vuepress-plugin-pdf-export
bun add @e8johan/vuepress-plugin-pdf-export
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.4.0 |
| Published | 2022-05-20 |
| First published | 2022-05-13 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 12.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Maintainers | e8johan |

## Links

- npm: https://www.npmjs.com/package/@e8johan/vuepress-plugin-pdf-export
- Repository: https://github.com/e8johan/vuepress-plugin-pdf-export
- Homepage: https://github.com/e8johan/vuepress-plugin-pdf-export#readme
- Issues: https://github.com/e8johan/vuepress-plugin-pdf-export/issues
- npm.io page: https://npm.io/package/@e8johan/vuepress-plugin-pdf-export

## Dependencies (2)

- [pdfjs](https://npm.io/package/pdfjs.md) ^2.3.5
- [puppeteer](https://npm.io/package/puppeteer.md) ^2.1.1

## Recent versions

- 1.4.0 (latest) — 2022-05-20
- 1.3.0 — 2022-05-20
- 1.2.0 — 2022-05-13

## README

# @e8johan/vuepress-plugin-pdf-export

Vuepress plugin for exporting site as PDF

This is a fork of @snowdog/vuepress-plugin-pdf-export. All changes are available in a PR to the upstream repository. Use this package at your own peril.

## Features
- Exports whole Vuepress based page as a single PDF file
- Applies styles to hide UI elements like navigation or sidebar
- Doesn't require other runtimes like Java to operate
- Designed to work well in headless environments like CI runners
- Can filter and sort pages.
- Can generate a rudimentary table of contents
- Can insert a front page (or front pages)

## Config options
- `theme` - theme name (default `@vuepress/default`)
- `sorter` - function for changing pages order (default `false`)
- `filter` - function for filtering the pages (default `false`)
- `tocLevel` - function returning a TOC level for the pages, i.e. zero or one (default `false`)
- `frontPage` - path to a pdf to inject first in the document. Typically a front page, but can be multiple pages too.
- `outputFileName` - name of output file (default `site.pdf`)
- `puppeteerLaunchOptions` - [Puppeteer launch options object](https://github.com/puppeteer/puppeteer/blob/v2.1.1/docs/api.md#puppeteerlaunchoptions) (default `{}`)
- `pageOptions` - [Puppeteer page formatting options object](https://github.com/puppeteer/puppeteer/blob/v2.1.1/docs/api.md#pagepdfoptions) (default `{format: 'A4'}`)

### Usage

Using this plugin:

``` js
// in .vuepress/config.js
module.exports = {
  plugins: ['@snowdog/vuepress-plugin-pdf-export']
}
```

Then run:

``` bash
vuepress export [path/to/your/docs]
```

#### The filter function

The `filter` function takes a `pages` object and returns `true` or `false`. Only pages where the function returns `true` are rendered to the pdf. The function is invoked as follows:

```
exportPages = exportPages.filter(filter);
```

#### The sorter function

The `sorter` function takes two `pages` objects and return `-1`, `0`, or `1` to indicate the sort order. The function is invoked as follows:

```
exportPages = exportPages.sort(sorter)
```

The sorting happens after the filtering, so you only have to handle the pages that pass your filter function.

#### The tocLevel function

The `tocLevel` function takes a `pages` object returns a TOC level, either zero (`0`, top level) or one (`1`, secondary level), or minus one (`-1`, leave out of TOC). If the entire TOC is empty, e.g. every page is on level `-1`, no TOC is rendered.

The TOC generation is invoked after the filtering and sorting. So the list of pages can be assumed to be filtered.

### Tips
To run this plugin on Gitlab CI you may want to run Chrome with `no-sandbox` flag. [Details](https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md#setting-up-chrome-linux-sandbox)

```js
module.exports = {
  plugins: [
    ['@snowdog/vuepress-plugin-pdf-export', {
      puppeteerLaunchOptions: {
        args: ['--no-sandbox', '--disable-setuid-sandbox']
      }
    }]
  ]
}
```

## Known Issues

- At the moment, pdfjs cannot inject footers on the rendered pages, and the individual pages do not know their page number, so the page numbers in the TOC relates to the page numbers in the PDF, but no page number is rendered on the actual PDF pages.

---
_Source: https://npm.io/package/@e8johan/vuepress-plugin-pdf-export · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
