Docs to PDF

📌 Introduction
This is a PDF generator from document website such as docusaurus
. This is a fork of mr-pdf which was not maintained anymore.
Feel free to contribute to this project.
⚡ Usage
For Docusaurus v2
npx docs-to-pdf --initialDocURLs="https://docusaurus.io/docs/" --contentSelector="article" --paginationSelector="a.pagination-nav__link.pagination-nav__link--next" --excludeSelectors=".margin-vert--xl a,[class^='tocCollapsible'],.breadcrumbs,.theme-edit-this-page" --coverImage="https://docusaurus.io/img/docusaurus.png" --coverTitle="Docusaurus v2"
🍗 CLI Options
--initialDocURLs | Yes | set URL to start generating PDF from. |
--contentSelector | Yes | used to find the part of main content |
--paginationSelector | Yes | CSS Selector used to find next page to be printed for looping. |
--excludeURLs | No | URLs to be excluded in PDF |
--excludeSelectors | No | exclude selectors from PDF. Separate each selector with comma and no space. But you can use space in each selector. ex: --excludeSelectors=".nav,.next > a" |
--cssStyle | No | CSS style to adjust PDF output ex: --cssStyle="body{padding-top: 0;}" *If you're project owner you can use @media print { } to edit CSS for PDF. |
--outputPDFFilename | No | name of the output PDF file. Default is docs-to-pdf.pdf |
--pdfMargin | No | set margin around PDF file. Separate each margin with comma and no space. ex: --pdfMargin="10,20,30,40" . This sets margin top: 10px, right: 20px, bottom: 30px, left: 40px |
--paperFormat | No | pdf format ex: --paperFormat="A3" . Please check this link for available formats Puppeteer document |
--disableTOC | No | Optional toggle to show the table of contents or not |
--coverTitle | No | Title for the PDF cover. |
--coverImage | No | <src> Image for PDF cover (does not support SVG) |
--coverSub | No | Subtitle the for PDF cover. Add <br/> tags for multiple lines. |
--headerTemplate | No | HTML template for the print header. Please check this link for details of injecting values Puppeteer document |
--footerTemplate | No | HTML template for the print footer. Please check this link for details of injecting values Puppeteer document |
--puppeteerArgs | No | Add puppeteer BrowserLaunchArgumentOptions arguments ex: --sandbox Puppeteer document |
--protocolTimeout | No | Timeout setting for individual protocol calls in milliseconds. If omitted, the default value of 180000 ms (3 min) is used |
--filterKeyword | No | Only adds pages to the PDF containing a given meta keywords. Makes it possible to generate PDFs of selected pages |
--baseUrl | No | Base URL for all relative URLs. Allows to render the pdf on localhost (ci/Github Actions) while referencing the deployed page. |
--excludePaths | No | URL Paths to be excluded |
--restrictPaths | No | Keep Only URL Path with the same rootPath as --initialDocURLs |
| | |
🎨 Examples and Demo PDF
Docusaurus v2

https://docusaurus.io/
initialDocURLs
: https://docusaurus.io/docs
demoPDF
: https://github.com/jean-humann/docs-to-pdf/blob/master/pdf/v2-docusaurus.pdf
command
:
npx docs-to-pdf --initialDocURLs="https://docusaurus.io/docs/" --contentSelector="article" --paginationSelector="a.pagination-nav__link.pagination-nav__link--next" --excludeSelectors=".margin-vert--xl a,[class^='tocCollapsible'],.breadcrumbs,.theme-edit-this-page" --coverImage="https://docusaurus.io/img/docusaurus.png" --coverTitle="Docusaurus v2"
Docusaurus v1 - Legacy
https://docusaurus.io/en/
initialDocURLs
: https://docusaurus.io/docs/en/installation
demoPDF
: https://github.com/jean-humann/docs-to-pdf/blob/master/pdf/v1-docusaurus.pdf
command
:
npx docs-to-pdf --initialDocURLs="https://docusaurus.io/docs/en/installation" --contentSelector="article" --paginationSelector=".docs-prevnext > a.docs-next" --excludeSelectors=".fixedHeaderContainer,footer.nav-footer,#docsNav,nav.onPageNav,a.edit-page-link,div.docs-prevnext" --cssStyle=".navPusher {padding-top: 0;}" --pdfMargin="20"
PR to add new docs is welcome here... 😸
📄 How docs-to-pdf
works
- puppeteer can make html to PDF like you can print HTML page in chrome browser
- so, the idea of docs-to-pdf is generating one big HTML through looping page link, then run
page.pdf()
from puppeteer to generate PDF.

🎉 Thanks
This repo's code is coming from https://github.com/KohheePeace/mr-pdf.
Thanks for awesome code made by @KohheePeace, @maxarndt and @aloisklink.
@bojl approach to make TOC was awesome and breakthrough.