1.5.0 • Published 3 years ago
xml-to-pdf v1.5.0
templated-pdf
PDF generation using an XML source. Can generate a file, buffer or stream.
Usage as a function
const pdf = require('express-hogan-pdf');
pdf.toStream(xml, basePath, (err, stream) => {});
pdf.toBuffer(xml, basePath, (err, buffer) => {});
pdf.toFile(xml, basePath, destFile, (err) => {});Usage as an express streaming engine
app.get('/path', (req, res, next) => {
let xml = '<pdf>xmldata</pdf>';
pdf.toStream(xml, '/base/path/for/images', (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 <pdf></pdf> tags
<config>Configuration section:<document>PDFKit document options, eg:<document size="A4"/><title>Set document title<meta>Set PDF meta details such as<author>,<subject>, or<keywords><colors>Color aliases, eg<colors darkred="#880000"/><fonts>Font aliases, eg<fonts comic="Comic Sans Regular"/><filename>Set document filename<title>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 extenddisplay="String"Can beblockorinlinemarginLeft="Number"Margin leftmarginRight="Number"Margin rightpaddingLeft="Number"Padding leftpaddingRight="Number"Padding rightcolor="String"Text color or aliasfont="String"Font alias, name or pathsize="Number"Font sizeunderline="Boolean"Underline textstrike="Boolean"Strikethrough textlineGap="Number"Line gap between wrapped linesparagraphGap="Number"Gaps between paragraphsalign="String"text alignmentpre="Boolean"Respect exact whitespace in tagstrim="Boolean"Trim whitespace at start of each line
- Block elements can also include the following attributes:
marginTop="Number"Margin topmarginBottom="Number"Margin bottompaddingTop="Number"Padding toppaddingBottom="Number"Padding bottomwidth="Number"Width as an absolute or as a percentage of the parent blockheight="Number"Height as an absolute or as a percentage of the page height within the page marginsbackgroundColor="String"Background color or color alias. Background will only be filled if both a height and width are givenborder="Number"Border width. A border will only be drawn if both a height and width are givenborderColor="String"Border color or color alias
- Elements attributes can include:
<page>A page to render. Can take any PDFKit page options, such as page- Predefined styles and tags that are similar to HTML include:
<div><p><span><strong><small><indent>Indent text bypaddingLeftand show a left bar ofthicknessandcolorthickness="Number"Width of indent barcolor="String"Color or color alias of indent bar
<hr>Horizontal rule divider linethickness="Number"Height of divider linecolor="String"Color or color alias of divider line
<row>A container for a set of columns<column>A left-aligned column within a row. Columns wrap within the row if the next column can't fit within the row's width<img>Draw an imagesrc="String"Source of the image to draw relative to the template filescale="Number"Size of image relative to its originalfit="Boolean"Fit image within the width and height without chaning its aspect ratio
<a>Create a web link for the contained text.href="String"The link to go to when clicked. If nohrefis specified an href is created by addinghttps://to the beginning of the text
- Predefined styles and tags that are similar to HTML include: