This is a Node.js and Puppeteer-based command-line tool designed to capture and merge Docusaurus website documentation content into a single PDF file. It aims to automate documentation archiving, offline reading, or generating printable versions.
You can find a sample PDF generated by this tool at doccusaurus.pdf in the repository. This provides a quick preview of the output.
- Full Site PDF Export: Exports all documentation pages from a Docusaurus site into a single, cohesive PDF file.
- Concurrent Processing: Leverages Puppeteer's concurrency capabilities to speed up the page content fetching process.
- Custom Cover Page: Supports adding a custom PDF cover page using either a URL or a local file path.
- Automatic Table of Contents (TOC) Generation: Automatically generates a professional, clickable PDF table of contents with dot leaders based on the Docusaurus sidebar structure.
- Navigable Internal Links: Rewrites all internal links within the documentation so they remain clickable and navigable in a PDF reader.
- Custom CSS Injection: Supports injecting custom CSS styles directly into the generated PDF for fine-tuned layout control.
- Link Rewriting: Allows rewriting site domains/URLs within hyperlinks to ensure cross-references work correctly across environments.
- Configurable Margins: Supports adjusting PDF page margins via command-line arguments.
npm install -g docusaurus-docs-to-pdf
# or
yarn global add docusaurus-docs-to-pdfThis tool relies on Puppeteer and requires a compatible Chrome/Chromium browser. If you encounter a "Could not find Chrome" error, you need to install the browser manually:
npx puppeteer browsers install chromeRun the script from the command line and pass the appropriate arguments.
You can run docusaurus-docs-to-pdf -h to see the help message, or refer to the table below:
| Argument | Alias | Description | Required | Default |
|---|---|---|---|---|
--docs-url <url> |
-u |
The base URL of the Docusaurus documentation (e.g., "http://localhost:3000/docs/introduction") | Yes | - |
--pdf-path <path> |
-o |
The output file path for the generated PDF (e.g., "output/my-docs.pdf") | Yes | - |
--pdf-cover-image <pathOrUrl> |
-c |
The URL or local file path for the PDF cover image | No | - |
--pdf-margin-mm <number> |
-m |
The margin size in millimeters to apply to all sides of the PDF pages | No | 10 |
--page-concurrency <number> |
-p |
The maximum number of concurrent browser pages to use for content fetching | No | 2x CPU cores |
--css <style> |
-S |
Inject custom CSS styles directly. Can be used multiple times | No | - |
--site-rewrite <from=to> |
-r |
Rewrite site domain in links (e.g., "http://localhost:3000=https://docs.example.com"). Can be used multiple times | No | - |
Generate PDF with custom margins and concurrency
docusaurus-docs-to-pdf --docs-url http://localhost:3000/docs --pdf-path local-docs.pdf --pdf-margin-mm 20 --page-concurrency 10Advanced: Inject custom CSS and rewrite links
docusaurus-docs-to-pdf --docs-url http://localhost:3000/docs \
--pdf-path docs.pdf \
--css "h1 { color: #2e8555; }" \
--site-rewrite "http://localhost:3000=https://docs.example.com"