gcp-nrces-fhir
Version:
Google cloud healthcare api NRCES FHIR implimenataion
115 lines • 4.6 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const html_to_pdfmake_1 = __importDefault(require("html-to-pdfmake"));
const pdfmake_1 = __importDefault(require("pdfmake/build/pdfmake"));
const vfs_fonts_1 = __importDefault(require("pdfmake/build/vfs_fonts"));
const jsdom_1 = require("jsdom");
pdfmake_1.default.vfs = vfs_fonts_1.default;
pdfmake_1.default.fonts = {
Roboto: {
normal: "Roboto-Regular.ttf",
bold: "Roboto-Medium.ttf",
italics: "Roboto-Italic.ttf",
bolditalics: "Roboto-Italic.ttf",
},
};
function createPdf(html, data) {
return new Promise((resolve, reject) => {
const window = new jsdom_1.JSDOM("").window;
html = html.replace(/<!-- pagebreak -->/g, '<div class="pagebreak"> </div>');
const paragraphSpaceHalf = data.paragraphSpace ? data.paragraphSpace / 2 : 3;
const pdfmakeData = (0, html_to_pdfmake_1.default)(html, {
window: window,
tableAutoSize: true,
defaultStyles: {
p: { margin: [0, paragraphSpaceHalf, 0, paragraphSpaceHalf] },
},
});
const content = [];
if (data.headerbase64Image) {
content.push({ image: data.headerbase64Image, width: 500 });
}
content.push(pdfmakeData);
const qrcode = data.qrcode
? { qr: data.qrcode, fit: data.qrCodeWidth ? `${data.qrCodeWidth}` : "100" }
: null;
const esign = data.esign
? [
{ image: data.esign.image, width: 100, alignment: "right" },
{ text: data.esign.nameLine1, alignment: "right" },
...(data.esign.nameLine2 ? [{ text: data.esign.nameLine2, alignment: "right" }] : []),
]
: null;
const signTable = {
layout: "noBorders",
table: {
widths: ["50%", "50%"],
body: [[qrcode || "", esign || ""]],
},
};
content.push(signTable);
// Media (attachments)
if (data.media) {
const size = 500;
if (data.media.singleImagePerPage) {
data.media.content.forEach((el, i) => {
content.push(Object.assign({ image: el, width: size }, (i > 0 ? { pageBreak: "before" } : {})));
});
}
else {
const body = [];
const contentLength = data.media.content.length - 1;
data.media.content.forEach((el, i) => {
if (i % 2 === 0 && i < contentLength) {
body.push([
{ image: data.media.content[i], width: size / 2.1 },
{ image: data.media.content[i + 1], width: size / 2.1 },
]);
}
else if (i % 2 === 0 && i === contentLength) {
body.push([{ image: data.media.content[i], width: size / 2.1 }, ""]);
}
});
if (body.length > 0) {
content.push({
layout: "noBorders",
table: { body },
pageBreak: "before",
});
}
}
}
const docDefinition = {
pageSize: data.paperSize || "A4",
pageMargins: [
data.leftMargin || 40,
data.topMargin || 40,
data.rightMargin || 40,
data.bottomMargin || 40,
],
content,
defaultStyle: { fontSize: 10, lineHeight: 1 },
pageBreakBefore: (currentNode) => currentNode.style && currentNode.style.indexOf("pagebreak") > -1,
};
if (data.header) {
docDefinition.header = data.header;
}
if (data.footer) {
docDefinition.footer = data.footer;
}
const pdfDoc = pdfmake_1.default.createPdf(docDefinition);
pdfDoc.getBase64((cb) => {
if (data.base64) {
resolve(cb);
}
else {
resolve(Buffer.from(cb, "base64"));
}
});
});
}
exports.default = createPdf;
//# sourceMappingURL=PdfGenerator.js.map