From 6fca1d0623f10b5a46eab6437f4e698ab5a1c353 Mon Sep 17 00:00:00 2001 From: Johan Thelin Date: Fri, 20 May 2022 17:43:15 +0200 Subject: [PATCH] Add the ability to inject front page(s) --- README.md | 2 ++ package.json | 2 +- src/extendCli.js | 2 ++ src/generatePdf.js | 8 ++++++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0dc2ba3..60ebf86 100644 --- a/README.md +++ b/README.md @@ -11,12 +11,14 @@ This is a fork of @snowdog/vuepress-plugin-pdf-export. All changes are available - 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'}`) diff --git a/package.json b/package.json index 996a1d5..aebec03 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@e8johan/vuepress-plugin-pdf-export", - "version": "1.3.0", + "version": "1.4.0", "license": "MIT", "repository": "e8johan/vuepress-plugin-pdf-export", "scripts": { diff --git a/src/extendCli.js b/src/extendCli.js index 46fdedb..404eaa4 100644 --- a/src/extendCli.js +++ b/src/extendCli.js @@ -10,6 +10,7 @@ module.exports = options => { const sorter = options.sorter || false const filter = options.filter || false const tocLevel = options.tocLevel || false + const frontPage = options.frontPage || false const outputFileName = options.outputFileName || 'site.pdf' const puppeteerLaunchOptions = options.puppeteerLaunchOptions || {} const pageOptions = options.pageOptions || {} @@ -37,6 +38,7 @@ module.exports = options => { sorter, filter, tocLevel, + frontPage, outputFileName, puppeteerLaunchOptions, pageOptions diff --git a/src/generatePdf.js b/src/generatePdf.js index ee910da..eea8c98 100644 --- a/src/generatePdf.js +++ b/src/generatePdf.js @@ -39,6 +39,7 @@ module.exports = async (ctx, { sorter, filter, tocLevel, + frontPage, outputFileName, puppeteerLaunchOptions, pageOptions @@ -143,6 +144,13 @@ module.exports = async (ctx, { paddingBottom: 37.6 * pdf.mm, }); + if (frontPage !== false) { + const file = fs.readFileSync(frontPage) + const page = new pdf.ExternalDocument(file) + mergedPdf.addPagesOf(page); + tocPageCount += page.pageCount; + } + if (toc.length > 0) { _createToc(mergedPdf, toc, tocPageCount); } else {