Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
function svgtopdf (el, options, pdf) {
if (typeof el === 'string') {
const svg = svgson.parseSync(fs.readFileSync(el, 'utf-8'))
const [, , width, height] = svg.attributes.viewBox.split(' ').map(Number)
const scale = 24 / Math.min(width, height)
const pdfdoc = new PDFDocument({ size: [width * scale, height * scale] })
pdfdoc.scale(scale)
pdfdoc.pipe(fs.createWriteStream(el.replace('svg', 'pdf')))
svgtopdf(svg, { fill: '#000' }, pdfdoc)
pdfdoc.end()
} else {
for (const node of el.children) {
const fillr = (node.attributes['fill-rule'] || 'nonzero').replace(/-*(zero|odd)$/, '-$1')
const color = (val) => String(val).replace(/currentColor/i, options.color).replace(/none/i, '')
const float = (key) => Number(node.attributes[key]) || 0
const style = {}
// Style
pdf.fillColor(style.fill = color(node.attributes['fill'] || options.fill || options.color))
pdf.strokeColor(style.stroke = color(node.attributes['stroke'] || options.stroke || 'none'))
pdf.lineWidth(style.lineWidth = Number(node.attributes['stroke-width']) || options.lineWidth || 1)
pdf.lineJoin(style.lineJoin = node.attributes['stroke-linejoin'] || options.lineJoin || 'miter')
ReactUpdates.batchedUpdates(() => {
let doc = new pdf();
const transaction = ReactUpdates.ReactReconcileTransaction.getPooled();
doc.pipe(fs.createWriteStream(filePath));
transaction.perform(() => {
// Starts mounting recursive process
component.mountComponent(transaction, rootId, null, {doc});
doc.end();
if (callback) {
callback(component.getPublicInstance());
}
});
ReactUpdates.ReactReconcileTransaction.release(transaction);
// Helpers
const printMnemonic = (index) => `${index + 1}. ${mnemonics[index]}`;
const readAssetSync = (p: string) => fs.readFileSync(p.startsWith('..') ? path.join(__dirname, p) : p);
// Generate QR image for wallet address
const qrCodeImage = qr.imageSync(address, {
type: 'png',
size: 10,
ec_level: 'L',
margin: 0
});
const textColor = '#040C40';
const width = 595.28;
const height = 841.98;
const doc = new PDFDocument({
size: [width, height],
margins: {
bottom: 0,
left: 0,
right: 0,
top: 0,
},
info: {
Title: messages.infoTitle,
Author: messages.infoAuthor,
}
});
try {
// font family
// const fontBuffer = readAssetSync(paperWalletFontPath);
// doc.font(fontBuffer);
// Helpers
const printMnemonic = (index) => `${index + 1}. ${mnemonics[index]}`;
const readAssetSync = (p: string) => fs.readFileSync(p.startsWith('..') ? path.join(__dirname, p) : p);
// Generate QR image for wallet address
const qrCodeImage = qr.imageSync(address, {
type: 'png',
size: 10,
ec_level: 'L',
margin: 0
});
const textColor = '#040C40';
const width = 595.28;
const height = 841.98;
const doc = new PDFDocument({
size: [width, height],
margins: {
bottom: 0,
left: 0,
right: 0,
top: 0,
},
info: {
Title: messages.infoTitle,
Author: messages.infoAuthor,
}
});
try {
// font family
// const fontBuffer = readAssetSync(paperWalletFontPath);
Path,
Rect,
LayoutEngine,
AttributedString,
Container,
Attachment
} from '@textkit/textkit';
const path = new Path();
path.rect(30, 30, 300, 400);
// const exclusion = new Path();
// exclusion.circle(140, 160, 50);
const doc = new PDFDocument();
doc.pipe(fs.createWriteStream('out.pdf'));
path.toFunction()(doc);
// exclusion.toFunction()(doc);
doc.stroke('green');
doc.stroke();
const string = AttributedString.fromFragments([
{
string: 'Lorem ipsum dolor sit amet, ',
attributes: {
font: 'Arial',
fontSize: 14,
bold: true,
align: 'justify',
return arr;
};
PDFParser.prototype.consumeExtraWhiteSpace = function() {
var chr;
while ((chr = this._data[this._offset]) === 10 || chr === 13 || chr === 0 || chr === 9 || chr === 12 || chr === 32 ) { this._offset++; }
};
// ---------------------------------------------------------------------------
// Add our functions to PDFKit
// ---------------------------------------------------------------------------
//noinspection JSUnresolvedVariable
pdfkit.prototype.getEmptyPageStats = function() {
this.emptyPageCountData = [
this.page._imageCount,
this.page.content.uncompressedLength,
this.page.resources.uncompressedLength,
this.page.dictionary.uncompressedLength
];
};
//noinspection JSUnresolvedVariable
pdfkit.prototype.isEmptyPage = function() {
// Verify we have a valid page, and a valid pdfkit page
if (!this.page || !this.page.document) {
return false;
}
if (!Array.isArray(this.emptyPageCountData)) {
}
if (this.page.dictionary && !this.page.dictionary.offset) {
this._waiting--;
}
if (this.page.resources && !this.page.resources.offset) {
this._waiting--;
}
this.page = { end: function() {} };
}
};
// ---------------------------------------------------------------------------
// We need to Hijack the PDFKit Document End and _Finalize to support deletion and auto-deletion
// ---------------------------------------------------------------------------
//noinspection JSUnresolvedVariable
pdfkit.prototype._PKIEnd = pdfkit.prototype.end;
//noinspection JSUnresolvedVariable
pdfkit.prototype.end = function() {
if (this.isEmptyPage()) {
this.deletePage();
}
this._PKIEnd();
};
//noinspection JSUnresolvedVariable
pdfkit.prototype._PKIFinalize = pdfkit.prototype._finalize;
//noinspection JSUnresolvedVariable
pdfkit.prototype._finalize = function(fn) {
var i = 0;
while (i < this._offsets.length) {
//noinspection JSUnresolvedVariable
pdfkit.prototype._PKIEnd = pdfkit.prototype.end;
//noinspection JSUnresolvedVariable
pdfkit.prototype.end = function() {
if (this.isEmptyPage()) {
this.deletePage();
}
this._PKIEnd();
};
//noinspection JSUnresolvedVariable
pdfkit.prototype._PKIFinalize = pdfkit.prototype._finalize;
//noinspection JSUnresolvedVariable
pdfkit.prototype._finalize = function(fn) {
var i = 0;
while (i < this._offsets.length) {
// Eliminate any NULL Offsets from deleted pages
if (this._offsets[i] === null) {
this._offsets.splice(i, 1);
continue;
}
i++;
}
this._PKIFinalize(fn);
};
//noinspection JSUnresolvedVariable
/**
* This imports all the PDF pages
* @param data - this is the PDF document buffer
// ---------------------------------------------------------------------------
// Add our functions to PDFKit
// ---------------------------------------------------------------------------
//noinspection JSUnresolvedVariable
pdfkit.prototype.getEmptyPageStats = function() {
this.emptyPageCountData = [
this.page._imageCount,
this.page.content.uncompressedLength,
this.page.resources.uncompressedLength,
this.page.dictionary.uncompressedLength
];
};
//noinspection JSUnresolvedVariable
pdfkit.prototype.isEmptyPage = function() {
// Verify we have a valid page, and a valid pdfkit page
if (!this.page || !this.page.document) {
return false;
}
if (!Array.isArray(this.emptyPageCountData)) {
this.emptyPageCountData = [0,18,0,0];
}
if (this.page._imageCount > this.emptyPageCountData[0]) { // 0;
return false;
}
// A Transform is placed in the content on a new page and its length is 18
if (this.page.content.uncompressedLength > this.emptyPageCountData[1]) { // 18
return false;
// ---------------------------------------------------------------------------
// We need to Hijack the PDFKit Document End and _Finalize to support deletion and auto-deletion
// ---------------------------------------------------------------------------
//noinspection JSUnresolvedVariable
pdfkit.prototype._PKIEnd = pdfkit.prototype.end;
//noinspection JSUnresolvedVariable
pdfkit.prototype.end = function() {
if (this.isEmptyPage()) {
this.deletePage();
}
this._PKIEnd();
};
//noinspection JSUnresolvedVariable
pdfkit.prototype._PKIFinalize = pdfkit.prototype._finalize;
//noinspection JSUnresolvedVariable
pdfkit.prototype._finalize = function(fn) {
var i = 0;
while (i < this._offsets.length) {
// Eliminate any NULL Offsets from deleted pages
if (this._offsets[i] === null) {
this._offsets.splice(i, 1);
continue;
}
i++;
}
this._PKIFinalize(fn);
};
//noinspection JSUnresolvedVariable