Initial commit.
This commit is contained in:
commit
453011285c
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
docs/*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
.env
|
||||||
|
.DS_Store
|
||||||
33
README.md
Normal file
33
README.md
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
# Eleventy Plugin PDF
|
||||||
|
|
||||||
|
A plugin for [Eleventy](https://www.11ty.dev/) that generates a pdf file from a template
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install --save-dev eleventy-plugin-pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
Open up your Eleventy config file (probably `eleventy.config.js`) and use `addPlugin`:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import eleventyPluginPDF from "eleventy-plugin-pdf";
|
||||||
|
|
||||||
|
export default function (eleventyConfig) {
|
||||||
|
eleventyConfig.addPlugin(eleventyPluginPDF);
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## Options
|
||||||
|
|
||||||
|
The `options` object can contain:
|
||||||
|
|
||||||
|
| Name | Description | Default |
|
||||||
|
|---|---|---|
|
||||||
|
| tempDir | Directory where the temporary files are created | "dist" |
|
||||||
|
| debug | Keep the generated temporary html file for debugging | false |
|
||||||
|
| format | Default pdf format | "A4" |
|
||||||
|
| margin.top | PDF top margin | "1cm" |
|
||||||
|
| margin.right | PDF right margin | "1.25cm" |
|
||||||
|
| margin.bottom | PDF bottom margin | "1cm" |
|
||||||
|
| margin.left | PDF left margin | "1.25cm" |
|
||||||
5
eleventy.config.js
Normal file
5
eleventy.config.js
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
import generatePdf from "./src/generate-pdf.js";
|
||||||
|
|
||||||
|
export default function (eleventyConfig, options) {
|
||||||
|
return generatePdf(eleventyConfig, options);
|
||||||
|
};
|
||||||
1209
package-lock.json
generated
Normal file
1209
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
29
package.json
Normal file
29
package.json
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"name": "eleventy-plugin-pdf",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "A plugin for 11ty that generates a pdf file from a template",
|
||||||
|
"main": "eleventy.config.js",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://codeberg.org/TheThomaas/eleventy-plugin-pdf.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"11ty",
|
||||||
|
"eleventy",
|
||||||
|
"eleventy-plugin"
|
||||||
|
],
|
||||||
|
"author": "TheThomaas",
|
||||||
|
"license": "ISC",
|
||||||
|
"homepage": "https://codeberg.org/TheThomaas/eleventy-plugin-pdf#readme",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://codeberg.org/TheThomaas/eleventy-plugin-pdf/issues"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"nanoid": "^5.1.5",
|
||||||
|
"puppeteer-html-pdf": "^4.0.8"
|
||||||
|
}
|
||||||
|
}
|
||||||
48
src/generate-pdf.js
Normal file
48
src/generate-pdf.js
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
import PuppeteerHTMLPDF from "puppeteer-html-pdf";
|
||||||
|
import { nanoid } from 'nanoid';
|
||||||
|
import fs from 'fs';
|
||||||
|
|
||||||
|
const pluginDefaults = {
|
||||||
|
tempDir: "dist", // Directory where the temporary files are created
|
||||||
|
debug: false, // Keep the generated temporary html file for debugging
|
||||||
|
format: "A4", // Default pdf format
|
||||||
|
margin: { // PDF file margins
|
||||||
|
top: "1cm",
|
||||||
|
right: "1.25cm",
|
||||||
|
bottom: "1cm",
|
||||||
|
left: "1.25cm",
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function (eleventyConfig, options = {}) {
|
||||||
|
const pluginConfig = Object.assign(pluginDefaults, options);
|
||||||
|
|
||||||
|
eleventyConfig.addTransform("toPDF", async (content, outputPath) => {
|
||||||
|
if (outputPath && outputPath.toLowerCase().endsWith('.pdf')) {
|
||||||
|
let tempFileName = nanoid();
|
||||||
|
let htmlFile = `./${pluginConfig.tempDir}/${tempFileName}.html`;
|
||||||
|
let pdfFile = `./${pluginConfig.tempDir}/${tempFileName}.pdf`;
|
||||||
|
|
||||||
|
fs.writeFileSync(htmlFile, content);
|
||||||
|
|
||||||
|
const htmlPDF = new PuppeteerHTMLPDF();
|
||||||
|
const pdfOptions = {
|
||||||
|
format: pluginConfig.format,
|
||||||
|
margin: pluginConfig.margin,
|
||||||
|
path: pdfFile,
|
||||||
|
};
|
||||||
|
htmlPDF.setOptions(pdfOptions);
|
||||||
|
|
||||||
|
const pdfContent = await htmlPDF.readFile(htmlFile, "utf8");
|
||||||
|
await htmlPDF.create(pdfContent);
|
||||||
|
let contents = fs.readFileSync(pdfFile, 'binary');
|
||||||
|
|
||||||
|
if (!pluginConfig.debug) {
|
||||||
|
fs.unlinkSync(htmlFile);
|
||||||
|
fs.unlinkSync(pdfFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Buffer.from(contents,'binary');
|
||||||
|
} else return content;
|
||||||
|
});
|
||||||
|
};
|
||||||
Loading…
Reference in a new issue