express-hogan-pdf
PDF generation using Hogan.js to template XML. Can be used as an express view engine or can output to a PDF stream, buffer, or file
Usage as an express engine
app.engine('pdfxml', require('express-hogan-pdf').engine);
app.get('/download-pdf', (req, res, next) => {
res.attachment('filename.pdf');
res.render('template.pdfxml', { title: 'Hello World' });
});
Usage as a function
const pdf = require('express-hogan-pdf');
pdf.fileToStream(filePath, locals, (err, stream) => {});
pdf.fileToBuffer(filePath, locals, (err, buffer) => {});
pdf.fileToFile(filePath, locals, destFile, (err) => {});
Usage as an express streaming engine
app.get('/download-pdf', (req, res, next) => {
res.render('template.pdfxml',
{ title: 'Hello World', stream: true },
(err, stream) => {
if (err) return next(err);
res.attachment(stream.filename);
stream.pipe(res);
});
});
PDF XML example
<pdf>
<config>
<filename>my-file.pdf</filename>
<document size="A4" marginBottom="50">
<title>{{title}}</title>
<colors darkred="#800"/>
<styles>
</styles>
</config>
<page>
<h1>{{title}}</h1>
<h2>Page 1</h2>
<indent>
<p>Indented text</p>
</indent>
<hr thickness="6"/>
<row>
<column width="33%">Column 1</column>
<column width="66%">Column 2</column>
</row>
<div>
A link to <a>example.com</a>
</div>
</page>
<page>
<h1 top="33%" left="100">Page 2</h1>
</page>
</pdf>
PDF XML format
The XML format wraps most of PDFKit's available options.
The document must be wrapped in tags
- Configuration section:
- PDFKit document options, eg:
-
Set document title
- <meta> Set PDF meta details such as <author>, <subject>, or <keywords>
- Color aliases, eg
- Font aliases, eg
-
Set document title
- <styles> Add or change page tag style definintions, eg: <styles><redtext extends="span" color="red"/></styles>
- Elements attributes can include:
- extends="String" Style definition to extend
- display="String" Can be "block" or "inline"
- Elements attributes can include:
- marginLeft="Number" Margin left
- marginRight="Number" Margin right
- paddingLeft="Number" Padding left
- paddingRight="Number" Padding right
- color="String" Text color or alias
- font="String" Font alias, name or path
- size="Number" Font size
- underline="Boolean" Underline text
- strike="Boolean" Strikethrough text
- lineGap="Number" Line gap between wrapped lines
- paragraphGap="Number" Gaps between paragraphs
- align="String" text alignment
- pre="Boolean" Respect exact whitespace in tags
- trim="Boolean" Trim whitespace at start of each line
- Block elements can also include the following attributes:
- marginTop="Number" Margin top
- marginBottom="Number" Margin bottom
- paddingTop="Number" Padding top
- paddingBottom="Number" Padding bottom
- width="Number" Width as an absolute or as a percentage of the parent block
- height="Number" Height as an absolute or as a percentage of the page height within the page margins
- backgroundColor="String" Background color or color alias. Background will only be filled if both a height and width are given
- border="Number" Border width. A border will only be drawn if both a height and width are given
- borderColor="String" Border color or color alias
- A page to render. Can take any PDFKit page options, such as page
- Predefined styles and tags that are similar to HTML include: