this.pdfPmrReport = function(from, to, fields, data, maillist) { var doc = new PDFDocument({bufferPages: true}); var _reportTime = new moment().format("YYYYMMDD_HHmmss"); var _from = (new moment(from)).format("YYYY-MM-DD"); var _to = (new moment(to)).format("YYYY-MM-DD"); var _ibmLogo128Path = path.join(config.appResourceRepository, 'images', '128px-IBM_logo.png'); var _ibmLogo64Path = path.join(config.appResourceRepository, 'images', '64px-IBM_logo.png'); var _ibmLogo32Path = path.join(config.appResourceRepository, 'images', '32_1px-IBM_logo.png'); var _shortName = 'PMRReprot_' + _reportTime + '.pdf'; var _fileName = path.join(config.pmrReportRepository, _shortName); var _metaData = _self._analyzeData(from, to, data); var stream = fs.createWriteStream(_fileName, 'utf8'); doc.pipe(stream); doc.image(_ibmLogo128Path, 500, 60, {width: 64}); doc.moveTo(30, 90); doc.lineTo(565, 90); doc.stroke(); doc.fontSize(25); doc.text('Data Studio PMR Report\n', 100, 130); doc.fontSize(14); doc.text('------'+ _from + "~" + _to, { width: 410, align: 'right' }); doc.text('\n'); var lorem = 'The data of this PMR report is from the IBM CRM system. \nThe report is generated automatically by Data Console Sevice'; doc.fontSize(10); doc.text('' + lorem, { width: 410, align: 'left' }); doc.moveDown(); doc.moveDown(); doc.moveDown(); doc.fontSize(18).fillColor('blue'); doc.text('Executive Summary:'); doc.fontSize(14).fillColor('black'); // analyze the data var _closedPmrs = _metaData.closedPmrs; var _newPmrs = _metaData.newPmrs; var _backlogPmrs = _metaData.backlogPmrs; var _groups = _metaData.groups; var _colsedCount = _closedPmrs.length; var _newCount = _newPmrs.length; var _backlongCount = _backlogPmrs.length; doc.moveDown(); var inFlow = 'New PMR inflow is: ' + _newCount + '\n'; inFlow += 'Closed PMR is: ' + _colsedCount + '\n'; inFlow += 'Backlog PMR is: ' + _backlongCount + '\n'; doc.text(inFlow); doc.moveDown(); doc.fontSize(18).fillColor('blue'); doc.text('Component Details:'); var optionGroupDetail = { columns: [ { id: 'groupName', width: 20, name: 'Component'}, { id: 'date', width: 40, name: 'Date'}, { id: 'inflow', width: 10, align:'center', name: 'Inflow' }, { id: 'closed', width: 10, align:'center',name: 'Closed' }, { id: 'backlog', width: 10, align:'center', name: 'Backlog' }, ], y : 400, margins: { left: 100, top: 10, right: 10, bottom: 10, }, padding: { left: 2, top: 5, right: 2, bottom: 5, } }; var groupData = new Array(); for(var attr in _groups) { groupData.push({ groupName: _groups[attr].groupName, date: _from + "~" + _to, inflow: _groups[attr].inflow, closed: _groups[attr].closed, backlog: _groups[attr].backlog }); } doc.table(groupData, optionGroupDetail); /* var _groupsText=''; var _compontX = 100; var _compontY = 390; var _index = 0; var _currentSpace = doc.currentLineHeight(); for(var attr in _groups) { if ( _groups[attr]!=undefined && typeof(_groups[attr]) != "function") { doc.fontSize(12).fillColor('black').text('Component [ ', _compontX, _compontY + _index * _currentSpace); var _x1 = doc.widthOfString('Component [ '); doc.fontSize(12).fillColor('blue').text(_groups[attr].groupName, _compontX + _x1, _compontY + _index * _currentSpace) var _x2 = doc.widthOfString(_groups[attr].groupName); doc.fontSize(12).fillColor('black').text(' ] ', _compontX + _x1 + _x2, _compontY + _index * _currentSpace); var _x3 = doc.widthOfString(' ] '); doc.fontSize(12).fillColor('black').text('has ', _compontX + _x1 + _x2 + _x3, _compontY + _index * _currentSpace); var _x4 = doc.widthOfString('has '); doc.fontSize(12).fillColor('red').text(_groups[attr].data.length, _compontX + _x1 + _x2 + _x3 + _x4, _compontY + _index * _currentSpace); _index++; } } */ // 3rd page doc.addPage(); doc.image(_ibmLogo32Path, 570, 10, {width: 32}); doc.moveTo(10, 30); doc.lineTo(602, 30); doc.stroke(); var options = { columns: [ { id: 'l3RequestDate', width: 8, name: 'Request Date'}, { id: 'pmrNumber', width: 11, align:'center',name: 'PMR Number' }, { id: 'l3Group', width: 5, align:'left', name: 'Component' }, { id: 'l3Owner', width: 10, align:'left', name: 'L3 Owner' }, //{ id: 'scratchPad', width: 40, align:'left', name: 'Description' }, { id: 'comments', width: 40, align:'left', name: 'Description' }, { id: 'customer', width: 10, align:'center', name: 'Customer' }, { id: 'version', width: 5, align:'center', name: 'Version' }, { id: 'pmrStatus', width: 5, align:'center', name: 'Status' }, { id: 'defect', width: 6, align:'left', name: 'Defect' }, ], y : 40, pageHeader : { image : {path: _ibmLogo32Path, x: 570, y: 10, style : {width: 32} }, line: {x1:10, y1:30, x2:602, y2:30 } }, margins: { left: 10, top: 10, right: 10, bottom: 10, }, padding: { left: 2, top: 5, right: 2, bottom: 5, } }; doc.fontSize(8).fillColor('black'); doc.table(data, options); stream.on('finish', function () { if(maillist!=undefined && maillist!=null && maillist!='') { var _imagesPath = path.join( config.appResourceRepository, 'images' ); var _subject = 'Data Sutdio PMR Report ' + '(' + _from + "~" + _to + ')'; var _attachments = new Array(); var _pdfReport = { fileName: _shortName, filePath: _fileName, cid: _shortName } _attachments.push(_pdfReport); console.log("***********************maillist=" + maillist); var message = { from: '*****@*****.**', to: maillist, //cc: _ccMailList, subject: _subject, attachments: _attachments, html:'<p>The data of this PMR report is from the IBM CRM system.</p> <p>The report is generated automatically by Data Console Sevice produced by Wang You Xiang CopyRight 2014.</p> <p><img src="' + _ibmLogo64Path + '"/></p>' } _self.sendMail(message); } }); doc.end(); };
getSentence(job_id,copy_id).then(function outputPdf(sentence){ console.log(sentence); console.log(job); doc.font('kochi-mincho-subst.ttf'); doc.image("back.png", 30, 30, {fit:[521,383]}); doc.fontSize(16).text(name,300,80); doc.fontSize(16).text(age+"歳",300,125); if(gender == "Male") gender = "男"; else gender = "女"; doc.fontSize(16).text(gender,470,125); doc.fontSize(16).text(job,310,165); var r=new RegExp(".{1,"+35+"}","g"); var sentences = sentence.match(r); console.log(sentences); for(var i=0;i<sentences.length;i++){ doc.fontSize(14).text(sentences[i],40,255 + (i*35)); } doc.image("face.png", 30, 30, {fit:[170, 170]}); doc.pipe(fs.createWriteStream('output.pdf'),{end:true}).on('finish', function () { console.log("complete"); socket.broadcast.emit('showPdfFile',{url:"http://127.0.0.1:8000/output.pdf"}); doc = new PDFDocument(); }); doc.end(); });
images.forEach(function(res, i){ if(i > 0){ doc.addPage() } var size = dimension.calcSize(pageSize, res.size) var offset = dimension.calcOffset(pageSize, size) doc.image(res.path, offset.x, offset.y, size) })
function createHeader () { doc.image(logoPath, 40, 80, { width: 70 }); doc.fontSize(16); doc.text('Expense Report', 120, 100); doc.fontSize(12) .fillColor('gray') .text(timePeriod, 120, 125); doc.rect(350, 40, 180, 75).fillAndStroke('#9bd5cb', '#aaa') .rect(350, 115, 180, 60).stroke() .rect(350, 175, 180, 20).stroke(); doc.fontSize(16).fillColor('white').text(today, 350, 70, { width: 180, align: 'center' }); doc.fontSize(8).fillColor('#9bd5cb').text(credit, 350, 182, { width: 180, align: 'center' }); doc.fontSize(13).fillColor('#464646').text(name, 405, 140, { width: 125, align: 'center' }); var avatarPath = path.normalize(__dirname + '../../../../public/images/avatar.png'); doc.image(avatarPath, 354, 120, { height: 50 }); doc.moveTo(405, 115).lineTo(405, 175).stroke('#aaa'); }
}).then(function afterFind(record) { if (!record) return res.notFound('user.ticket.download.not.found'); if ( !record || // other user ticket ( res.locals.currentUserTickets && ( record.ownerId != req.user.id ) ) ) { return res.notFound('user.ticket.findOne.not.found'); } var doc = new PDFDocument(); doc.lineWidth(0.5); // stream to response doc.pipe(res); // QR Code doc.image(record.getQRCode(), 30, 30, { width: 130, height: 130 }); // title doc.fontSize(15); doc.text(record.title, 175, 30, { width: 410 }); // location doc.fontSize(10); doc.text(record.location, 175, 46, { width: 410, lineBreak: false }); // ticket type name doc.fontSize(12); doc.text(record.typeName, 175, 72, { width: 410, lineBreak: false }); // fullName doc.fontSize(16); doc.text(record.fullName, 175, 92, { width: 410 }); // footer metadata var footer = record.id + ' - ' + record.typeIdentifier + ' - ' + res.locals.__('ticket.download.date.label')+ ' '+ req.we.utils.moment(record.createdAt) .locale(res.locals.locale) .format('L HH:mm'); // id / identifier doc.fontSize(10); doc.text(footer, 175, 153, { width: 410 }); // ticket box doc.rect(20, 20, 570, 150) .stroke(); // cutPDF line doc.lineWidth(1); doc.lineCap('butt') .dash(5, { space: 10 } ) .moveTo(0, 185) .lineTo(650, 185) .stroke(); // finalize the PDF and end the stream doc.end(); }).catch(res.queryError);
.then(function(proyecto){ //pdfKit var doc = new PDFDocument({ size: 'letter' }); doc.pipe(res); doc.image('./public/img/accesoslogo.png', 380, 30, {width: 200}); doc.font('Helvetica'); doc.fontSize(14); doc.text('Fecha: ' + proyecto.createdAt, 65, 180) .moveDown(); doc.text('Proyecto nombre: ' + proyecto.name) .moveDown(); doc.text('Dirección: ' + proyecto.location) .moveDown(); doc.text('Cliente: ' + proyecto.cliente) .moveDown(); doc.text('E-mail: '); doc.text('Peso total aproximado: ' + proyecto.peso + ' kg', 160, 400) .moveDown() .text('Diseño seleccionado: ' + proyecto.portonNo + ' ' + proyecto.porton); doc.text('Ancho: ' + proyecto.ancho + ' cm', 220, 525); doc.text('Alto: ' + proyecto.alto + ' cm', 430, 640); doc.moveTo(35, 350) .lineTo(577, 350); doc.moveTo(35, 490) .lineTo(577, 490); doc.lineWidth(.5) .roundedRect(35, 120, 542, 640, 5) .stroke(); doc.lineWidth(.5) .rect(150, 560, 260, 160) .fillAndStroke("white", "gray"); doc.end(); console.log('PDF created!'); });
fs.writeFile('public/downloads/pdf/chart.png', buf, function(err) { if (err) throw err; doc = new PDFDocument({size: 'LEGAL',layout: 'landscape'}); doc.fontSize(25); doc.text('Occupation with threshold ' + umbral + ' dBm (' + zona + ')', {align: 'center'}); doc.image('public/downloads/pdf/chart.png', { width: 850, height: 460}); doc.write('public/downloads/pdf/occupation.pdf',function(){ fs.unlink('public/downloads/pdf/chart.png', function(){ if (err) throw err; res.send('0'); }); }); });
function makePDF(title, excel, image, defaultText) { var doc = new pdfkit(); doc.pipe(fs.createWriteStream('./public/file.pdf')); // draw some text doc.fontSize(25) .text('Title: ' + title, 100, 80); // write text according to the uploaded excel var i = 0; var excelJson = readExcel(excel); var dynamicTextHeight = 0; for (p in excelJson) { doc.fontSize(20) .text('Product: ' + excelJson[p].product + ', Price: ' + excelJson[p].price, 100, 110 + i); i += 20; } dynamicTextHeight = 110 + i; doc.image('./' + image[0].path, 100, dynamicTextHeight, {fit: [100, 100]}); dynamicTextHeight += 120; // and some justified text wrapped into columns doc.text('And here is some default text...', 100, dynamicTextHeight) .font('Times-Roman', 13) .moveDown() .text(defaultText, { width: 412, align: 'justify', indent: 30, columns: 2, height: 300, ellipsis: true }); doc.end(); }
Prize.method('createPrizeScreenPdf', function(user, images) { var doc = new Pdf({size: 'letter', margins: {top: 20, left: 20, right: 20, bottom: 20}}); var image_base = Bozuko.dir+'/resources/images', logo_width = doc.page.width * .25; doc.info.Title = 'Bozuko Prize'; doc.info.Author = 'Bozuko, Inc'; doc.registerFont('Bozuko',Bozuko.dir+'/resources/fonts/arvo/Arvo-Regular.ttf','ArvoRegular'); // Bozuko logo doc.image(image_base+'/logo/logo.png', 20, 20, {width: logo_width}); // // Horizontal line // doc.moveTo(doc.x, doc.y) // .fill('black') // .lineTo(doc.page.width, doc.y) // .stroke() // ; // prize name doc.fill('#D3D3D3') .font('Bozuko') .fontSize(16) .text('Prize:', doc.x, doc.y+20) .fontSize(20) .fill('black') .text(this.name) ; // prize code doc.fill('#D3D3D3') .fontSize(16) .text('Code:', doc.x, doc.y+20) .fill('black') .text(this.code) ; // TODO: Horizontal line var user_img_y = doc.y; // User and Business Images doc.image(images.user.path, doc.x, doc.y+20, {width: logo_width}) .image(images.business.path, doc.x, doc.y+logo_width+40, {width: logo_width}) ; // Message and Timestamp var ts = this.timestamp; ampm = ts.getHours() > 11 ? 'pm' : 'am', hrs = ts.getHours() > 12 ? ts.getHours() - 12 : ts.getHours(), minstr = ts.getMinutes() < 10 ? '0'+ts.getMinutes() : ts.getMinutes(), timestr = ts.toDateString()+' '+hrs+':'+minstr+' '+ampm, xpos = logo_width + 80; ; doc.fontSize(24) .fill('blue') .font('Bozuko') .text('REDEEMED', xpos, doc.y +logo_width*.5) .text(timestr) ; // Security or Barcode Image var path = images.barcode ? images.barcode.path : images.security.path; doc.image(path, doc.x, user_img_y + logo_width + 40, {width: logo_width}) ; doc.x = 0; // Thank You message doc.fontSize(16) .fill('white') .text('junk', doc.x, user_img_y+2*logo_width+100) .fill('gray') .text('This prize has been redeemed', {align: 'center'}) .fontSize(20) .text('THANK YOU', {align: 'center'}) ; return doc.output(); });
const solicitudPiezasPdf = (solicitudPiezasBD) => { console.log('1.- EN solicitudPiezasPdf->', solicitudPiezasBD); let sp = solicitudPiezasBD; //console.log('EN solicitudPiezasPdf->', sp); let paciente = sp.paciente; const hojaCartaPort = [612, 792]; const hojaCartaLan = [792, 612]; var doc = new pdf({ size: 'letter', layout: 'portrait', //size: hojaCartaPort, margin: 0, info: { Title: 'SOLCITUD DE ESTUDIO Y DISPOSICIÓN DE PIEZAS ANOTOMOPATOLÓGICAS: msi-04 v1.0', Author: 'Clínica Médica San Isidro', } }); //doc.lineWidth(3); //doc.lineJoin('round') // .rect(5, 5, 600, 750) // .stroke(); const anchoHoja = pdfTools.mmToPt(210.02); // ptos: 612; const altoHoja = pdfTools.mmToPt(297.01); // Ptos: 792; const margenIzq = 10; const margenDer = 10; const maxAncho = anchoHoja - margenDer - margenIzq; const margenSup = 10; const margenInf = 10; const maxAlto = altoHoja - margenInf - margenSup; const sizePaperLetter = '210.02x297.01'; const centroMedico = 'Médica San Isidro'; let imgFormato = path.resolve(__dirname, '../../msiformatos/msi22.jpg'); doc.image(imgFormato, { fit: [anchoHoja, altoHoja] }); const vacio = ''; let pathCfg = path.join(__dirname, './solicitudPiezasFields.cfg'); let pages = JSON.parse(fs.readFileSync(pathCfg, 'utf-8').toString().replace(/\n|\r/g, "").trim()); doc.registerFont('arialnarrow', 'fonts/arial-narrow.ttf'); //pages.forEach(function (field) { // console.log('\r\n sfield->', field.name); // writeLine(doc, eval(field.name), field.row, field.col, field.align, field.fontSize, field.color); //}); pages[0].forEach(function (field) { let paciente = sp.paciente; let medicos = paciente.medicos; let medicoTratante = medicos[0]; let domicilio = (paciente.calle || '') + ' ' + (paciente.numExterior || '') + ' ' + (paciente.numInterior || '') + (paciente.calle ? ', ' : '') + (paciente.colonia ? paciente.colonia + ',' : '') + (paciente.municipio ? paciente.municipio + ' ' : '') + (paciente.entidad ? paciente.entidad + ' ' : '') + (paciente.CP ? ' CP' + paciente.CP : ''); console.log('field-->', field, 'type->', field.type, eval(field.name)); writeLine(doc, eval(field.name), field.row, field.col, field.align, field.indent, field.fontSize, field.color, field.width, field.type); }); /// Agrega otra hoja //doc.addPage({ // size: 'letter', // layout: 'portrait', // margin: 0 //}); //imgFormato = path.resolve(__dirname, '../../msiformatos/msi02-2.jpg'); //doc.image(imgFormato, { // fit: [anchoHoja, altoHoja] //}); //pages[1].forEach(function (field) { // console.log(' hoja 2 field-->', field, 'type->', field.type); // writeLine(doc, eval(field.name), field.row, field.col, field.align, field.fontSize, field.color, field.width, field.type); //}); // Stream contents to a file const fileName = 'MSI22-' + Date.now() + '.pdf'; const filePath = path.join(__dirname, '../../public/pdfs/' + fileName); doc.pipe(fs.createWriteStream(filePath)).on('finish', function () { console.log('Archivo creado satisfactoriamente ....'); //return filePath; }); doc.end(); return filePath; //var buffer = encoding.convert(data, "Latin_1") }
boletos.forEach(function escreveOsDadosDoBoleto(boleto, indice) { //IMPRIMIR LAYOUT var espacoEntreLinhas = 23; var linha1 = 131; pdf.moveTo(args.ajusteX + 27, args.ajusteY + linha1) .lineTo(args.ajusteX + 572, args.ajusteY + linha1) .stroke(args.corDoLayout); var linha2 = linha1 + espacoEntreLinhas; pdf.moveTo(args.ajusteX + 27, args.ajusteY + linha2) .lineTo(args.ajusteX + 572, args.ajusteY + linha2) .stroke(args.corDoLayout); var linha3 = linha2 + espacoEntreLinhas; pdf.moveTo(args.ajusteX + 27, args.ajusteY + linha3) .lineTo(args.ajusteX + 329, args.ajusteY + linha3) .stroke(args.corDoLayout); var coluna1 = 27; pdf.moveTo(args.ajusteX + coluna1, args.ajusteY + linha1 - 0.5) .lineTo(args.ajusteX + coluna1, args.ajusteY + linha3 + 0.5) .stroke(args.corDoLayout); var coluna2 = 329; pdf.moveTo(args.ajusteX + coluna2, args.ajusteY + linha1) .lineTo(args.ajusteX + coluna2, args.ajusteY + linha3 + 0.5) .stroke(args.corDoLayout); var coluna3 = 178; pdf.moveTo(args.ajusteX + coluna3, args.ajusteY + linha2) .lineTo(args.ajusteX + coluna3, args.ajusteY + linha3) .stroke(args.corDoLayout); var coluna4 = 420; pdf.moveTo(args.ajusteX + coluna4, args.ajusteY + linha1) .lineTo(args.ajusteX + coluna4, args.ajusteY + linha2) .stroke(args.corDoLayout); var coluna5 = 572; pdf.moveTo(args.ajusteX + coluna5, args.ajusteY + linha1 - 0.5) .lineTo(args.ajusteX + coluna5, args.ajusteY + linha2 + 0.5) .stroke(args.corDoLayout); var coluna6 = coluna2 + 4; pdf.moveTo(args.ajusteX + coluna6, args.ajusteY + linha2 + 3.5) .lineTo(args.ajusteX + coluna6, args.ajusteY + linha3 + 0.5) .stroke(args.corDoLayout); var coluna7 = coluna5; pdf.moveTo(args.ajusteX + coluna7, args.ajusteY + linha2 + 3.5) .lineTo(args.ajusteX + coluna7, args.ajusteY + linha3 + 0.5) .stroke(args.corDoLayout); var linha4 = linha2 + 4; pdf.moveTo(args.ajusteX + coluna6, args.ajusteY + linha4) .lineTo(args.ajusteX + coluna7, args.ajusteY + linha4) .stroke(args.corDoLayout); ////////////////// var margemDoSegundoBloco = 30, margemDoSegundoBlocoLayout = margemDoSegundoBloco - 4; var linha21 = 241; pdf.moveTo(args.ajusteX + margemDoSegundoBlocoLayout, args.ajusteY + linha21) .lineTo(args.ajusteX + 571, args.ajusteY + linha21) .stroke(args.corDoLayout); var linha22 = linha21 + espacoEntreLinhas + 8; pdf.moveTo(args.ajusteX + margemDoSegundoBlocoLayout, args.ajusteY + linha22) .lineTo(args.ajusteX + 571, args.ajusteY + linha22) .stroke(args.corDoLayout); var linha23 = linha22 + espacoEntreLinhas; pdf.moveTo(args.ajusteX + margemDoSegundoBlocoLayout, args.ajusteY + linha23) .lineTo(args.ajusteX + 571, args.ajusteY + linha23) .stroke(args.corDoLayout); var linha24 = linha23 + espacoEntreLinhas; pdf.moveTo(args.ajusteX + margemDoSegundoBlocoLayout, args.ajusteY + linha24) .lineTo(args.ajusteX + 571, args.ajusteY + linha24) .stroke(args.corDoLayout); var linha25 = linha24 + espacoEntreLinhas; pdf.moveTo(args.ajusteX + margemDoSegundoBlocoLayout, args.ajusteY + linha25) .lineTo(args.ajusteX + 571, args.ajusteY + linha25) .stroke(args.corDoLayout); var camposLaterais = 434, linha26 = linha25 + espacoEntreLinhas; pdf.moveTo(args.ajusteX + camposLaterais, args.ajusteY + linha26) .lineTo(args.ajusteX + 571, args.ajusteY + linha26) .stroke(args.corDoLayout); var linha27 = linha26 + espacoEntreLinhas; pdf.moveTo(args.ajusteX + camposLaterais, args.ajusteY + linha27) .lineTo(args.ajusteX + 571, args.ajusteY + linha27) .stroke(args.corDoLayout); var linha28 = linha27 + espacoEntreLinhas; pdf.moveTo(args.ajusteX + camposLaterais, args.ajusteY + linha28) .lineTo(args.ajusteX + 571, args.ajusteY + linha28) .stroke(args.corDoLayout); if(args.exibirCampoUnidadeBeneficiaria) { var linha28_2 = linha28 + 12.4; pdf.moveTo(args.ajusteX + margemDoSegundoBlocoLayout, args.ajusteY + linha28_2) .lineTo(args.ajusteX + camposLaterais, args.ajusteY + linha28_2) .stroke(args.corDoLayout); } var linha29 = linha28 + espacoEntreLinhas; pdf.moveTo(args.ajusteX + camposLaterais, args.ajusteY + linha29) .lineTo(args.ajusteX + 571, args.ajusteY + linha29) .stroke(args.corDoLayout); var linha211 = linha29 + espacoEntreLinhas + 0.4; pdf.moveTo(args.ajusteX + margemDoSegundoBlocoLayout, args.ajusteY + linha211) .lineTo(args.ajusteX + 571, args.ajusteY + linha211) .stroke(args.corDoLayout); var linha212 = linha211 + 56.6; pdf.moveTo(args.ajusteX + margemDoSegundoBlocoLayout, args.ajusteY + linha212) .lineTo(args.ajusteX + 571, args.ajusteY + linha212) .stroke(args.corDoLayout); var coluna21 = margemDoSegundoBlocoLayout + 0.5; pdf.moveTo(args.ajusteX + coluna21, args.ajusteY + linha21) .lineTo(args.ajusteX + coluna21, args.ajusteY + linha212) .stroke(args.corDoLayout); var coluna22 = 571 - 0.5; pdf.moveTo(args.ajusteX + coluna22, args.ajusteY + linha21) .lineTo(args.ajusteX + coluna22, args.ajusteY + linha212) .stroke(args.corDoLayout); var coluna23 = camposLaterais; pdf.moveTo(args.ajusteX + coluna23, args.ajusteY + linha21) .lineTo(args.ajusteX + coluna23, args.ajusteY + linha211) .stroke(args.corDoLayout); var coluna24 = 93.5; pdf.moveTo(args.ajusteX + coluna24, args.ajusteY + linha23) .lineTo(args.ajusteX + coluna24, args.ajusteY + linha24) .stroke(args.corDoLayout); var coluna25 = coluna24 + 92.5; pdf.moveTo(args.ajusteX + coluna25, args.ajusteY + linha23) .lineTo(args.ajusteX + coluna25, args.ajusteY + linha24) .stroke(args.corDoLayout); var coluna26 = coluna25 + 84.5; pdf.moveTo(args.ajusteX + coluna26, args.ajusteY + linha23) .lineTo(args.ajusteX + coluna26, args.ajusteY + linha24) .stroke(args.corDoLayout); var coluna27 = coluna26 + 61; pdf.moveTo(args.ajusteX + coluna27, args.ajusteY + linha23) .lineTo(args.ajusteX + coluna27, args.ajusteY + linha24) .stroke(args.corDoLayout); var coluna28 = margemDoSegundoBlocoLayout + 106; pdf.moveTo(args.ajusteX + coluna28, args.ajusteY + linha24) .lineTo(args.ajusteX + coluna28, args.ajusteY + linha25) .stroke(args.corDoLayout); var coluna29 = coluna28 + 76.5; pdf.moveTo(args.ajusteX + coluna29, args.ajusteY + linha24) .lineTo(args.ajusteX + coluna29, args.ajusteY + linha25) .stroke(args.corDoLayout); var coluna210 = coluna29 + 77; pdf.moveTo(args.ajusteX + coluna210, args.ajusteY + linha24) .lineTo(args.ajusteX + coluna210, args.ajusteY + linha25) .stroke(args.corDoLayout); var coluna211 = coluna210 + 92; pdf.moveTo(args.ajusteX + coluna211, args.ajusteY + linha24) .lineTo(args.ajusteX + coluna211, args.ajusteY + linha25) .stroke(args.corDoLayout); var coluna212 = 154; pdf.moveTo(args.ajusteX + coluna212, args.ajusteY + 217.5) .lineTo(args.ajusteX + coluna212, args.ajusteY + linha21) .stroke(args.corDoLayout); var coluna213 = coluna212 + 1; pdf.moveTo(args.ajusteX + coluna213, args.ajusteY + 217.5) .lineTo(args.ajusteX + coluna213, args.ajusteY + linha21) .stroke(args.corDoLayout); var coluna214 = coluna213 + 1; pdf.moveTo(args.ajusteX + coluna214, args.ajusteY + 217.5) .lineTo(args.ajusteX + coluna214, args.ajusteY + linha21) .stroke(args.corDoLayout); var coluna215 = coluna214 + 41.5; pdf.moveTo(args.ajusteX + coluna215, args.ajusteY + 217.5) .lineTo(args.ajusteX + coluna215, args.ajusteY + linha21) .stroke(args.corDoLayout); var coluna216 = coluna215 + 1; pdf.moveTo(args.ajusteX + coluna216, args.ajusteY + 217.5) .lineTo(args.ajusteX + coluna216, args.ajusteY + linha21) .stroke(args.corDoLayout); var coluna217 = coluna216 + 1; pdf.moveTo(args.ajusteX + coluna217, args.ajusteY + 217.5) .lineTo(args.ajusteX + coluna217, args.ajusteY + linha21) .stroke(args.corDoLayout); var linhaSeparadora = 199; pdf.moveTo(args.ajusteX + 27, args.ajusteY + linhaSeparadora) .lineTo(args.ajusteX + 572, args.ajusteY + linhaSeparadora) .dash(3, { space: 5 }) .stroke(args.corDoLayout); var caminhoParaTesoura = path.join(__dirname, 'imagens/tesoura128.png'); pdf.image(caminhoParaTesoura, args.ajusteX + margemDoSegundoBlocoLayout, args.ajusteY + 195.7, { width: 10 }); ///IMPRIMIR LAYOUT var banco = boleto.getBanco(), pagador = boleto.getPagador(), beneficiario = boleto.getBeneficiario(), datas = boleto.getDatas(); args.creditos && pdf.font('italico') .fontSize(8) .text(args.creditos, args.ajusteX + 3, args.ajusteY + 90, { width: 560, align: 'center' }); var zeroLinha = 105; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('BENEFICIÁRIO:', args.ajusteX + 27, args.ajusteY + zeroLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(beneficiario.getIdentificacao().toUpperCase(), args.ajusteX + 27, args.ajusteY + zeroLinha + args.tamanhoDaFonte + 1.5, { lineBreak: false, width: 545, align: 'left' }); pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('RECIBO DO PAGADOR', args.ajusteX + 278, args.ajusteY + zeroLinha, { lineBreak: false, width: 294, align: 'right' }); var primeiraLinha = 142, diferencaEntreTituloEValor = 10, tituloDaPrimeiraLinha = primeiraLinha - diferencaEntreTituloEValor; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Nome do Cliente', args.ajusteX + 32, args.ajusteY + tituloDaPrimeiraLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(pagador.getNome(), args.ajusteX + 32, args.ajusteY + primeiraLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Data de Vencimento', args.ajusteX + 332, args.ajusteY + tituloDaPrimeiraLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(datas.getVencimentoFormatado(), args.ajusteX + 332, args.ajusteY + primeiraLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Valor Cobrado', args.ajusteX + 424, args.ajusteY + tituloDaPrimeiraLinha, { lineBreak: false, width: 294, align: 'left' }); var segundaLinha = primeiraLinha + espacoEntreLinhas, tituloDaSegundaLinha = segundaLinha - diferencaEntreTituloEValor; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Agência / Código do Beneficiário', args.ajusteX + 32, args.ajusteY + tituloDaSegundaLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(banco.getAgenciaECodigoBeneficiario(boleto), args.ajusteX + 32, args.ajusteY + segundaLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Nosso Número', args.ajusteX + 181, args.ajusteY + tituloDaSegundaLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(beneficiario.getNossoNumero(), args.ajusteX + 181, args.ajusteY + segundaLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(7) .text('Autenticação Mecânica', args.ajusteX + 426, args.ajusteY + segundaLinha - 5, { lineBreak: false, width: 294, align: 'left' }); var segundaLinha2 = segundaLinha + 56, codigoDeBarras = banco.geraCodigoDeBarrasPara(boleto), linhaDigitavel = geradorDeLinhaDigitavel(codigoDeBarras, banco); var caminhoParaTesoura = path.join(__dirname, 'imagens/tesoura128.png'); pdf.image(banco.getImagem(), args.ajusteX + margemDoSegundoBlocoLayout, args.ajusteY + segundaLinha2 - 5, { height: 23 }); banco.getImprimirNome() && pdf.font('negrito') .fontSize(args.tamanhoDaLinhaDigitavel) .text(banco.getNome(), args.ajusteX + margemDoSegundoBlocoLayout + 26, args.ajusteY + segundaLinha2, { lineBreak: false, width: 100, align: 'left' }); pdf.font('negrito') .fontSize(args.tamanhoDaLinhaDigitavel) .text(banco.getNumeroFormatadoComDigito(), args.ajusteX + margemDoSegundoBlocoLayout + 133.5, args.ajusteY + segundaLinha2, { lineBreak: false, width: 50, align: 'left' }); pdf.font('negrito') .fontSize(args.tamanhoDaLinhaDigitavel) .text(linhaDigitavel, args.ajusteX + margemDoSegundoBlocoLayout + 145, args.ajusteY + segundaLinha2, { lineBreak: false, width: 400, align: 'right' }); function i25(text) { //extrair para o gammautils if(text.length % 2 !== 0) { throw new Error('Text must have an even number of characters'); } var start = String.fromCharCode(201), stop = String.fromCharCode(202); return text.match(/.{2}/g).reduce(function(acc, part){ var value = parseInt(part, 10), ascii; if(value >= 0 && value <= 93) { ascii = value + 33; } if(value >= 94 && value <= 99) { ascii = value + 101; } return acc + String.fromCharCode(ascii); }, start) + stop; } pdf.font('codigoDeBarras') .fontSize(args.tamanhoDoCodigoDeBarras) .text(i25(codigoDeBarras), args.ajusteX + margemDoSegundoBlocoLayout, args.ajusteY + linha212 + 3.5, { lineBreak: false, width: 310, align: 'left' }); var terceiraLinha = segundaLinha + 95, tituloDaTerceiraLinha = terceiraLinha - diferencaEntreTituloEValor, tituloDaTerceiraLinhaLateral = terceiraLinha - diferencaEntreTituloEValor, colunaLateral = 440; var tituloLocalDoPagamento = margemDoSegundoBloco; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Local do Pagamento', args.ajusteX + tituloLocalDoPagamento, args.ajusteY + tituloDaTerceiraLinha - 7, { lineBreak: false, width: 294, align: 'left' }); boleto.getLocaisDePagamento().forEach(function(localDePagamento, indice) { if(indice > 1) { return; } pdf.font('normal') .fontSize(args.tamanhoDaFonteDoTitulo) .text(localDePagamento, args.ajusteX + margemDoSegundoBloco, args.ajusteY + (terceiraLinha + 2 - args.tamanhoDaFonte + (indice * args.tamanhoDaFonte)), { lineBreak: false, width: 400, align: 'left' }); }); pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Vencimento', args.ajusteX + colunaLateral, args.ajusteY + tituloDaTerceiraLinhaLateral - 7, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(datas.getVencimentoFormatado(), args.ajusteX + colunaLateral, args.ajusteY + terceiraLinha, { lineBreak: false, width: 294, align: 'left' }); var quartaLinha = terceiraLinha + 24, tituloDaQuartaLinhaLateral = quartaLinha - diferencaEntreTituloEValor; var tituloBeneficiario = margemDoSegundoBloco; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Beneficiário', args.ajusteX + tituloBeneficiario, args.ajusteY + tituloDaQuartaLinhaLateral, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(beneficiario.getIdentificacao(), args.ajusteX + margemDoSegundoBloco, args.ajusteY + quartaLinha, { lineBreak: false, width: 400, align: 'left' }); pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Agência / Código do Beneficiário', args.ajusteX + colunaLateral, args.ajusteY + tituloDaQuartaLinhaLateral, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(banco.getAgenciaECodigoBeneficiario(boleto), args.ajusteX + colunaLateral, args.ajusteY + quartaLinha, { lineBreak: false, width: 294, align: 'left' }); var quintaLinha = quartaLinha + espacoEntreLinhas, tituloDaQuintaLinha = quintaLinha - diferencaEntreTituloEValor, tituloDaQuintaLinhaLateral = quintaLinha - diferencaEntreTituloEValor; var tituloDataDocumento = margemDoSegundoBloco; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Data Documento', args.ajusteX + tituloDataDocumento, args.ajusteY + tituloDaQuintaLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(datas.getDocumentoFormatado(), args.ajusteX + margemDoSegundoBloco, args.ajusteY + quintaLinha, { lineBreak: false, width: 61.5, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(boleto.getNumeroDoDocumentoFormatado(), args.ajusteX + margemDoSegundoBloco + 68, args.ajusteY + quintaLinha, { lineBreak: false, width: 84, align: 'left' }); var tituloNumeroDoDocumento = tituloDataDocumento + 68; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Nº do Documento', args.ajusteX + tituloNumeroDoDocumento, args.ajusteY + tituloDaQuintaLinha, { lineBreak: false, width: 294, align: 'left' }); var tituloEspecieDoc = tituloNumeroDoDocumento + 90; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Espécie Doc.', args.ajusteX + tituloEspecieDoc, args.ajusteY + tituloDaQuintaLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(boleto.getEspecieDocumento(), args.ajusteX + margemDoSegundoBloco + 68 + 90, args.ajusteY + quintaLinha, { lineBreak: false, width: 81, align: 'center' }); var tituloAceite = tituloEspecieDoc + 86; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Aceite', args.ajusteX + tituloAceite, args.ajusteY + tituloDaQuintaLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(boleto.getAceiteFormatado(), args.ajusteX + margemDoSegundoBloco + 68 + 90 + 86, args.ajusteY + quintaLinha, { lineBreak: false, width: 55, align: 'center' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(datas.getProcessamentoFormatado(), args.ajusteX + margemDoSegundoBloco + 68 + 90 + 86 + 61.5, args.ajusteY + quintaLinha, { lineBreak: false, width: 93.5, align: 'left' }); var tituloDataProcessamento = tituloAceite + 61; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Data Processamento', args.ajusteX + tituloDataProcessamento, args.ajusteY + tituloDaQuintaLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Nosso Número / Cód. do Documento', args.ajusteX + colunaLateral, args.ajusteY + tituloDaQuintaLinhaLateral, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(banco.getNossoNumeroECodigoDocumento(boleto), args.ajusteX + colunaLateral, args.ajusteY + quintaLinha, { lineBreak: false, width: 294, align: 'left' }); var sextaLinha = quintaLinha + espacoEntreLinhas, tituloDaSextaLinha = sextaLinha - diferencaEntreTituloEValor; var tituloUsoDoBancoX = margemDoSegundoBloco; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Uso do Banco', args.ajusteX + tituloUsoDoBancoX, args.ajusteY + tituloDaSextaLinha, { lineBreak: false, width: 294, align: 'left' }); var tituloCarteira = tituloUsoDoBancoX + 105; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Carteira', args.ajusteX + tituloCarteira, args.ajusteY + tituloDaSextaLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(beneficiario.getCarteira(), args.ajusteX + margemDoSegundoBloco + 104.5, args.ajusteY + sextaLinha, { lineBreak: false, width: 71, align: 'center' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(boleto.getEspecieMoeda(), args.ajusteX + margemDoSegundoBloco + 104.5 + 77, args.ajusteY + sextaLinha, { lineBreak: false, width: 71, align: 'center' }); var tituloEspecieMoeda = tituloCarteira + 77; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Espécie Moeda', args.ajusteX + tituloEspecieMoeda, args.ajusteY + tituloDaSextaLinha, { lineBreak: false, width: 294, align: 'left' }); var tituloQuantidadeMoeda = tituloEspecieMoeda + 77; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Quantidade Moeda', args.ajusteX + tituloQuantidadeMoeda, args.ajusteY + tituloDaSextaLinha, { lineBreak: false, width: 294, align: 'left' }); var tituloValorMoeda = tituloQuantidadeMoeda + 92; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Valor Moeda', args.ajusteX + tituloValorMoeda, args.ajusteY + tituloDaSextaLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('(=) Valor do Documento', args.ajusteX + colunaLateral, args.ajusteY + tituloDaSextaLinha, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(boleto.getValorFormatadoBRL(), args.ajusteX + colunaLateral, args.ajusteY + sextaLinha, { lineBreak: false, width: 294, align: 'left' }); var setimaLinhaLateral = sextaLinha + espacoEntreLinhas, tituloDaSetimaLinha = tituloDaSextaLinha + espacoEntreLinhas, tituloDaSetimaLinhaLateral = setimaLinhaLateral - diferencaEntreTituloEValor; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Instruções', args.ajusteX + margemDoSegundoBloco, args.ajusteY + tituloDaSetimaLinha, { lineBreak: false, width: 294, align: 'left' }); var instrucaoY = tituloDaSetimaLinha + 12; boleto.getInstrucoes().forEach(function(instrucao, indice) { pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(instrucao, args.ajusteX + margemDoSegundoBloco, args.ajusteY + instrucaoY + (indice * args.tamanhoDaFonte), { lineBreak: false, width: 400, align: 'left' }); }); if(args.exibirCampoUnidadeBeneficiaria) { pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Unidade Beneficiária', args.ajusteX + 30, args.ajusteY + tituloDaSetimaLinha + 70, { lineBreak: false, width: 294, align: 'left' }); } pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Pagador', args.ajusteX + 30, args.ajusteY + tituloDaSetimaLinha + 115, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(pagador.getIdentificacao(), args.ajusteX + 30, args.ajusteY + tituloDaSetimaLinha + 115 + 10, { lineBreak: false, width: 535, align: 'left' }); var enderecoDoPagador = pagador.getEndereco(); if(enderecoDoPagador) { var espacamento = args.tamanhoDaFonte; if(enderecoDoPagador.getPrimeiraLinha()) { pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(enderecoDoPagador.getPrimeiraLinha(), args.ajusteX + 30, args.ajusteY + tituloDaSetimaLinha + 115 + 10 + espacamento, { lineBreak: false, width: 535, align: 'left' }); espacamento += espacamento; } if(enderecoDoPagador.getSegundaLinha()) { pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(enderecoDoPagador.getSegundaLinha(), args.ajusteX + 30, args.ajusteY + tituloDaSetimaLinha + 115 + 10 + espacamento, { lineBreak: false, width: 535, align: 'left' }); } } pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Código de Baixa', args.ajusteX + 370, args.ajusteY + tituloDaSetimaLinha + 159, { lineBreak: false, width: 294, align: 'left' }); pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('Autenticação Mecânica', args.ajusteX + 360, args.ajusteY + tituloDaSetimaLinha + 171.5, { lineBreak: false, width: 294, align: 'left' }); pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo + 1) .text('FICHA DE COMPENSAÇÃO', args.ajusteX + 421, args.ajusteY + tituloDaSetimaLinha + 171.5, { lineBreak: false, width: 150, align: 'right' }); pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('(-) Desconto / Abatimento', args.ajusteX + colunaLateral, args.ajusteY + tituloDaSetimaLinhaLateral, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(boleto.getValorDescontosFormatadoBRL(), args.ajusteX + colunaLateral, args.ajusteY + setimaLinhaLateral, { lineBreak: false, width: 294, align: 'left' }); var oitavaLinhaLateral = setimaLinhaLateral + espacoEntreLinhas, tituloDaOitavaLinhaLateral = oitavaLinhaLateral - diferencaEntreTituloEValor; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('(-) Outras Deduções', args.ajusteX + colunaLateral, args.ajusteY + tituloDaOitavaLinhaLateral, { lineBreak: false, width: 294, align: 'left' }); pdf.font('normal') .fontSize(args.tamanhoDaFonte) .text(boleto.getValorDeducoesFormatadoBRL(), args.ajusteX + colunaLateral, args.ajusteY + oitavaLinhaLateral, { lineBreak: false, width: 294, align: 'left' }); var nonaLinhaLateral = oitavaLinhaLateral + espacoEntreLinhas, tituloDaNonaLinhaLateral = nonaLinhaLateral - diferencaEntreTituloEValor; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('(+) Mora / Multa', args.ajusteX + colunaLateral, args.ajusteY + tituloDaNonaLinhaLateral, { lineBreak: false, width: 294, align: 'left' }); var decimaLinhaLateral = nonaLinhaLateral + espacoEntreLinhas, tituloDaDecimaLinhaLateral = decimaLinhaLateral - diferencaEntreTituloEValor; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('(+) Outros Acréscimos', args.ajusteX + colunaLateral, args.ajusteY + tituloDaDecimaLinhaLateral, { lineBreak: false, width: 294, align: 'left' }); var decimaPrimLinhaLateral = decimaLinhaLateral + espacoEntreLinhas, tituloDaDecimaPrimLinhaLateral = decimaPrimLinhaLateral - diferencaEntreTituloEValor; pdf.font('negrito') .fontSize(args.tamanhoDaFonteDoTitulo) .text('(=) Valor Cobrado', args.ajusteX + colunaLateral, args.ajusteY + tituloDaDecimaPrimLinhaLateral, { lineBreak: false, width: 294, align: 'left' }); // args.imprimirSequenciaDoBoleto && pdf.font('italico') // .fontSize(args.tamanhoDaFonte) // .text('Boleto Nº ' + (indice + 1) + '/' + boletos.length, args.ajusteX + 30, args.ajusteY + 10, { // width: 560, // align: 'center' // }); if(indice < boletos.length - 1) { pdf.addPage(); } })
function desenharPagina() { if(args.ambiente !== 'producao') { pdf.font('normal') .fillColor(args.corDoTitulo) .fontSize(50) .fillOpacity(args.opacidadeDaHomologacao) .text('HOMOLOGAÇÃO', margemEsquerda + args.ajusteX + 0, margemTopo + args.ajusteY + 400 + args.ajusteYDaHomologacao, { width: larguraDoFormulario, align: 'center' }); pdf.font('normal') .fillColor(args.corDoTitulo) .fontSize(25) .fillOpacity(args.opacidadeDaHomologacao) .text('SEM VALOR FISCAL', margemEsquerda + args.ajusteX + 0, margemTopo + args.ajusteY + 450 + args.ajusteYDaHomologacao, { width: larguraDoFormulario, align: 'center' }); } //RECIBO linhaHorizontal(0, 0, 0); linhaHorizontal(0, -110.5, 28.3); linhaHorizontal(0, 0, 51.1); linhaVertical(0, 51.1, 0); linhaVertical(28.3, 51.1, 99.2); linhaVertical(0, 51.1, 476); linhaVertical(0, 51.1, 0); linhaVertical(0, 51.1, larguraDoFormulario); //PRIMEIRO BLOCO //QUADRADO DO TIPO (ENTRADA OU SAIDA) linhaHorizontal(317.4, -255, 96.4); linhaVertical(96.4, 116.2, 317.4); linhaHorizontal(317.4, -255, 116.2); linhaVertical(96.4, 116.2, 331.55); linhaHorizontal(0, 0, 59.55); linhaHorizontal(340.05, 0, 104.8); linhaHorizontal(340.05, 0, 127.4); linhaHorizontal(0, 0, 150.2); linhaHorizontal(0, 0, 170); linhaHorizontal(0, 0, 190); linhaVertical(59.55, 190, 0); linhaVertical(59.55, 150.2, 240.75); linhaVertical(59.55, 170, 340.05); linhaVertical(59.55, 190, larguraDoFormulario); linhaVertical(170, 190, 195.55); linhaVertical(170, 190, 391); //SEGUNDO BLOCO linhaHorizontal(0, 0, 201.2); linhaHorizontal(0, 0, 221); linhaHorizontal(0, 0, 241); linhaHorizontal(0, 0, 261); linhaVertical(201.2, 261, 0); linhaVertical(201.2, 221, 357.1); linhaVertical(221, 261, 274.9); linhaVertical(241, 261, 297.6); linhaVertical(221, 261, 396.75); linhaVertical(201.2, 261, 493.1); linhaVertical(201.2, 261, larguraDoFormulario); //TERCEIRO BLOCO linhaHorizontal(0, 0, 269); linhaHorizontal(0, 0, 289); linhaHorizontal(0, 0, 309); linhaVertical(269, 309, 0); linhaVertical(269, 309, 87.7); linhaVertical(269, 309, (87.7 * 2) + 0.3); linhaVertical(269, 309, (87.7 * 3) + 0.4); linhaVertical(269, 309, (87.7 * 4) + 0.4); linhaVertical(269, 309, (87.7 * 5) + 0.6); linhaVertical(269, 309, (87.7 * 5) + 51.8); linhaVertical(269, 309, larguraDoFormulario); //QUARTO BLOCO linhaHorizontal(0, 0, 320); linhaHorizontal(0, 0, 340); linhaHorizontal(0, 0, 360); linhaHorizontal(0, 0, 380); linhaVertical(320, 380, 0); linhaVertical(320, 340, 170); linhaVertical(320, 340, 346); linhaVertical(320, 360, 434); linhaVertical(320, 360, 456.65); linhaVertical(320, 380, 258); linhaVertical(360, 380, 59.6); linhaVertical(360, 380, 158.6); linhaVertical(360, 380, 357); linhaVertical(360, 380, 473.3); linhaVertical(320, 380, larguraDoFormulario); //QUINTO BLOCO - LISTA DE PRODUTOS var alturaInicialDoQuadroDeItens = 391, alturaInicialDoQuadroDeDuplicatas = alturaInicialDoQuadroDeItens, alturaDeLinhaDeDuplicata = 23, duplicatasPorLinha = 8, larguraDaDuplicata = larguraDoFormulario / duplicatasPorLinha, segundaLinhaDoQuadroDeItens, linhasDeDuplicatas = 0; if(fatura) { alturaDoBlocoFaturaDuplicatas += args.tamanhoDaFonteDoTitulo; alturaInicialDoQuadroDeDuplicatas += 6.5; } if(duplicatas.length) { linhasDeDuplicatas = Math.ceil(duplicatas.length / duplicatasPorLinha); alturaDoBlocoFaturaDuplicatas += (linhasDeDuplicatas * alturaDeLinhaDeDuplicata) + 10; } else { alturaDoBlocoFaturaDuplicatas += args.tamanhoDaFonteDoTitulo + 3; } duplicatas = gammautils.array.chop(duplicatas, duplicatasPorLinha); var margemDeCimaDaDuplicata = 2, margemEsquerdaDaDuplicata = 2, larguraDaDuplicataComMargem = larguraDaDuplicata - margemEsquerdaDaDuplicata - 1; duplicatas.forEach(function(linha, indiceDaLinha) { var x1, x2, y; linha.forEach(function(duplicata, indiceDaDuplicata) { x1 = indiceDaDuplicata * larguraDaDuplicata; x2 = x1 + larguraDaDuplicata - larguraDoFormulario; y = alturaInicialDoQuadroDeDuplicatas + (indiceDaLinha * alturaDeLinhaDeDuplicata); linhaHorizontal(x1, x2, y); linhaVertical(y, y + alturaDeLinhaDeDuplicata, x1); titulo('NÚM.', x1 + margemEsquerdaDaDuplicata, y + margemDeCimaDaDuplicata, larguraDaDuplicataComMargem); titulo(duplicata.getNumero(), x1 + margemEsquerdaDaDuplicata, y + margemDeCimaDaDuplicata, larguraDaDuplicataComMargem, 'right'); titulo('VENC.', x1 + margemEsquerdaDaDuplicata, y + margemDeCimaDaDuplicata + args.tamanhoDaFonteDoTitulo, larguraDaDuplicataComMargem, 'left'); titulo(duplicata.getVencimentoFormatado(), x1 + margemEsquerdaDaDuplicata, y + margemDeCimaDaDuplicata + args.tamanhoDaFonteDoTitulo, larguraDaDuplicataComMargem, 'right'); titulo('VALOR', x1 + margemEsquerdaDaDuplicata, y + margemDeCimaDaDuplicata + (2 * args.tamanhoDaFonteDoTitulo), larguraDaDuplicataComMargem, 'left'); titulo(duplicata.getValorFormatado(), x1 + margemEsquerdaDaDuplicata, y + margemDeCimaDaDuplicata + (2 * args.tamanhoDaFonteDoTitulo), larguraDaDuplicataComMargem, 'right'); }); linhaVertical(y, y + alturaDeLinhaDeDuplicata, x1 + larguraDaDuplicata); linhaHorizontal(0, x2, y + alturaDeLinhaDeDuplicata); }); // alturaInicialDoQuadroDeItens += alturaDoBlocoFaturaDuplicatas; segundaLinhaDoQuadroDeItens = alturaInicialDoQuadroDeItens + 14.2; linhaHorizontal(0, 0, alturaInicialDoQuadroDeItens); linhaHorizontal(0, 0, segundaLinhaDoQuadroDeItens); linhaHorizontal(0, 0, 751); linhaVertical(alturaInicialDoQuadroDeItens, 751, 0); linhaVertical(alturaInicialDoQuadroDeItens, 751, 53.8); linhaVertical(alturaInicialDoQuadroDeItens, 751, 235.3); linhaVertical(alturaInicialDoQuadroDeItens, 751, 269.3); linhaVertical(alturaInicialDoQuadroDeItens, 751, 292); linhaVertical(alturaInicialDoQuadroDeItens, 751, 314.5); linhaVertical(alturaInicialDoQuadroDeItens, 751, 331.6); linhaVertical(alturaInicialDoQuadroDeItens, 751, 371.2); linhaVertical(alturaInicialDoQuadroDeItens, 751, 405.4); linhaVertical(alturaInicialDoQuadroDeItens, 751, 439.3); linhaVertical(alturaInicialDoQuadroDeItens, 751, 473.2); linhaVertical(alturaInicialDoQuadroDeItens, 751, 507.2); linhaVertical(alturaInicialDoQuadroDeItens, 751, 535.6); linhaVertical(alturaInicialDoQuadroDeItens, 751, 555.4); linhaVertical(alturaInicialDoQuadroDeItens, 751, larguraDoFormulario); var alturaInicialDoSetimoBloco = 793.6; //SEXTO BLOCO if(deveExibirQuadroDeCalculoDoIssqn) { linhaHorizontal(0, 0, 762.2); linhaHorizontal(0, 0, 782.2); linhaVertical(762.2, 782.2, 0); linhaVertical(762.2, 782.2, 136.1); linhaVertical(762.2, 782.2, (136.1 * 2) - 0.1); linhaVertical(762.2, 782.2, (136.1 * 3) - 0.1); linhaVertical(762.2, 782.2, larguraDoFormulario); } else { alturaInicialDoSetimoBloco = 762.2; } // SÉTIMO BLOCO linhaHorizontal(0, 0, alturaInicialDoSetimoBloco); // x1, x2, y linhaHorizontal(0, 0, 821.8); linhaVertical(alturaInicialDoSetimoBloco, 821.8, 0); linhaVertical(alturaInicialDoSetimoBloco, 821.8, 388.25); linhaVertical(alturaInicialDoSetimoBloco, 821.8, larguraDoFormulario); // Deve ser a última linha pois não estou conseguindo // retirar o tracejado após utiliza-lo pela primeira vez linhaHorizontalTracejada(0, 0, 55.32); // MARGENS DA IMPRESSORA (ÚTIL PARA DEBUG) // linhaHorizontal(0, args.larguraDaPagina, 18, 'red'); // linhaHorizontal(0, args.larguraDaPagina, args.alturaDaPagina - 18, 'red'); // linhaVertical(0, args.alturaDaPagina, 18, 'red'); // linhaVertical(0, args.alturaDaPagina, args.larguraDaPagina - 22, 'red'); normal([ 'Recebemos de', emitente.getNome(), 'os produtos e/ou serviços constantes da nota', 'fiscal eletrônica indicada abaixo.', 'Emissão:', danfe.getDataDaEmissaoFormatada(), '- Valor Total:', danfe.getValorTotalDaNotaFormatado(), '- Destinatário:', destinatario.getNome(), '- Endereço:', destinatario.getEndereco().getPrimeiraLinha() ].join(' ').toUpperCase(), 1.5, 3, 472.5, 'justify', 6.9); titulo('DANFE', 266.5, 63.5, 197, 'left', 14); normal('NF-e', 476.6, 1.8, 110, 'center', 14); normal(danfe.getNumeroFormatado(), 476.6, 22, 110, 'center', 10); normal(danfe.getSerieFormatada(), 476.6, 31.5, 110, 'center', 10); italico('IDENTIFICAÇÃO DO EMITENTE', 1, 60, 238); var temLogotipo = emitente.getLogotipo(), identificacaoDoEmitenteY = temLogotipo ? 78 : 84, identificacaoDoEmitenteX = temLogotipo ? 67 : 1.5, identificacaoDoEmitenteLargura = temLogotipo ? 172 : 237,// identificacaoDoEmitenteFonte = temLogotipo ? 0 : 1.5; if(temLogotipo) { var caminhoDoLogotipo = emitente.getLogotipo(); pdf.image(caminhoDoLogotipo, margemEsquerda + args.ajusteX + 4.5, margemTopo + args.ajusteY + args.ajusteYDoLogotipo + 78, { fit: [60, 60] }); } negrito(emitente.getNome(), identificacaoDoEmitenteX, identificacaoDoEmitenteY + args.ajusteYDaIdentificacaoDoEmitente, identificacaoDoEmitenteLargura, 'center', 8 + identificacaoDoEmitenteFonte); if(emitente.getEndereco().getPrimeiraLinha()) { normal(emitente.getEndereco().getPrimeiraLinha(), identificacaoDoEmitenteX, pdf.y - margemTopo + 2, identificacaoDoEmitenteLargura, 'center', 6 + identificacaoDoEmitenteFonte); } if(emitente.getEndereco().getSegundaLinha()) { normal(emitente.getEndereco().getSegundaLinha(), identificacaoDoEmitenteX, pdf.y - margemTopo, identificacaoDoEmitenteLargura, 'center', 6 + identificacaoDoEmitenteFonte); } var jaAdicionouEspacamento = false; if(emitente.getTelefone()) { jaAdicionouEspacamento = true; normal('Telefone: ' + emitente.getTelefoneFormatado(), identificacaoDoEmitenteX, pdf.y - margemTopo + 2, identificacaoDoEmitenteLargura, 'center', 6 + identificacaoDoEmitenteFonte); } if(emitente.getEmail()) { normal('Email: ' + emitente.getEmail(), identificacaoDoEmitenteX, pdf.y - margemTopo + (jaAdicionouEspacamento ? 0 : 2), identificacaoDoEmitenteLargura, 'center', 6 + identificacaoDoEmitenteFonte); } normal('Documento Auxiliar da Nota Fiscal Eletrônica', 241.5, 77, 99.5); normal('0 - ENTRADA', 248, 100, 99.5, 'left'); normal('1 - SAÍDA', 248, 108.5, 99.5, 'left'); negrito(danfe.getTipoFormatado(), 317.5, 96.8, 14.5, 'center', 18); // CAMPO OPCIONAL 1 - FSDA var formularioDeSeguranca = danfe.getFormularioDeSeguranca(); if(protocolo.getFormatacao()) { normal('Consulta de autenticidade no portal nacional da NF-e', 340.5, 130, 244); normal('www.nfe.fazenda.gov.br/portal ou no site da Sefaz Autorizadora', 340.5, 138, 244); } else if(formularioDeSeguranca) { pdf.font('codigoDeBarras') .fontSize(18.5) .text(barcode.code128.encode(formularioDeSeguranca.getDadosDaNfe()), 341.5, 131.5, { align: 'center', width: 250 }); } var informacoesComplementares = [ danfe.getInformacoesComplementares() ]; if(formularioDeSeguranca) { informacoesComplementares.unshift([ 'DANFE EM CONTINGÊNCIA, ', 'IMPRESSO EM DECORRÊNCIA DE PROBLEMAS TÉCNICOS: ', formularioDeSeguranca.getJustificativa().toUpperCase(), ].join('')); } normal(informacoesComplementares.join(' - '), 1, alturaInicialDoSetimoBloco + 7.5, 386, 'justify', 6); normal(danfe.getNumeroFormatado(), 241.2, 119.5, 98.5, 'center', 10); normal(danfe.getSerieFormatada(), 241.2, 129.5, 98.5, 'center', 10); //RECIBO titulo('DATA DE RECEBIMENTO', 1.5, 29, 97); titulo('IDENTIFICAÇÃO E ASSINATURA DO RECEBEDOR', 100.5, 29, 374); var codigoDeBarrasCodificado = barcode.code128.encode(danfe.getChaveDeAcesso()); if(danfe.getChaveDeAcesso()) { pdf.font('codigoDeBarras') .fontSize(args.tamanhoDoCodigoDeBarras) .text(codigoDeBarrasCodificado, args.ajusteX + margemEsquerda + 339, args.ajusteY + margemTopo + 65, { align: 'center', width: 249 }); } //PRIMEIRO BLOCO titulo('CHAVE DE ACESSO', 341.5, 105.5, 244); campo(danfe.getChaveDeAcessoFormatada(), 341.5, 114, 244); if(protocolo.getFormatacao()) { titulo('PROTOCOLO DE AUTORIZAÇÃO DE USO', 341.5, 151, 244); campo(protocolo.getFormatacao(), 341.5, 158.4, 244); } else if(formularioDeSeguranca) { titulo('DADOS DA NFE', 341.5, 151, 244); campo(formularioDeSeguranca.getDadosDaNfeFormatado(), 341.5, 158.4, 244); } titulo('NATUREZA DA OPERAÇÃO', 1.5, 151, 338); campo(danfe.getNaturezaDaOperacao(), 1.5, 158.4, 338); titulo('INSCRIÇÃO ESTADUAL', 1.5, 171, 192.5); campo(emitente.getInscricaoEstadual(), 1.5, 178.4, 192.5); titulo('INSCRIÇÃO ESTADUAL DO SUBST. TRIBUT.', 197, 171, 192.5); campo(danfe.getInscricaoEstadualDoSubstitutoTributario(), 197, 178.4, 192.5); titulo('CNPJ', 392.5, 171, 192.5); campo(emitente.getRegistroNacionalFormatado(), 392.5, 178.4, 192.5); //SEGUNDO BLOCO secao('DESTINATÁRIO / REMETENTE', 1.5, 194); titulo('NOME / RAZÃO SOCIAL', 1.5, 202, 353.5); campo(destinatario.getNome(), 1.5, 210, 353.5, 'left'); titulo('CNPJ / CPF', 358, 202, 133.5); campo(destinatario.getRegistroNacionalFormatado(), 358, 210, 133.5); titulo('DATA DA EMISSÃO', 495, 202, 90); campo(danfe.getDataDaEmissaoFormatada(), 495, 210, 90); titulo('ENDEREÇO', 1.5, 222, 272); campo(destinatario.getEndereco().getPrimeiraLinha(), 1.5, 230, 272, 'left', args.tamanhoDaFonteDoCampo - 0.5); titulo('BAIRRO / DISTRITO', 276, 222, 119); campo(destinatario.getEndereco().getBairro(), 276, 230, 119); titulo('CEP', 398, 222, 93); campo(destinatario.getEndereco().getCepFormatado(), 398, 230, 93); titulo('DATA DA SAÍDA', 495, 222, 90); campo(danfe.getDataDaEntradaOuSaidaFormatada(), 495, 230, 90); titulo('MUNICÍPIO', 1.5, 242, 272); campo(destinatario.getEndereco().getMunicipio(), 1.5, 250, 272, 'left'); titulo('UF', 276, 242, 20); campo(destinatario.getEndereco().getUf(), 276, 250, 20); titulo('FONE / FAX', 299, 242, 96); campo(destinatario.getTelefoneFormatado(), 299, 250, 96); titulo('INSCRIÇÃO ESTADUAL', 398, 242, 93); campo(destinatario.getInscricaoEstadual(), 398, 250, 93); titulo('HORA DA SAÍDA', 495, 242, 90); campo(danfe.getHorarioDaEntradaOuSaida(), 495, 250, 90); //TERCEIRO BLOCO secao('CÁLCULO DO IMPOSTO', 1.5, 261.5); titulo('BASE DE CÁLCULO DO ICMS', 1.5, 270, 84); campo(impostos.getBaseDeCalculoDoIcmsFormatada(), 1.5, 278, 84, 'right'); titulo('VALOR DO ICMS', 89, 270, 84); campo(impostos.getValorDoIcmsFormatado(), 89, 278, 84, 'right'); titulo('BASE DE CÁLC. ICMS S.T.', 177, 270, 84); campo(impostos.getBaseDeCalculoDoIcmsStFormatada(), 177, 278, 84, 'right'); titulo('VALOR DO ICMS SUBST.', 265, 270, 84); campo(impostos.getValorDoIcmsStFormatado(), 265, 278, 84, 'right'); titulo('VALOR IMP. IMPORTAÇÃO', 353, 270, 84); campo(impostos.getValorDoImpostoDeImportacaoFormatado(), 353, 278, 84, 'right'); titulo('VALOR DO PIS', 441, 270, 47); campo(impostos.getValorDoPisFormatado(), 441, 278, 47, 'right'); titulo('VALOR TOTAL DOS PRODUTOS', 492, 270, 93); campo(danfe.getValorTotalDosProdutosFormatado(), 492, 278, 93, 'right'); titulo('VALOR DO FRETE', 1.5, 290, 84); campo(danfe.getValorDoFreteFormatado(), 1.5, 298, 84, 'right'); titulo('VALOR DO SEGURO', 89, 290, 84); campo(danfe.getValorDoSeguroFormatado(), 89, 298, 84, 'right'); titulo('DESCONTO', 177, 290, 84); campo(danfe.getDescontoFormatado(), 177, 298, 84, 'right'); titulo('OUTRAS DESPESAS', 265, 290, 84); campo(danfe.getOutrasDespesasFormatado(), 265, 298, 84, 'right'); titulo('VALOR TOTAL DO IPI', 353, 290, 84); campo(impostos.getValorTotalDoIpiFormatado(), 353, 298, 84, 'right'); titulo('VALOR DA COFINS', 440.5, 290.5, 47, null, args.tamanhoDaFonteDoTitulo - 1); campo(impostos.getValorDaCofinsFormatado(), 440.5, 298, 47, 'right'); titulo('VALOR TOTAL DA NOTA', 492, 290, 93); campo(danfe.getValorTotalDaNotaFormatado(false), 492, 298, 93, 'right'); //QUARTO BLOCO secao('TRANSPORTADOR / VOLUMES TRANSPORTADOS', 1.5, 312.5); titulo('NOME / RAZÃO SOCIAL', 1.5, 321, 166.5); campo(transportador.getNome(), 1.5, 329, 166.5, 'left'); titulo('FRETE POR CONTA', 171.5, 321, 85); campo(danfe.getModalidadeDoFreteFormatada(), 171.5, 329, 85); titulo('CÓDIGO ANTT', 259.5, 321, 84); campo(transportador.getCodigoAntt(), 259.5, 329, 84); titulo('PLACA DO VEÍCULO', 347.5, 321, 84); campo(transportador.getPlacaDoVeiculoFormatada(), 347.5, 329, 84); titulo('UF', 435.5, 321, 19.5); campo(transportador.getUfDaPlacaDoVeiculo(), 435.5, 329, 19.5); titulo('CNPJ / CPF', 458, 321, 126.5); campo(transportador.getRegistroNacionalFormatado(), 458, 329, 126.5); titulo('ENDEREÇO', 1.5, 341, 254); campo(transportador.getEndereco().getPrimeiraLinha(), 1.5, 349, 254, 'left', args.tamanhoDaFonteDoCampo - 0.5); titulo('MUNICÍPIO', 259.5, 341, 172); campo(transportador.getEndereco().getMunicipio(), 259.5, 349, 172); titulo('UF', 435.5, 341, 19.5); campo(transportador.getEndereco().getUf(), 435.5, 349, 19.5); titulo('INSCRIÇÃO ESTADUAL', 458, 341, 126.5); campo(transportador.getInscricaoEstadual(), 458, 349, 126.5); titulo('QUANTIDADE', 1.5, 361, 56.5); campo(volumes.getQuantidadeFormatada(), 1.5, 369, 56.5); titulo('ESPÉCIE', 60.8, 361, 96); campo(volumes.getEspecie(), 60.8, 369, 96); titulo('MARCA', 160, 361, 96); campo(volumes.getMarca(), 160, 369, 96); titulo('NUMERAÇÃO', 259.5, 361, 96); campo(volumes.getNumeracao(), 259.5, 369, 96); titulo('PESO BRUTO', 358.5, 361, 112.5); campo(volumes.getPesoBruto(), 358.5, 369, 112.5); titulo('PESO LÍQUIDO', 474.5, 361, 110.5); campo(volumes.getPesoLiquido(), 474.5, 369, 110.5); var alturaDaSecaoDosItens = 383, alturaDosTitulosDosItens; if(fatura || duplicatas.length) { secao('FATURA / DUPLICATAS', 1.5, 383); alturaDaSecaoDosItens += alturaDoBlocoFaturaDuplicatas; } if(fatura) { var dadosDaFatura = []; if(fatura.getNumero()) { dadosDaFatura.push('NÚMERO: ' + fatura.getNumero()); } if(fatura.getNumero()) { dadosDaFatura.push('VALOR ORIGINAL: ' + fatura.getValorOriginalFormatado()); } if(fatura.getNumero()) { dadosDaFatura.push('VALOR DO DESCONTO: ' + fatura.getValorDoDescontoFormatado()); } if(fatura.getNumero()) { dadosDaFatura.push('VALOR LÍQUIDO: ' + fatura.getValorLiquidoFormatado()); } if(fatura.getFormaDePagamento()) { dadosDaFatura.push('PAGAMENTO: ' + fatura.getFormaDePagamento()); } dadosDaFatura = dadosDaFatura.join(' - '); if(dadosDaFatura) { negrito(dadosDaFatura, 1.5, 390, larguraDoFormulario, 'left'); } } alturaDosTitulosDosItens = alturaDaSecaoDosItens + 12; // QUINTO BLOCO - LISTA DE PRODUTOS secao('DADOS DOS PRODUTOS / SERVIÇOS', 1.5, alturaDaSecaoDosItens); titulo('CÓDIGO', 1.5, alturaDosTitulosDosItens, 50.5, args.alinhamentoDoTituloDaTabela); titulo('DESCRIÇÃO DO PRODUTO / SERVIÇO', 55, alturaDosTitulosDosItens, 179, args.alinhamentoDoTituloDaTabela); titulo('NCM/SH', 236.5, alturaDosTitulosDosItens, 31.5, args.alinhamentoDoTituloDaTabela); titulo('O/CST', 270.5, alturaDosTitulosDosItens, 20, args.alinhamentoDoTituloDaTabela); titulo('CFOP', 293.5, alturaDosTitulosDosItens, 19.5, args.alinhamentoDoTituloDaTabela); titulo('UN.', 316, alturaDosTitulosDosItens, 14.5, args.alinhamentoDoTituloDaTabela); titulo('QUANT.', 333, alturaDosTitulosDosItens, 37, args.alinhamentoDoTituloDaTabela); titulo('VALOR UNIT.', 373, alturaDosTitulosDosItens - 4, 31.5, args.alinhamentoDoTituloDaTabela); titulo('VALOR TOTAL', 407.5, alturaDosTitulosDosItens - 4, 31.5, args.alinhamentoDoTituloDaTabela); titulo('B. CÁLC. ICMS', 441.5, alturaDosTitulosDosItens - 4, 31.5, args.alinhamentoDoTituloDaTabela); titulo('VALOR ICMS', 475, alturaDosTitulosDosItens - 4, 31.5, args.alinhamentoDoTituloDaTabela); titulo('VALOR IPI', 508, alturaDosTitulosDosItens - 4, 28, args.alinhamentoDoTituloDaTabela); titulo('ALÍQ. ICMS', 532, alturaDosTitulosDosItens - 4, 28, args.alinhamentoDoTituloDaTabela); titulo('ALÍQ. IPI', 557, alturaDosTitulosDosItens, 28, args.alinhamentoDoTituloDaTabela); // SEXTO BLOCO if(deveExibirQuadroDeCalculoDoIssqn) { secao('CÁLCULO DO ISSQN', 1.5, 754.5); titulo('INSCRIÇÃO MUNICIPAL', 1.5, 763, 132.5); campo(emitente.getInscricaoMunicipal(), 1.5, 771, 132.5, 'left'); titulo('VALOR TOTAL DOS SERVIÇOS', 137.5, 763, 132.5); campo(danfe.getValorTotalDosServicosFormatado(), 137.5, 771, 132.5, 'right'); titulo('BASE DE CÁLCULO DO ISSQN', 273.5, 763, 132.5); campo(impostos.getBaseDeCalculoDoIssqnFormatada(), 273.5, 771, 132.5, 'right'); titulo('VALOR TOTAL DO ISSQN', 409.5, 763, 175.5); campo(impostos.getValorTotalDoIssqnFormatado(), 409.5, 771, 175.5, 'right'); } var alturaDaSecaoDoSetimoBloco = 786, alturaDosTitulosDoSetimoBloco; if(!deveExibirQuadroDeCalculoDoIssqn) { alturaDaSecaoDoSetimoBloco = 754; } alturaDosTitulosDoSetimoBloco = alturaDaSecaoDoSetimoBloco + 9; // SÉTIMO BLOCO secao('DADOS ADICIONAIS', 1.5, alturaDaSecaoDoSetimoBloco); titulo('INFORMAÇÕES COMPLEMENTARES', 1.5, alturaDosTitulosDoSetimoBloco, 385); titulo('RESERVADO AO FISCO', 390, alturaDosTitulosDoSetimoBloco, 195); if(args.creditos) { italico(args.creditos, 1.5, 827, larguraDoFormulario); } }
PdfInvoice.createInvoice = function (letter, callback) { try { var PDFDocument = require('pdfkit'); var doc = new PDFDocument({ size: 'A4' }); // Set some meta data doc.info['Title'] = 'Mils Invoice'; doc.info['Author'] = 'Mils'; // Register a font name for use later doc.registerFont('OpenSans-Regular', Config.getBasePath() + '/util/pdf/invoice/fonts/OpenSans-Regular.ttf'); doc.registerFont('OpenSans-Light', Config.getBasePath() + '/util/pdf/invoice/fonts/OpenSans-Light.ttf'); doc.registerFont('OpenSans-Bold', Config.getBasePath() + '/util/pdf/invoice/fonts/OpenSans-Bold.ttf'); // Draw Images doc.image(Config.getBasePath() + '/util/pdf/invoice/assets/logo.png', 234, 21, { width: 125.88 }).image(Config.getBasePath() + '/util/pdf/invoice/assets/box.png', 48, 446, { width: 497.765 }); //.fontSize(25) //.text('Some text with an embedded font!', 100, 100) //.fontSize(18) //.text('PNG and JPEG images:'); // Sender doc.font('OpenSans-Light').fontSize(10).fillColor("#3470B8").text('Mils | Alexander-Derek Rein | Irmgardstr. 15 | 8179 Munich | Germany | VAT-ID DE298651109', 49.235, 184.6); // FaxRecipient var paragraphGap = 0.002; doc.fontSize(21).fillColor("#000000").text(letter.issuer.name, 49.235, 212.539).moveDown(paragraphGap).text(letter.issuer.address1).moveDown(paragraphGap); if (typeof letter.issuer.address2 !== 'undefined') { doc.text(letter.issuer.address2).moveDown(paragraphGap); } doc.text(letter.issuer.postalCode + " " + letter.issuer.city).moveDown(paragraphGap).text(letter.issuer.country); // Bill # doc.fontSize(36).fillColor("#3470B8").text('Invoice # ' + letter.invoiceNumber, 49.235, 387.033); // Date var date = new Date(); doc.font('OpenSans-Regular').fontSize(21).fillColor("#000000").text(date.getDate() + "." + (date.getMonth() + 1) + "." + date.getFullYear(), 346.095, 404.033, { width: 200, align: 'right' }); var description = letter.pageCount + " pages to " + letter.recipient.countryIso; if (letter.pageCount == 1) { description = letter.pageCount + " page to " + letter.recipient.countryIso; } // Bill Content doc.font('OpenSans-Regular').fontSize(12).fillColor("#000000").text(description, 71, 511).text(letter.financialInformation.net + '€', 479, 511).text("VAT (" + letter.financialInformation.vatRate.toString().replace("0.", "") + "%)", 71, 530).text(letter.financialInformation.vat + '€', 479, 530); if (letter.financialInformation.settlementCurrency === 0 /* EUR */) { // Final Amount doc.fontSize(18).fillColor("#3470B8").text('Final Amount', 49.235, 626.458).text(letter.financialInformation.price + '€', 432.095, 626.458, { width: 100, align: 'right' }).fillColor("#000000").fontSize(14).text("Your credit card was charged with the amount due.", 49.235, 650.464); } else { // Final Amount doc.fontSize(18).fillColor("#3470B8").text('Final Amount', 49.235, 626.458).text(letter.financialInformation.price + '€', 432.095, 626.458, { width: 100, align: 'right' }).text('Final Amount in ' + CurrencyConverter.convertCurrencyTypeToString(letter.financialInformation.settlementCurrency), 49.235, 656.458).text(letter.financialInformation.priceInSettlementCurrency, 432.095, 656.458, { width: 100, align: 'right' }).fillColor("#000000").fontSize(14).text("Your credit card was charged with the amount due.", 49.235, 680.464); } // Footer doc.font('OpenSans-Bold').fontSize(18).fillColor("#3470B8").text('Thank you for using Mils!', 49.235, 704.458); doc.font('OpenSans-Regular').fontSize(14).fillColor("#000000").text('Inquiries? Errors? Problems? Please get in touch via ', 49.235, 731.458).fillColor("#3470B8").text("*****@*****.**", 385.235, 731.458).link(385.235, 731.458, 85, 20, "mailto:billing@milsapp.com"); doc.output(function (data) { callback(undefined, data); }); } catch (err) { callback(err); } };
_.each(entries, function(entry) { var firstColumn = col % 4 === 0; var lastColumn = col % 4 === 3; var keepDataWithImage = lastColumn && options.items && entry.type === 'image' && entry.page === 0; if (firstColumn || keepDataWithImage) { doc.addPage(); x = doc.page.margins.left; y = doc.page.margins.top; col = 0; } if (entry.type === 'image') { doc.font('Helvetica-Bold').fontSize(14); if (!entry.first) { doc.text('Page ' + entry.page, x, y, { width: colWidth, lineBreak: false, ellipsis: true }); } else if (entry.first !== entry.last) { doc.text('Items ' + entry.first + '-' + entry.last, x, y, { width: colWidth, lineBreak: false, ellipsis: true }); } else { doc.text('Item ' + entry.first, x, y, { width: colWidth, lineBreak: false, ellipsis: true }); } doc.image(ctx.images[entry.image], x, y + doc.currentLineHeight() * 1.6, { fit: [colWidth, colHeight - doc.currentLineHeight()] }); doc.fontSize(10); } if (entry.type === 'item') { doc.font('Helvetica-Bold').fontSize(14); doc.text('Item ' + entry.number, x, y, { height: doc.currentLineHeight(), width: colWidth, lineBreak: false, ellipsis: true }); y += doc.currentLineHeight(true) * 1.6; doc.fontSize(10); _.each([ { label: 'Name', value: formatString(entry.item.name) }, { label: 'Vendor', value: formatString(entry.item.vendor) }, { label: 'Total', value: formatAmount(entry.item.total) + formatAmountParens(entry.item.totalRequested) }, { label: 'Date', value: formatDate(entry.item.date) }, { label: 'Type', value: morph.toTitle(formatString(entry.item.type)) }, { label: 'Payment', value: formatString(entry.item.paymentType) }, { label: 'City', value: formatString(entry.item.city) }, { label: 'State', value: formatString(entry.item.state) }, { label: 'Tax', value: formatAmount(entry.item.tax) }, { label: 'Tax 2', value: formatAmount(entry.item.additionalTax) }, { label: 'Tip', value: formatAmount(entry.item.tip) }, { label: 'Category', value: formatString(entry.item.category) }, { label: 'Billable', value: formatYesNo(entry.item.billable) }, { label: 'Reimbursable', value: formatYesNo(entry.item.reimbursable) }, ], function(line) { doc.font('Helvetica-Bold').text(line.label, x, y, { width: colWidth }); var labelWidth = doc.widthOfString(line.label); doc.font('Helvetica').text(line.value, x + labelWidth, y, { height: doc.currentLineHeight(), width: colWidth - labelWidth, align: 'right', ellipsis: true }); y += doc.currentLineHeight(true) * 1.6; }); doc.font('Helvetica-Bold').text('Notes', x, y); y += doc.currentLineHeight(true) * 1.6; doc.font('Helvetica').text(formatString(entry.item.comments), x, y, { width: colWidth, height: colHeight - y + doc.page.margins.top, ellipsis: true }); } col++; x += colWidth + colPadding; y = doc.page.margins.top; });
var stream; if(200 > 100) { // Create a document var doc = new PDFDocument(); stream = doc.pipe(fs.createWriteStream('wsearches/1.pdf')); var marginLeft = 50; var marginTop = 50; // draw some text doc.fontSize(25) .text('data.title', marginLeft, marginTop); doc.image('wsearches/717cd105dd1c44bf821928df9ec79353.png', marginLeft, 50 + marginTop, {fit: [500, 480]}); // and some justified text wrapped into columns var words = ['test','tes']; var lineHeight = 3; var columns = 3; doc.text('', marginLeft, 550 + marginTop) .fontSize(10) .text(words.join('\n'), { width: 412, align: 'left', indent: 30, columns: columns, lineGap: lineHeight, height: 100,
function generateConfomidadReporte(data,res) { var paginas = 0; var initTabla = 0; var doc = new PDFDocument({size: [612.00, 792.00],margin:30} ) doc.pipe(res) doc.fontSize(7) doc.lineWidth(1) doc.rect(30, 40, 555, 700).stroke() doc.rect(40, 50, 535, 680).stroke() doc.image('app/static/image/pemex_logo.png', 50, 55,{width: 90,height:45} ) doc.text("FI-001",290,70) doc.text("\"REPORTE DE CONFORMIDAD \"",255,80) doc.text("ORGANISMO: PEMEX REFINACIÓN",50,110) doc.text("GERENCIA: PEMEX LOGISTICA",50,124) doc.text("SUBGERENCIA:",50,146) doc.text("SUPTCIA/DEPTO: Terminales de Almacenamieto y Reparto ",50,167) doc.text("de la SAR de Pemex Refinación ",50,176) doc.rect(48, 107, 210, 12).stroke() doc.rect(48, 119, 210, 22).stroke() doc.rect(48, 141, 210, 22).stroke() doc.rect(48, 163, 210, 22).stroke() doc.text("CONTRATO: 5100305278 ",50,198) doc.text("SOLPE: " + data.solpe ,50,210) doc.text("ORDEN DE SURTIMEINTO: " + data.ordenSurtimiento ,50,222) doc.text("MONTO DEL CONTRATO: $6,523,479,00 USD " ,50,234) doc.text("MONTO OS: " + data.montoOS ,50,246) doc.text("PEDIDO ASOCIADO: " + data.pedidoAsociado ,50,258) doc.rect(48, 195, 180, 12).stroke() doc.rect(48, 207, 180, 12).stroke() doc.rect(48, 219, 180, 12).stroke() doc.rect(48, 231, 180, 12).stroke() doc.rect(48, 243, 180, 12).stroke() doc.rect(48, 255, 180, 12).stroke() doc.text("REPORTE No. ___________________________",400,88) doc.text(data.noReporte,490,88) doc.text("LUGAR: ________________________________________________________",310,110) doc.fontSize(4); doc.text("DIA MES AÑO",485,123) doc.fontSize(7); doc.text("Mexico D.F.",400,110) doc.text(fecha.format(data.fecha, 'DD MMMM YYYY'),410,110,{width: 220,align: 'center'}) doc.text("FECHA RECIBO DE SOLICITUD DE INSPECCIÓN: _____________________",310,132) doc.fontSize(4); doc.text("DIA MES AÑO",485,145) doc.fontSize(7); doc.text(fecha.format(data.fecha, 'DD MMMM YYYY'),410,132,{width: 220,align: 'center'}) doc.text("FECHA DE FORMALIZACIÓN DEL CONTRATO: _____________________",310,155) doc.fontSize(4); doc.text("DIA MES AÑO",485,168) doc.fontSize(7); doc.text("09 Noviembre 2015",485,155) doc.text("FECHA DE RECEPCIÓN DE CONTRATO/S: _____________________",310,177) doc.text("09 Noviembre 2015",485,177) doc.rect(320, 195, 234, 12).stroke() doc.rect(320, 207, 234, 12).stroke() doc.rect(320, 219, 90, 12).stroke() doc.rect(410, 219, 144, 12).stroke() doc.rect(320, 231, 90, 12).stroke() doc.rect(410, 231, 144, 12).stroke() doc.text("RAZON SOCIAL",415,198) doc.text("SYM SERVICIOS INTEGRALES SA DE CV",375,210) doc.text("RFC" , 485,222) doc.text("CLAVE PROVEEDOR" ,332,222) doc.text("1020236" ,345,234) doc.text("SSI070607P46" , 470,234) doc.rect(48, 275, 30, 14).stroke() doc.rect(78, 275, 150, 14).stroke() doc.rect(228, 275, 30, 14).stroke() doc.rect(258, 275, 62, 14).stroke() doc.rect(320, 275, 62, 14).stroke() doc.rect(382, 275, 62, 14).stroke() doc.rect(444, 275, 110, 14).stroke() doc.fontSize(5); doc.text("PARTIDA O POSICIÓN",50,278,{width: 30}) doc.text("DESCRIPCION DEL BIEN O SERVICIO",80,280,{width: 150,align: 'center'}) doc.text("CANTIDAD",228,280,{width: 30,align: 'center'}) doc.text("UNIDAD",258,280,{width: 62,align: 'center'}) doc.text("NO. DE REMISIÓN Y/O FACTURA",320,278,{width: 62,align: 'center'}) doc.text("FECHA DE INSPECCIÓN O SUPERVISIÓN",382,278,{width: 63,align: 'center'}) doc.text("IMPORTE DE LOS INSPECCIONADO O SUPERVISADO",444,278,{width: 110,align: 'center'}) doc.fontSize(7); var tableHeight = 0, extra =0; for(var i in data.data){ var top = 0; var salto = 0; var skip = 9.8; for (j=0;j<i;j++){ top += Math.ceil(data.data[j].descripcion.length/48)+1 } tableHeight = ((skip*(top+Math.ceil(data.data[i].descripcion.length/48)+1))+salto)+(extra*paginas) if(tableHeight > 400){ extra = tableHeight-265-(tableHeight-400); var secondTable = 0 ; if(paginas > 0 ) secondTable = 230; doc.rect(48, 289-secondTable, 30, 250+extra+secondTable).stroke() doc.rect(78, 289-secondTable, 150, 250+extra+secondTable).stroke() doc.rect(228, 289-secondTable, 30, 250+extra+secondTable).stroke() doc.rect(258, 289-secondTable, 62, 250+extra+secondTable).stroke() doc.rect(320, 289-secondTable, 62, 250+extra+secondTable).stroke() doc.rect(382, 289-secondTable, 62, 250+extra+secondTable).stroke() doc.rect(444, 289-secondTable, 110, 250+extra+secondTable).stroke() doc.text("SI LOS SELLOS EN ESTE DOCUMENTO NO ESTAN EN ORIGINAL, NO ES UN DOCUMENTO CONTROLADO",30,745) doc.addPage(); paginas++; extra = -600+(tableHeight-400); if(paginas>1) extra = -550+(tableHeight-400); tableHeight = ((skip*(top+Math.ceil(data.data[i].descripcion.length/48)+1))+salto)+(extra*paginas) doc.rect(30, 40, 555, 700).stroke() doc.rect(40, 50, 535, 680).stroke() } doc.text(data.data[i].partida,50,(295+(skip*top)+salto)+(extra*paginas),{width: 30,align: 'center'}) doc.text(data.data[i].descripcion,85,(295+(skip*top)+salto)+(extra*paginas),{width: 135,align: 'justify'}) doc.text(data.data[i].cantidad,228,(295+(skip*top)+salto)+(extra*paginas),{width: 30,align: 'center'}) doc.text(data.data[i].unidad,258,(295+(skip*top)+salto)+(extra*paginas),{width: 62,align: 'center'}) doc.text(data.data[i].noRemFac,320,(295+(skip*top)+salto)+(extra*paginas),{width: 62,align: 'center'}) doc.text(data.data[i].fecha,382,(295+(skip*top)+salto)+(extra*paginas),{width: 63,align: 'center'}) doc.text(data.data[i].importe,444,(295+(skip*top)+salto)+(extra*paginas),{width: 100,align:'right'}) } if(paginas>0){ extra = tableHeight -240; initTabla = 230; } if(tableHeight>250) extra = tableHeight-250; doc.rect(48, 289-initTabla, 30, 250+extra+initTabla).stroke() doc.rect(78, 289-initTabla, 150, 250+extra+initTabla).stroke() doc.rect(228, 289-initTabla, 30, 250+extra+initTabla).stroke() doc.rect(258, 289-initTabla, 62, 250+extra+initTabla).stroke() doc.rect(320, 289-initTabla, 62, 250+extra+initTabla).stroke() doc.rect(382, 289-initTabla, 62, 250+extra+initTabla).stroke() doc.rect(444, 289-initTabla, 110, 250+extra+initTabla).stroke() doc.rect(48, 539+extra, 334, 12).stroke() doc.rect(382, 539+extra, 62, 12).stroke() doc.rect(444, 539+extra, 110, 12).stroke() doc.rect(48, 551+extra, 334, 26).stroke() doc.fontSize(4); doc.text("DESCRIPCION DE CONFORMIDAD:",50,542+extra) doc.fontSize(5); doc.text("*SE EXIME DE TODA RESPONSABILIDAD AL PERSONAL QUE EMITE ESTE REPORTE DE CONFORMIDAD,"+ "CUANDO A LA ENTREGA DE LOS BIENES, ARRENDAMIENTOS O SERVICIOS EN DESTINO FINAL O EN LA OPERACION"+ "SE DETERMINEN FALTANTES, AVERÍAS, DISCREPANCIAS, ENTREGAS INCOMPLETAS, O SE DETECTEN FALLAS O VICIOS"+ "OCUALTOS DE ACUERDO CON LO ESTABLECIDO EN EL CONTRATO.",50,554+extra,{width: 330}) doc.fontSize(7); doc.text("TOTAL",382,542+extra,{width: 62,align:'center'}) doc.text(data.total,444,542+extra,{width: 100,align:'right'}) if(/*paginas == 0 && */tableHeight>270){ doc.text("SI LOS SELLOS EN ESTE DOCUMENTO NO ESTAN EN ORIGINAL, NO ES UN DOCUMENTO CONTROLADO",30,745) doc.addPage(); doc.rect(30, 40, 555, 700).stroke() doc.rect(40, 50, 535, 680).stroke() extra = -520 } doc.rect(48, 590+extra, 272, 90).stroke() doc.rect(320, 590+extra, 234, 90).stroke() doc.text("EMISIÓN POR PARTE DE PEMEX:",50,600+extra,{width: 270,align: 'center'}) doc.text("NOMBRE Y FIRMA _______________________________________________",55,625+extra) doc.text("FECHA _______________________________________________",55,642+extra) doc.fontSize(5); doc.text("SELLO: (cuando aplique)",55,659+extra) doc.fontSize(7); doc.text(data.nombreEmisor,100,625+extra,{width: 220,align: 'center'}) doc.text(fecha.format(data.fecha, 'DD MMMM YYYY'),100,642+extra,{width: 220,align: 'center'}) doc.text("ACEPTACIÓN DEL PROVEEDOR:",325,600+extra,{width: 230,align: 'center'}) doc.text("NOMBRE Y FIRMA ________________________________________",326,625+extra) doc.text("FECHA ________________________________________",326,642+extra) doc.text("PUESTO ________________________________________",326,659+extra) doc.text(data.nombreProveedor,340,625+extra,{width: 220,align: 'center'}) doc.text(fecha.format(data.fecha, 'DD MMMM YYYY'),340,642+extra,{width: 220,align: 'center'}) doc.text(data.puestoProveedor,340,659+extra,{width: 220,align: 'center'}) doc.fontSize(5); doc.text("*ESTE REPORTE TIENE UNA VIGENCIA DE 15 DIAS CALENDARIO A PARTIR DE SU EXPEDICIÓN",50,685+extra) doc.fontSize(7); doc.text("SI LOS SELLOS EN ESTE DOCUMENTO NO ESTAN EN ORIGINAL, NO ES UN DOCUMENTO CONTROLADO",30,745) doc.end(); }
function createPDF(stream, plane, options) { //CUSTOM FIX textures TODO move /* scale mirroring broken :-( if(plane.type === 'plane1'){ var p = getPartFromPlane(plane, 'fuselage'); var c = getPartFromPlane(plane, 'cockpit'); var l = getPartFromPlane(plane, 'left_side'); var r = getPartFromPlane(plane, 'right_side'); //copy decals var wy = 172; var ww = 370; l.decals = []; r.decals = []; c.decals = []; p.decals.forEach((d:Decal) =>{ if(d.y > wy){ if(d.x < ww){ var c1 = clone(d); c1.y = c1.y-52; c.decals.push(c1); } var dl = clone(d); dl.y = dl.y-60; l.decals.push(dl); } }); //copy textures var canvas = new Canvas(c.width, c.height); var ctx = <CanvasRenderingContext2D> canvas.getContext('2d'); var img = new Image(); img.src = p.textureBitmap; ctx.drawImage(img, 0, wy, ww, p.height-wy, 0, 120, ww, p.height-wy); ctx.scale(1, -1); ctx.drawImage(img, 0, wy, ww, p.height-wy, 0, -0, ww, -(p.height-wy)); c.textureBitmap = canvas.toDataURL(); //copy left canvas = new Canvas(c.width, c.height); ctx = <CanvasRenderingContext2D> canvas.getContext('2d'); canvas.width = l.width; canvas.height = l.height; ctx.drawImage(img, 0, wy, p.width, p.height-wy, 0, 110, p.width, p.height-wy); l.textureBitmap = canvas.toDataURL(); //copy right canvas = new Canvas(c.width, c.height); ctx = <CanvasRenderingContext2D> canvas.getContext('2d'); canvas.width = r.width; canvas.height = r.height; ctx.scale(-1, 1); ctx.drawImage(img, 0, wy, p.width, p.height-wy, 0, 110, -p.width, p.height-wy); r.textureBitmap = canvas.toDataURL(); } //fix plane1 */ var doc = new PDFDocument({ size: 'A4', layout: 'landscape' }); doc.pipe(stream); doc.info.title = 'AVION:MAKE'; doc.info.author = ''; var scale = 0.42; doc.scale(scale); if (plane.parts && options.texturePage) { doc.font('Helvetica', 62) .stroke('black') .text('AVION:MAKE ' + plane._id + ' : ' + (plane.name || ''), 50, 50, { lineBreak: false }); doc.image(exports.fablab_logo, 1600, 0); var bleed = 0; if (!options.mergePdf) { bleed = 10; } plane.parts.forEach(function (part, i) { if (part.hasOwnProperty('position2D') && part.hasOwnProperty('textureBitmap') && part.textureBitmap) { doc.image(part.textureBitmap, part.position2D.x - bleed, part.position2D.y - bleed, { width: part.width + 2 * bleed, height: part.height + 2 * bleed }); } }); } if (!options.mergePdf && options.texturePage) { doc.addPage(); doc.scale(scale); } if (plane.parts && options.cutPage) { doc.lineWidth(0.001); plane.parts.forEach(function (part) { if (part.hasOwnProperty('position2D')) { doc.translate(part.position2D.x, part.position2D.y); doc.stroke('blue'); doc.path(part.path); doc.stroke(); doc.stroke('red'); if (part.hasOwnProperty('decals')) { part.decals.forEach(function (d) { doc.rotate(d.angle, { origin: [d.x, d.y] }); if (d.text) { doc.font('Helvetica', d.size) .lineWidth(0.001) .text(d.text, d.x, d.y, { stroke: true, fill: false, lineBreak: false }); } if (d.path) { doc.translate(d.x, d.y); doc.scale(d.size); doc.path(d.path); doc.stroke(); doc.scale(1 / d.size); doc.translate(-d.x, -d.y); } doc.rotate(-d.angle, { origin: [d.x, d.y] }); }); } doc.translate(-part.position2D.x, -part.position2D.y); } }); } doc.end(); return new Promise(function (resolve, reject) { stream.on('finish', function () { resolve(); }); }); }
var PDFDocument = require('pdfkit'); var phantom = require('node-phantom'); var fs = require('fs'); /* pdfkit can create pdfs from an API object input */ var doc = new PDFDocument(); doc.pipe(fs.createWriteStream('temp/pdfkit.pdf')); doc.fontSize(100) .text('PDF?\n', {align: 'center'}) doc.fontSize(25) .text('Let\'s relax and have a beer instead :)', {align: 'center'}) doc.image('corona.jpg', 150, 250); doc.end(); /* phantomjs API can create pdfs with css/html like a webpage */ // require phantomjs to be installed on server side // see http://www.feedhenry.com/server-side-pdf-generation-node-js/ phantom.create(function(err, ph) { return ph.createPage(function(err, page) { page.set('content', '<h1>Hello Beer!</h1>') return page.render('temp/phantom.pdf', function() { // file is now written to disk ph.exit(); }); }); });
const hojaEvolucionPdf = (paciente, evoluciones, notaUrgencias) => { const hojaCartaPort = [612, 792]; const hojaCartaLan = [792, 612]; var doc = new pdf({ size: 'letter', layout: 'portrait', //size: hojaCartaPort, margin: 0, info: { Title: 'Hoja de Evolución: msi-14 v1.0', Author: 'Clínica Médica San Isidro', } }); //doc.lineWidth(3); //doc.lineJoin('round') // .rect(5, 5, 600, 750) // .stroke(); const anchoHoja = pdfTools.mmToPt(210.02); // ptos: 612; const altoHoja = pdfTools.mmToPt(297.01); // Ptos: 792; const margenIzq = 10; const margenDer = 10; const maxAncho = anchoHoja - margenDer - margenIzq; const margenSup = 10; const margenInf = 10; const maxAlto = altoHoja - margenInf - margenSup; const sizePaperLetter = '210.02x297.01'; const centroMedico = 'Médica San Isidro'; console.log('paciente: ', paciente); //console.log('evoluciones: ',evoluciones); let imgFormato = path.resolve(__dirname, '../../msiformatos/msi14.jpg'); doc.image(imgFormato, { fit: [anchoHoja, altoHoja] }); const vacio = ''; let pathCfg = path.join(__dirname, './hojaEvolucionFields.cfg'); let pages = JSON.parse(fs.readFileSync(pathCfg, 'utf-8').toString().replace(/\n|\r/g, "").trim()); ////////////// // Registrar fuente de letra // Register a font doc.registerFont('arialnarrow', 'fonts/arial-narrow.ttf'); ////////////// //for (var f = 1; f<=12; f++) { // doc // .fontSize(f) // .text('Fuente de letra Arial Narrow tamaño '+f) // .moveDown(0.5); //} // Colocr renglón en cero para saber que hay que imprimir los encabezados. doc.y = 0; linesByPage = 3; page = 0; col = 1.5; row = 7.4; rowIni = row; colIni = col; //console.log('=============================================') //console.log(doc); //console.log('=============================================') let n = 0; writeEvolucion(doc, paciente, evoluciones, pages, anchoHoja, altoHoja, n++, imgFormato, rowIni, colIni); // Stream contents to a file const fileName = 'MSI14-' + Date.now() + '.pdf'; const filePath = path.join(__dirname, '../../public/pdfs/' + fileName); doc.pipe(fs.createWriteStream(filePath)).on('finish', function () { console.log('Archivo creado satisfactoriamente ....'); //return filePath; }); doc.end(); return filePath; //var buffer = encoding.convert(data, "Latin_1") }
.then(buffer=>this.pdf.image(buffer,x,y-height,width,height))
.then(function(proyecto){ var doc = new PDFDocument({ size: 'letter', layout: 'landscape', margin: 0 }); doc.pipe(res); doc.image('./public/img/accesoslogo.png', 664, 25, {width: 100}); doc.image('./public/img/cortina-main.png', 332, 63, {width: 443}); doc.image('./public/img/cortina-box4.png', 56, 491, {width: 108}); //text headings doc.font('Helvetica-Bold') .fontSize(12) .text('Cliente: ' + proyecto.cliente, 26, 43) .text('Ubicación (ID):', 252, 43) .text('Fecha:', 513, 23) .text('No. orden:', 513, 42) .text('1. Dimensiones en cm', 24, 87) .text('2. Herraje Principal', 24, 219) .text('3. Tipo de Lámina', 24, 361) .text('4. Cobertor', 24, 449) .text('5. Accesorios', 224, 361); //Signature headings doc.font('Helvetica-Bold') .fontSize(10) .text('Nombre VENDEDOR', 24, 549) .text('Firma VENDEDOR', 224, 549) .text('Nombre SUPERVISOR', 340, 549) .text('V\xB0B\xB0 SUPERVISOR', 513, 549); //Report title //make this font oblique? doc.font('Helvetica-Bold') .fontSize(13) .text('SUBMITTAL CORTINA (ES) 1 de 2', 176, 21, {underline: true}); //Regular text doc.font('Helvetica') .fontSize(11) .text('**Cree una hoja separada para cada puerta si existe CUALQUIER diferencia**', 24, 64) .text('Cantidad: ____', 427, 64) //box 1a .text('A', 31, 105) .text('H', 31, 120) .text('CI', 31, 135) .text('CE', 31, 150) .text('Li', 31, 165) .text('Ld', 31, 180) .text('P', 31, 195) if (proyecto.cortina.cor_a) { doc.text(proyecto.cortina.cor_a + ' cm', 63, 105) } if (proyecto.cortina.cor_h) { doc.text(proyecto.cortina.cor_h + ' cm', 63, 120) } if (proyecto.cortina.cor_ci) { doc.text(proyecto.cortina.cor_ci + ' cm', 63, 135) } if (proyecto.cortina.cor_ce) { doc.text(proyecto.cortina.cor_ce + ' cm', 63, 150) } if (proyecto.cortina.cor_li) { doc.text(proyecto.cortina.cor_li + ' cm', 63, 165) } if (proyecto.cortina.cor_ld) { doc.text(proyecto.cortina.cor_ld + ' cm', 63, 180) } if (proyecto.cortina.cor_p) { doc.text(proyecto.cortina.cor_p + ' cm', 63, 195) } doc.text('ancho buque', 110, 105) .text('alto buque', 110, 120) .text('cargador superior interno', 110, 135) .text('cargador superior externo', 110, 150) .text('espacio lateral izquierdo', 110, 165) .text('espacio laterla derecho', 110, 180) .text('profundidad cielo', 110, 195) //box 1b .text('SS', 291, 90) .text('SC', 291, 105) .text('SI', 291, 120) .text('B', 291, 135) .text('Ti', 291, 150) .text('Td', 291, 165) .text('Di', 291, 180) .text('Dd', 291, 195) if (proyecto.cortina.cor_ss) { doc.text(proyecto.cortina.cor_ss + ' cm', 325, 90) }; if (proyecto.cortina.cor_sc) { doc.text(proyecto.cortina.cor_sc + ' cm', 325, 105) }; if (proyecto.cortina.cor_si) { doc.text(proyecto.cortina.cor_si + ' cm', 325, 120) }; if (proyecto.cortina.cor_b) { doc.text(proyecto.cortina.cor_b + ' cm', 325, 135) }; if (proyecto.cortina.cor_ti) { doc.text(proyecto.cortina.cor_ti + ' cm', 325, 150) }; if (proyecto.cortina.cor_td) { doc.text(proyecto.cortina.cor_td + ' cm', 325, 165) }; if (proyecto.cortina.cor_di) { doc.text(proyecto.cortina.cor_di + ' cm', 325, 180) }; if (proyecto.cortina.cor_dd) { doc.text(proyecto.cortina.cor_dd + ' cm', 325, 195) }; doc.text('lámina principal superior', 370, 90) .text('lámina secundaria', 370, 105) .text('lámina principal inferior', 370, 120) .text('ancho final libre', 370, 135) .text('tubo a agregar izquierda', 370, 150) .text('tubo a agregar derecha', 370, 165) .text('desnivel izquierdo', 370, 180) .text('desnivel derecho', 370, 195) //box 2 .text('Ciclos por hora: ' + proyecto.cortina.cor_ciclos, 31, 237, {lineGap: 1.5}) .text('Horas de uso: ' + proyecto.cortina.cor_horas, {lineGap: 1.5, indent: 20}) .text('Tipo de Guía: ' + proyecto.cortina.cor_tipo_guia, {lineGap: 1.5}) .text('Color de Herraje: ' + proyecto.cortina.cor_color_herr, {lineGap: 1.5}) .text('Columna izquierda: ' + proyecto.cortina.cor_col_izq, {lineGap: 1.5}) .text('Columna derecha: ' + proyecto.cortina.cor_col_der, {lineGap: 1.5}) .text('Cargado superior: ' + proyecto.cortina.cor_carg_sup, {lineGap: 1.5}) .text('Guía desmontable: ' + proyecto.cortina.cor_guia_des, {lineGap: 1.5}) .text('Ojos fijación: ' + proyecto.cortina.cor_ojos, 195, 268, {lineGap: 1.5}) //box 3 .text('Principal: ' + proyecto.cortina.cor_perfil_pri, 31, 379, {lineGap: 1.5}) .text('Secund: ' + proyecto.cortina.cor_perfil_sec, {lineGap: 1.5}) .text('Color exterior: ' + proyecto.cortina.cor_color_ext, {lineGap: 1.5}) .text('Color interior: ' + proyecto.cortina.cor_color_int, {lineGap: 1.5}) //box 4 .text('no lleva', 58, 468) .text(proyecto.cortina.cor_cob_color, 125, 458) //box 5 .text('Catalina', 237, 385) .text('Gancho p bajar', 237, 400) .text('Ojos de candado', 237, 415) .text('Cerradura central', 237, 430) .text('Mirilla', 237, 445) .text('Hule inferior (std.)', 237, 460) .text('Sello lateral (opc.)', 237, 475) .text(proyecto.cortina.cor_accesorio1, 237, 490) .text(proyecto.cortina.cor_accesorio2, 237, 505) .text(proyecto.cortina.cor_accesorio3, 237, 520) //radio circles //radio - main diagram, instalacion doc.circle(345, 247, 7).stroke(); if (proyecto.cortina.cor_main_radio_instal === 'option1') { doc.circle(345, 247, 4) .fillAndStroke('#777', 'black'); } doc.circle(490, 247, 7).stroke(); if (proyecto.cortina.cor_main_radio_instal === 'option2') { doc.circle(490, 247, 4) .fillAndStroke('#777', 'black'); } // radio - main diagram, izquierda doc.circle(555, 98, 7).stroke(); if (proyecto.cortina.cor_main_radio_izq === 'option1') { doc.circle(555, 98, 4) .fillAndStroke('#777', 'black'); } doc.circle(555, 152, 7).stroke(); if (proyecto.cortina.cor_main_radio_izq === 'option2') { doc.circle(555, 152, 4) .fillAndStroke('#777', 'black'); } doc.circle(555, 208, 7).stroke(); if (proyecto.cortina.cor_main_radio_izq === 'option3') { doc.circle(555, 208, 4) .fillAndStroke('#777', 'black'); } // radio- main diagram, derecha doc.circle(752, 98, 7).stroke(); if (proyecto.cortina.cor_main_radio_der === 'option1') { doc.circle(752, 98, 4) .fillAndStroke('#777', 'black'); } doc.circle(752, 152, 7).stroke(); if (proyecto.cortina.cor_main_radio_der === 'option2') { doc.circle(752, 152, 4) .fillAndStroke('#777', 'black'); } doc.circle(752, 208, 7).stroke(); if (proyecto.cortina.cor_main_radio_der === 'option3') { doc.circle(752, 208, 4) .fillAndStroke('#777', 'black'); } //radio - uniforme / combinada doc.circle(615, 302, 7).stroke(); if (proyecto.cortina.cor_main_radio_uni === 'option1') { doc.circle(615, 302, 4) .fillAndStroke('#777', 'black'); } doc.circle(680, 302, 7).stroke(); if (proyecto.cortina.cor_main_radio_uni === 'option2') { doc.circle(680, 302, 4) .fillAndStroke('#777', 'black'); } //radio - box 4 doc.circle(42, 473, 7).stroke(); if (proyecto.cortina.cor_box4_radio === 'option1') { doc.circle(42, 473, 4) .fillAndStroke( '#777', 'black'); } doc.circle(38, 510, 7).stroke(); if (proyecto.cortina.cor_box4_radio === 'option2') { doc.circle(38, 510, 4) .fillAndStroke( '#777', 'black'); } doc.circle(178, 510, 7).stroke(); if (proyecto.cortina.cor_box4_radio === 'option3') { doc.circle(178, 510, 4) .fillAndStroke( '#777', 'black'); } //radio - molding doc.circle(362, 484, 7).stroke(); if (proyecto.cortina.cor_main_radio === 'option1') { doc.circle(362, 484, 4) .fillAndStroke( '#777', 'black'); } doc.circle(398, 484, 7).stroke(); if (proyecto.cortina.cor_main_radio === 'option2') { doc.circle(398, 484, 4) .fillAndStroke( '#777', 'black'); } doc.circle(433, 484, 7).stroke(); if (proyecto.cortina.cor_main_radio === 'option3') { doc.circle(433, 484, 4) .fillAndStroke( '#777', 'black'); } doc.circle(467, 484, 7).stroke(); if (proyecto.cortina.cor_main_radio === 'option4') { doc.circle(467, 484, 4) .fillAndStroke( '#777', 'black'); } doc.circle(513, 484, 7).stroke(); if (proyecto.cortina.cor_main_radio === 'option5') { doc.circle(513, 484, 4) .fillAndStroke( '#777', 'black'); } //checkboxes - box 5 doc.rect(223, 385, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box5_check, 'catalina')) { doc.rect(223, 385, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(223, 400, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box5_check, 'gancho')) { doc.rect(223, 400, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(223, 415, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box5_check, 'ojos')) { doc.rect(223, 415, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(223, 430, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box5_check, 'cerradura')) { doc.rect(223, 430, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(223, 445, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box5_check, 'mirilla')) { doc.rect(223, 445, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(223, 460, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box5_check, 'hule')) { doc.rect(223, 460, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(223, 475, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box5_check,'sello')) { doc.rect(223, 475, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(223, 490, 7, 7).stroke(); if (proyecto.cortina.cor_accesorio1) { doc.rect(223, 490, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(223, 505, 7, 7).stroke(); if (proyecto.cortina.cor_accesorio2) { doc.rect(223, 505, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(223, 520, 7, 7).stroke(); if (proyecto.cortina.cor_accesorio3) { doc.rect(223, 520, 7, 7) .fillAndStroke( '#777', 'black'); } //grid lines doc.lineWidth(.5) .rect(18, 18, 756, 576) .stroke(); doc.moveTo(18, 545) .lineTo(774, 545) .moveTo(18, 82) .lineTo(528, 82) .moveTo(528, 82) .lineTo(528, 213) .moveTo(528, 213) .lineTo(18, 213) .moveTo(332, 213) .lineTo(332, 594) .moveTo(18, 356) .lineTo(332, 356) .moveTo(18, 445) .lineTo(216, 445) .moveTo(216, 356) .lineTo(216, 594) .moveTo(508, 38) .lineTo(650, 38) .moveTo(508, 18) .lineTo(508, 58) .moveTo(650, 18) .lineTo(650, 58) .moveTo(508, 58) .lineTo(650, 58) .moveTo(505, 545) .lineTo(505, 594) .moveTo(272, 82) .lineTo(272, 213) .stroke(); //input backgrounds doc.rect(649, 224, 21, 11).fillAndStroke('#d9d9d9'); // A1 doc.rect(649, 529, 21, 11).fillAndStroke('#d9d9d9'); // A2 doc.rect(346, 365, 21, 11).fillAndStroke('#d9d9d9'); // H1 doc.rect(472, 365, 21, 11).fillAndStroke('#d9d9d9'); // H2 doc.rect(603, 376, 21, 11).fillAndStroke('#d9d9d9'); // H3 doc.rect(354, 281, 21, 11).fillAndStroke('#d9d9d9'); // CE doc.rect(471, 285, 21, 11).fillAndStroke('#d9d9d9'); // CI doc.rect(550, 413, 21, 11).fillAndStroke('#d9d9d9'); // LI doc.rect(752, 413, 21, 11).fillAndStroke('#d9d9d9'); // LD doc.rect(518, 244, 21, 11).fillAndStroke('#d9d9d9'); // P doc.rect(667, 321, 21, 11).fillAndStroke('#d9d9d9'); // SS doc.rect(667, 371, 21, 11).fillAndStroke('#d9d9d9'); // SC doc.rect(665, 421, 21, 11).fillAndStroke('#d9d9d9'); // SI doc.rect(652, 138, 21, 11).fillAndStroke('#d9d9d9'); // B doc.rect(591, 121, 21, 11).fillAndStroke('#d9d9d9'); // TI doc.rect(699, 121, 21, 11).fillAndStroke('#d9d9d9'); // TD doc.rect(558, 503, 21, 11).fillAndStroke('#d9d9d9'); // DI doc.rect(740, 469, 21, 11).fillAndStroke('#d9d9d9'); // DD doc.fillColor('black'); // main diagram number inputs if (proyecto.cortina.cor_a) { doc.text(proyecto.cortina.cor_a, 651, 226) }; // A1 if (proyecto.cortina.cor_a) { doc.text(proyecto.cortina.cor_a, 651, 531) }; // A2 if (proyecto.cortina.cor_h) { doc.text(proyecto.cortina.cor_h, 348, 367) }; // H1 if (proyecto.cortina.cor_h) { doc.text(proyecto.cortina.cor_h, 474, 367) }; // H2 if (proyecto.cortina.cor_h) { doc.text(proyecto.cortina.cor_h, 605, 378) }; // H3 if (proyecto.cortina.cor_ce) { doc.text(proyecto.cortina.cor_ce, 356, 283) }; // CE if (proyecto.cortina.cor_ci) { doc.text(proyecto.cortina.cor_ci, 473, 287) }; // CI if (proyecto.cortina.cor_li) { doc.text(proyecto.cortina.cor_li, 552, 415) }; // LI if (proyecto.cortina.cor_ld) { doc.text(proyecto.cortina.cor_ld, 754, 415) }; // LD if (proyecto.cortina.cor_p) { doc.text(proyecto.cortina.cor_p, 520, 246) }; // P if (proyecto.cortina.cor_ss) { doc.text(proyecto.cortina.cor_ss, 668, 323) }; // SS if (proyecto.cortina.cor_sc) { doc.text(proyecto.cortina.cor_sc, 668, 373) }; // SC if (proyecto.cortina.cor_si) { doc.text(proyecto.cortina.cor_si, 666, 423) }; // SI if (proyecto.cortina.cor_b) { doc.text(proyecto.cortina.cor_b, 654, 140) }; // B if (proyecto.cortina.cor_ti) { doc.text(proyecto.cortina.cor_ti, 593, 123) }; // TI if (proyecto.cortina.cor_td) { doc.text(proyecto.cortina.cor_td, 701, 123) }; // TD if (proyecto.cortina.cor_di) { doc.text(proyecto.cortina.cor_di, 560, 505) }; // DI if (proyecto.cortina.cor_dd) { doc.text(proyecto.cortina.cor_dd, 742, 471) }; // DD // PAGE 2 doc.addPage(); doc.image('./public/img/accesoslogo.png', 664, 25, {width: 100}); doc.image('./public/img/cortina-box6.png', 31, 145, {width: 195}); doc.image('./public/img/cortina-box7.png', 266, 63, {width: 140}); doc.image('./public/img/cortina-box12.png', 281, 376, {width: 143}); doc.image('./public/img/cortina-box14-L.png',427, 79, {width: 148}); doc.image('./public/img/cortina-box15-L.png', 583, 82, {width: 191}); //Report title //make this font oblique? doc.font('Helvetica-Bold') .fontSize(13) .text('SUBMITTAL CORTINA (ES) 1 de 2', 176, 21, {underline: true}); //text headings doc.font('Helvetica-Bold') .fontSize(12) .text('Fecha:', 513, 23) .text('No. orden:', 513, 42) .text('6. Automatización', 24, 46) .text('7. Posición Motor o Catalina', 251, 46) .text('8. Medios de Activatión', 251, 190) .text('9. Sensor, Cuadro y Botonera (a máx 3m)', 24, 288) .text('10. Desinstalar', 24, 387) .text('11. Herramienta y Equipo Especial', 24, 423) .text('12. Rollo oculto -', 278, 288) .text('13. Fotos en Publica', 278, 515) .text('14. Puerta Independiente', 431, 62) .text('15. Segmentar', 591, 63) .text('16. Dibujos y Comentarios', 431, 278) .text('17. Condición Submital', 431, 479); //Signature headings doc.font('Helvetica-Bold') .fontSize(10) .text('Nombre VENDEDOR', 24, 549) .text('Firma VENDEDOR', 224, 549) .text('Nombre SUPERVISOR', 340, 549) .text('V\xB0B\xB0 SUPERVISOR', 513, 549); //Regular text doc.font('Helvetica') .fontSize(11) //box 6 .text('Modelo de motor: ' + proyecto.cortina.cor_mod_motor, 31, 64, {lineGap: 1.5}) .text('Cuadro de control: ' + proyecto.cortina.cor_caudro, {lineGap: 1.5}) .text('Sensor infrarojo: ' + proyecto.cortina.cor_sensor, {lineGap: 1.5}) .text('Banda sensible: ' + proyecto.cortina.cor_banda, {lineGap: 1.5}) .text('Cobertor motor: ' + proyecto.cortina.cor_cob_motor, {lineGap: 1.5}) //box 8 .text('Botonera: ' + proyecto.cortina.cor_bot, 251, 210, {lineGap: 1.5}) .text('Selector de llave: ' + proyecto.cortina.cor_selector, {lineGap: 1.5}) .text('Receptor remotos: ' + proyecto.cortina.cor_receptor, {lineGap: 1.5}) .text('Controles remotos: ' + proyecto.cortina.cor_controles, {lineGap: 1.5}) .text('Botonera código: ' + proyecto.cortina.cor_bot_cod, {lineGap: 1.5}) //box 9 .text(' Total: Accesos entuba y cablea', 32, 306, {lineGap: 1.5}) .text(' Básico: Accesos cablea/tubos cliente', {lineGap: 1.5}) .text(' Mínimo: Cliente cablea 100%', {lineGap: 3}) .text('Voltaje ' + proyecto.cortina.cor_volt + ' a cargo ' + proyecto.cortina.cor_volt_carg, {lineGap: 1.5}) .text('Cableados botoneras por ' + proyecto.cortina.cor_cable_carg, {lineGap: 1.5}) //box 10 .text(proyecto.cortina.cor_des, 125, 390) .text('por parte de ' + proyecto.cortina.cor_des_carg, 40, 403) //box 11 .text('Herramienta certificada', 47, 442, {lineGap: 1.5}) .text('Andamios - Escalera extensión', {lineGap: 1.5}) .text('Montacargas - ' + proyecto.cortina.cor_monta_carg, {lineGap: 1.5}) .text('Polainas, petos, guantes', {lineGap: 1.5}) .text('Conos y cinta de seguridad', {lineGap: 1.5}) .text('Vehículo 4x4', {lineGap: 1.5}) .text('Extintor') .text('Candado de breaker', 140, 527) //box 12 .text('"Offset"', 378, 289) if (proyecto.cortina.cor_offset) { doc.text(proyecto.cortina.cor_offset + ' cm', 280, 303) } doc.text('más alto de viga', 318, 303) .text('Registro en cielo razo por', 280, 318, {lineGap: 1.5}) .text('parte de ' + proyecto.cortina.cor_rollo_carg, {lineGap: 1.5}) .text('Nota: registro debe ser de', {lineGap: 1.5}) .text('lado a lado', {lineGap: 1.5}) //box 13 .text('Fotos listas', 298, 532) //box 14 .text('Puerta abre: ' + proyecto.cortina.cor_puerta, 428, 230, {lineGap: 1.5}) .text('Cerradura: ' + proyecto.cortina.cor_cerradura, {lineGap: 1.5}) .text('Cierrapuertas: ' + proyecto.cortina.cor_cierrapu, {lineGap: 1.5}) //box 16 .text(proyecto.cortina.cor_comentarios, 435, 300) //box 17 .text('Aprobado', 462, 498) .text('Aprobado c/ notas', 462, 513) .text('Rechazado', 462, 528) //radio circles doc.circle(48, 170, 7).stroke(); if (proyecto.cortina.cor_box6_radio === 'option1') { doc.circle(48, 170, 4) .fillAndStroke( '#777', 'black'); } doc.circle(149, 170, 7).stroke(); if (proyecto.cortina.cor_box6_radio === 'option2') { doc.circle(149, 170, 4) .fillAndStroke( '#777', 'black'); } doc.circle(114, 272, 7).stroke(); if (proyecto.cortina.cor_box6_radio === 'option3') { doc.circle(114, 272, 4) .fillAndStroke( '#777', 'black'); } doc.circle(262, 75, 7).stroke(); if (proyecto.cortina.cor_box7_radio === 'option1') { doc.circle(262, 75, 4) .fillAndStroke( '#777', 'black'); } doc.circle(411, 68, 7).stroke(); if (proyecto.cortina.cor_box7_radio === 'option2') { doc.circle(411, 68, 4) .fillAndStroke( '#777', 'black'); } doc.circle(408, 173, 7).stroke(); if (proyecto.cortina.cor_box7_radio === 'option3') { doc.circle(408, 173, 4) .fillAndStroke( '#777', 'black'); } doc.circle(260, 173, 7).stroke(); if (proyecto.cortina.cor_box7_radio === 'option4') { doc.circle(260, 173, 4) .fillAndStroke( '#777', 'black'); } doc.circle(440, 220, 7).stroke(); if (proyecto.cortina.cor_box14_radio === 'option1') { doc.circle(440, 220, 4) .fillAndStroke( '#777', 'black'); } doc.circle(564, 220, 7).stroke(); if (proyecto.cortina.cor_box14_radio === 'option2') { doc.circle(564, 220, 4) .fillAndStroke( '#777', 'black'); } doc.circle(619, 238, 6).stroke(); if (proyecto.cortina.cor_box15_radio === 'option1') { doc.circle(619, 238, 3) .fillAndStroke( '#777', 'black'); } doc.circle(743, 238, 6).stroke(); if (proyecto.cortina.cor_box15_radio === 'option2') { doc.circle(743, 238, 3) .fillAndStroke( '#777', 'black'); } //checkboxes - box 9 doc.rect(30, 307, 7, 7).stroke(); if (proyecto.cortina.cor_box9_radio === 'option1') { doc.rect(30, 307, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(30, 321, 7, 7).stroke(); if (proyecto.cortina.cor_box9_radio === 'option2') { doc.rect(30, 321, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(30, 335, 7, 7).stroke(); if (proyecto.cortina.cor_box9_radio === 'option3') { doc.rect(30, 335, 7, 7) .fillAndStroke( '#777', 'black'); } //checkboxes - box 11 doc.rect(30, 443, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box11_check, 'herra')) { doc.rect(30, 443, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(30, 457, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box11_check, 'andamios')) { doc.rect(30, 457, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(30, 471, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box11_check, 'monta')) { doc.rect(30, 471, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(30, 485, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box11_check, 'polainas')) { doc.rect(30, 485, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(30, 499, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box11_check, 'conos')) { doc.rect(30, 499, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(30, 513, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box11_check, 'vehiculo')) { doc.rect(30, 513, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(30, 528, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box11_check, 'extintor')) { doc.rect(30, 528, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(127, 528, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box11_check, 'candado')) { doc.rect(127, 528, 7, 7) .fillAndStroke( '#777', 'black'); } //checkbox - box 13 doc.rect(283, 532, 7, 7).stroke(); if (_.includes(proyecto.cortina.cor_box13_check, 'fotos')) { doc.rect(283, 532, 7, 7) .fillAndStroke( '#777', 'black'); } //checkbox - box 17 doc.rect(446, 499, 7, 7).stroke(); if (proyecto.cortina.cor_box17_radio === 'option1') { doc.rect(446, 499, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(446, 514, 7, 7).stroke(); if (proyecto.cortina.cor_box17_radio === 'option2') { doc.rect(446, 514, 7, 7) .fillAndStroke( '#777', 'black'); } doc.rect(446, 529, 7, 7).stroke(); if (proyecto.cortina.cor_box17_radio === 'option3') { doc.rect(446, 529, 7, 7) .fillAndStroke( '#777', 'black'); } //grid lines doc.lineWidth(.5) .rect(18, 18, 756, 576) .stroke(); doc.moveTo(18, 545) .lineTo(774, 545) .moveTo(216, 545) .lineTo(216, 594) .moveTo(332, 545) .lineTo(332, 594) .moveTo(505, 545) .lineTo(505, 594) .moveTo(508, 38) .lineTo(650, 38) .moveTo(508, 18) .lineTo(508, 58) .moveTo(650, 18) .lineTo(650, 58) //middle divider .moveTo(424, 42) .lineTo(424, 545) .moveTo(18, 42) .lineTo(424, 42) .moveTo(424, 58) .lineTo(774, 58) .moveTo(18, 285) .lineTo(424, 285) .moveTo(18, 384) .lineTo(270, 384) .moveTo(18, 420) .lineTo(270, 420) .moveTo(270, 285) .lineTo(270, 545) .moveTo(270, 512) .lineTo(424, 512) .moveTo(424, 273) .lineTo(774, 273) .moveTo(582, 58) .lineTo(582, 273) .moveTo(243, 187) .lineTo(424, 187) .moveTo(243, 187) .lineTo(243, 285) .moveTo(424, 475) .lineTo(774, 475) .stroke(); doc.rect(291, 423, 21, 12).fillAndStroke('#d9d9d9'); // CI doc.rect(301, 479, 21, 12).fillAndStroke('#d9d9d9'); // OF doc.rect(352, 363, 21, 12).fillAndStroke('#d9d9d9'); // P doc.rect(425, 159, 21, 12).fillAndStroke('#d9d9d9'); // 1 doc.rect(462, 95, 21, 12).fillAndStroke('#d9d9d9'); // 2 doc.rect(523, 95, 21, 12).fillAndStroke('#d9d9d9'); // 3 doc.rect(556, 159, 21, 12).fillAndStroke('#d9d9d9'); // 4 doc.rect(588, 184, 21, 12).fillAndStroke('#d9d9d9'); // 1 doc.rect(588, 124, 21, 12).fillAndStroke('#d9d9d9'); // 2 doc.rect(624, 90, 21, 12).fillAndStroke('#d9d9d9'); // 3 doc.rect(717, 90, 21, 12).fillAndStroke('#d9d9d9'); // 4 doc.rect(749, 124, 21, 12).fillAndStroke('#d9d9d9'); // 5 doc.rect(749, 184, 21, 12).fillAndStroke('#d9d9d9'); // 6 doc.fillColor('black'); // number inputs - box 12 if (proyecto.cortina.cor_box12_ci) { doc.text(proyecto.cortina.cor_box12_ci, 293, 425) }; if (proyecto.cortina.cor_box12_of) { doc.text(proyecto.cortina.cor_box12_of, 303, 481) }; if (proyecto.cortina.cor_box12_p) { doc.text(proyecto.cortina.cor_box12_p, 354, 365) }; // number inputs - box 14 if (proyecto.cortina.cor_box14_input1) { doc.text(proyecto.cortina.cor_box14_input1, 427, 161) }; if (proyecto.cortina.cor_box14_input2) { doc.text(proyecto.cortina.cor_box14_input2, 464, 97) }; if (proyecto.cortina.cor_box14_input3) { doc.text(proyecto.cortina.cor_box14_input3, 525, 97) }; if (proyecto.cortina.cor_box14_input4) { doc.text(proyecto.cortina.cor_box14_input4, 558, 161) }; // number inputs - box 15 if (proyecto.cortina.cor_box15_input1) { doc.text(proyecto.cortina.cor_box15_input1, 590, 186) }; if (proyecto.cortina.cor_box15_input2) { doc.text(proyecto.cortina.cor_box15_input2, 590, 126) }; if (proyecto.cortina.cor_box15_input3) { doc.text(proyecto.cortina.cor_box15_input3, 626, 92) }; if (proyecto.cortina.cor_box15_input4) { doc.text(proyecto.cortina.cor_box15_input4, 719, 92) }; if (proyecto.cortina.cor_box15_input5) { doc.text(proyecto.cortina.cor_box15_input5, 751, 126) }; if (proyecto.cortina.cor_box15_input6) { doc.text(proyecto.cortina.cor_box15_input6, 751, 186) }; doc.end(); console.log(proyecto.cortina) });
var doc_options = { size: 'A4', layout: 'landscape', info: { Title: 'big.js presentation', Author: 'bigOut' } } var doc = new PDFDocument(doc_options); var outDoc = fs.createWriteStream('bigOut.pdf'); doc.pipe(outDoc); for (var i=0; i < outputs.length; i++){ if (i > 0){ doc.addPage(); } doc.image('outputs/'+outputs[i], 0, 0, {width: 841, height: 595}); } for (var i=0; i < outDir.length; i++){ if (outDir[i].split('.')[1] === 'png'){ fs.unlink('outputs/'+outDir[i]); } } // finalize the PDF and end the stream doc.end();
.then(function(proyecto){ //pdfKit var doc = new PDFDocument({ size: 'letter' }); doc.image('./public/img/accesoslogo.png', 380, 30, {width: 200}); doc.font('Helvetica'); doc.fontSize(14); doc.text('Fecha: ' + proyecto.createdAt, 65, 180) .moveDown(); doc.text('Proyecto nombre: ' + proyecto.name) .moveDown(); doc.text('Dirección: ' + proyecto.location) .moveDown(); doc.text('Cliente: ' + proyecto.cliente) .moveDown(); doc.text('E-mail: '); doc.text('Peso total aproximado: ' + proyecto.peso + ' kg', 160, 400) .moveDown() .text('Diseño seleccionado: ' + proyecto.portonNo + ' ' + proyecto.porton); doc.text('Ancho: ' + proyecto.ancho + ' cm', 220, 525); doc.text('Alto: ' + proyecto.alto + ' cm', 430, 640); doc.moveTo(35, 350) .lineTo(577, 350); doc.moveTo(35, 490) .lineTo(577, 490); doc.lineWidth(.5) .roundedRect(35, 120, 542, 640, 5) .stroke(); doc.lineWidth(.5) .rect(150, 560, 260, 160) .fillAndStroke("white", "gray"); doc.end(); console.log('PDF ready for email!'); //attach pdf to email and send var email = new sendgrid.Email(); email.addTo (req.body.toEmail); email.setFrom ('*****@*****.**'); email.setSubject ('Reporte de Peso'); email.setText ('PDF reporte adjunto'); email.addFile ({ filename: proyecto.name + '-reporte-peso.pdf', content: doc, contentType: 'application/pdf' }); sendgrid.send(email, function(err, json){ if(err) {return console.error(err);} console.log(json); req.session.sessionFlash = { type: 'success', message: 'E-mail enviado!' }; res.redirect(303, '/api/proyectos/' + proyecto._id); }) })
results.forEach(function (result, index) { index === 0 || doc.addPage(); doc.image(result.body, 20, 20, { width: 300 }); });
fs.writeFile("public/images/out/out.png", binaryData, "binary", function (err) { if(!err){ doc.image('public/images/out/out.png', 100, 100); } ep.emitLater("completed"); });
return Bozuko.models.Contest.findById( self.contest_id, {results: 0}, function(error, contest){ if( error ) return callback( error ); var doc = new Pdf({size: 'letter', margins: {top: 20, left: 20, right: 20, bottom: 20}}); var image_base = Bozuko.dir+'/resources/images', logo_width = doc.page.width * .25; doc.info.Title = self.page.name+' Prize'; doc.info.Author = self.page.name; // before we go crazy... if( self.is_pdf && images.pdf && self.pdf_image_only ){ // we are just going to be centering the image... var image = PdfImage.open(images.pdf.path) // canvas , cw = (doc.page.width - 40) , ch = (doc.page.height - 40) , cp = cw / ch // image , iw = image.width , ih = image.height , ip = iw / ih // final w and h , w , h // width is bigger if( ip > cp ){ w = Math.min(cw, iw); h = ih * (w/iw); } else{ h = Math.min(ch, ih); w = iw * (h/ih); } doc.image(images.pdf.path, doc.page.margins.left + (cw - w) / 2, doc.page.margins.left + (ch - h) / 2, {fit: [w, h]}); return callback(null, doc.output()); } doc.registerFont('Light',Bozuko.dir+'/resources/fonts/open-sans/OpenSans-Light.ttf','OpenSansLight') doc.registerFont('Regular',Bozuko.dir+'/resources/fonts/open-sans/OpenSans-Regular.ttf','OpenSansRegular'); doc.registerFont('Bold',Bozuko.dir+'/resources/fonts/open-sans/OpenSans-Bold.ttf','OpenSansBold'); doc.registerFont('ExtraBold',Bozuko.dir+'/resources/fonts/open-sans/OpenSans-ExtraBold.ttf','OpenSansExtraBold'); // Bozuko logo // doc.image(image_base+'/logo/logo.png', 20, 20, {width: logo_width}); var margin = 45, x, y, w, h, bottom, width = doc.page.width-margin*2, col1 = .3 * width, col1_y, col2_x = col1 + (width * .05), col2 = .65 * width, col2_y, image_size = 40, start_x, start_y, logo_width = 150 ; // top of the page start_x = doc.x = margin; start_y = doc.y = margin; if( Bozuko.cfg('prize.pdf.logo') ){ // we are just going to be centering the image... var image = PdfImage.open( Bozuko.cfg('prize.pdf.logo') ) // canvas , cw = (doc.page.width - margin * 2) , ch = 100 , cp = cw / ch // image , iw = image.width , ih = image.height , ip = iw / ih // final w and h , w , h // width is bigger if( ip > cp ){ w = Math.min(cw, iw); h = ih * (w/iw); } else{ h = Math.min(ch, ih); w = iw * (h/ih); } doc.image(Bozuko.cfg('prize.pdf.logo') , doc.page.margins.left + (cw - w) / 2, doc.page.margins.left + (ch - h) / 2, {fit: [w, h]}); start_y = doc.y = h + 25; } doc .image(images.business.path, {fit: [image_size, image_size]}) ; bottom = doc.y; doc.y = start_y; doc.x+= image_size; y = doc.y + 10 doc .font('Regular') .fontSize(14) .fill('#333') .text(self.page.name, doc.x + 5, y, {width: width * .7 - image_size - 10 , align: 'left'}); bottom = Math.max( doc.y, bottom ); doc .font('Regular') .fontSize(14) .fill('#333') .text('Code: '+self.code, margin + (width * .7), y, {width: width * .3, align: 'right'}); bottom = Math.max( doc.y, bottom ); bottom+= 5; doc .save() .moveTo( margin-5, bottom ) .lineTo( margin-5 + width+10, bottom ) .fill('#999') ; doc.y = bottom+5; doc.x = margin; /* Left Column */ doc .font('Bold') .fill('#369d4e') .fontSize(20) .text('YOU WIN!', {width: col1}) .fontSize(12) .moveDown() .font('Bold') .fill('#999') .text('Name:') .font('Regular') .fill('#333') .text(user.name, {width: col1}) .moveDown() .fontSize(12) .font('Bold') .fill('#999') .text('Game:') .font('Regular') .fill('#333') .text(contest.getGame().getName(), {width: col1}) .moveDown() .font('Bold') .fill('#999') .text('Won:') .font('Regular') .fill('#333') .text(dateFormat(self.timestamp, 'mediumDate')+' '+dateFormat(self.timestamp, 'shortTime'), {width: col1}) .moveDown() ; if( !self.hide_expiration && +self.expires ) doc .font('Bold') .fill('#999') .text('Expires:', {width: col1}) .font('Regular') .fill('#333') .text(dateFormat(self.expires, 'mediumDate')+' '+dateFormat(self.expires, 'shortTime'), {width: col1}) ; /* Second Column */ col1_y = doc.y; doc.x = margin + width - col2; doc.y = bottom + 5; doc .fill('#000') .fontSize(24) .font('Bold') .text(self.name, {width: col2}) .fontSize(10) .moveDown() ; if( self.description && typeof self.description === 'string' ){ doc .fontSize(12) .font('Bold') .fill('#333') .text('Description', {width: col2}) .font('Regular') .fill('#000') .text(self.description.replace(/^\s+|\r|\s+$/g, ''), {width: col2}) //.text(self.description, {width: col2}) .moveDown() ; } if( images.pdf ){ x = doc.x; w = col2 * .6; doc.x += (col2 - w) / 2; doc .image(images.pdf.path, {width: w}) .moveDown() ; doc.x = x; } if( images.barcode ){ x = doc.x; w = col2 * .6; doc.x += (col2 - w) / 2; doc .image(images.barcode.path, {width: w}) .moveDown() ; doc.x = x; } if( self.get('is_pdf') && self.instructions ){ doc .fontSize(12) .font('Bold') .fill('#333') .text('Instructions', {width: col2}) .font('Regular') .fill('#000') .text(self.instructions, {width: col2}) ; } // lets get the bottom col2_y = doc.y; y = Math.max(col1_y, col2_y); doc .rect(margin-5, start_y-5, width+10, y - margin + 15) .stroke('#999'); return callback(null, doc.output()); });
var print = module.exports = function(content){ doc.fontSize(32); doc.font('Times-Roman'); doc.image('template2.png', 10, 10,{width: 590, height: 450}); doc.fontSize(32); //Box A doc.text("00",128,85); doc.text("00",173,85); doc.text("00",128,130); doc.text("00",173,130); doc.text("00",128,175); doc.text("00",173,175); doc.fontSize(12); doc.text("000000",170,222); //Box B doc.fontSize(32); doc.text("00",235,85); doc.text("00",280,85); doc.text("00",327,85); doc.text("00",235,130); doc.text("00",280,130); doc.text("00",327,130); doc.text("00",235,175); doc.text("00",280,175); doc.text("00",327,175); doc.fontSize(12); doc.text("000000",300,222); //Box C doc.fontSize(32); doc.text("00",386,85); doc.text("00",432,85); doc.text("00",477,85); doc.text("00",524,85); doc.text("00",386,130); doc.text("00",432,130); doc.text("00",477,130); doc.text("00",524,130); doc.text("00",386,175); doc.text("00",432,175); doc.text("00",477,175); doc.text("00",524,175); doc.fontSize(12); doc.text("000000",470,222); //Box D doc.fontSize(32); doc.text("00",53,280); doc.text("00",100,280); doc.text("00",145,280); doc.text("00",191,280); doc.text("00",237,280); doc.text("00",53,325); doc.text("00",100,325); doc.text("00",145,325); doc.text("00",191,325); doc.text("00",237,325); doc.text("00",53,370); doc.text("00",100,370); doc.text("00",145,370); doc.text("00",191,370); doc.text("00",237,370); doc.fontSize(12); doc.text("000000",160,417); //Box E doc.fontSize(32); doc.text("00",293,280); doc.text("00",339,280); doc.text("00",386,280); doc.text("00",432,280); doc.text("00",478,280); doc.text("00",523,280); doc.text("00",293,325); doc.text("00",339,325); doc.text("00",386,325); doc.text("00",432,325); doc.text("00",478,325); doc.text("00",523,325); doc.text("00",293,370); doc.text("00",339,370); doc.text("00",386,370); doc.text("00",432,370); doc.text("00",478,370); doc.text("00",523,370); doc.fontSize(12); doc.text("000000",460,417); //Box F doc.fontSize(32); doc.lineWidth(1); doc.lineCap('butt') .moveTo(607, 468) .lineTo(5, 468) .dash(5, {space: 10}) .fillAndStroke("black"); doc.image('template2.png', 10, 478,{width: 590, height: 450}); //Box A doc.text("00",128,85+467); doc.text("00",173,85+467); doc.text("00",128,130+467); doc.text("00",173,130+467); doc.text("00",128,175+467); doc.text("00",173,175+467); doc.fontSize(12); doc.text("000000",170,222+467); //Box B doc.fontSize(32); //Box B doc.text("00",235,85+467); doc.text("00",280,85+467); doc.text("00",327,85+467); doc.text("00",235,130+467); doc.text("00",280,130+467); doc.text("00",327,130+467); doc.text("00",235,175+467); doc.text("00",280,175+467); doc.text("00",327,175+467); doc.fontSize(12); doc.text("000000",300,222+467); //Box C doc.fontSize(32); doc.text("00",386,85+467); doc.text("00",432,85+467); doc.text("00",477,85+467); doc.text("00",524,85+467); doc.text("00",386,130+467); doc.text("00",432,130+467); doc.text("00",477,130+467); doc.text("00",524,130+467); doc.text("00",386,175+467); doc.text("00",432,175+467); doc.text("00",477,175+467); doc.text("00",524,175+467); doc.fontSize(12); doc.text("000000",470,222+467); //Box D doc.fontSize(32); doc.text("00",53,280+467); doc.text("00",100,280+467); doc.text("00",145,280+467); doc.text("00",191,280+467); doc.text("00",237,280+467); doc.text("00",53,325+467); doc.text("00",100,325+467); doc.text("00",145,325+467); doc.text("00",191,325+467); doc.text("00",237,325+467); doc.text("00",53,370+467); doc.text("00",100,370+467); doc.text("00",145,370+467); doc.text("00",191,370+467); doc.text("00",237,370+467); doc.fontSize(12); doc.text("000000",160,417+467); //Box E doc.fontSize(32); doc.text("00",293,280+467); doc.text("00",339,280+467); doc.text("00",386,280+467); doc.text("00",432,280+467); doc.text("00",478,280+467); doc.text("00",523,280+467); doc.text("00",293,325+467); doc.text("00",339,325+467); doc.text("00",386,325+467); doc.text("00",432,325+467); doc.text("00",478,325+467); doc.text("00",523,325+467); doc.text("00",293,370+467); doc.text("00",339,370+467); doc.text("00",386,370+467); doc.text("00",432,370+467); doc.text("00",478,370+467); doc.text("00",523,370+467); doc.fontSize(12); doc.text("000000",460,417+467); //Box F doc.fontSize(32); doc.lineWidth(1); doc.lineCap('butt') .moveTo(607, 468) .lineTo(5, 468) .dash(5, {space: 10}) .fillAndStroke("black"); doc.fontSize(12); doc.rotate(90,{origin:[100,80]}).text("000000",75,80); doc.write("Bingo1.pdf"); };
var generatePDF = function (certificate, edition, course, instructor, callback){ var urlCertificate = 'http://instructormatters.com/certificates/' + certificate.uuid; var urlCourse = 'http://instructormatters.com/courses/' + course.uuid; var doc = new Pdfkit({layout:'landscape', size:[ 572,794]}); //Register a font name for use later var editionDate = new Date(edition.date); var dateString = /.+,(.+,.+)/.exec(editionDate.toLocaleDateString())[1]; var FONT_BIG = 32; var FONT_NORMAL = 18; var FONT_LITTLE = 14; var FONT_SMALL = 12; var nameFontSize = (certificate.name.length > 39) ? FONT_NORMAL: FONT_BIG; var courseFontSize = (course.name.length > 39) ? FONT_NORMAL: FONT_BIG; var addressSize = (edition.address.length > 30) ? FONT_LITTLE: FONT_NORMAL doc.registerFont('MyriadProRegular', 'resources/fonts/mpr.ttf'); doc.registerFont('MyriadProCondRegular', 'resources/fonts/mpc.ttf'); doc.registerFont('MyriadProBold', 'resources/fonts/MyriadPro-Bold.ttf'); doc.registerFont('MyriadProCondBold', 'resources/fonts/MyriadPro-BoldCond.ttf'); doc // background .image('resources/img/bg.png', 2 ,3, {width: 790, height: 565}) // Header .font('MyriadProCondBold').fontSize(FONT_BIG) .text(' ', 0, 88, {align:'center'}) .text('InstructorMatters', {align: 'center'}) .font('MyriadProRegular').fontSize(FONT_NORMAL).text('certifies that', {align: 'center'}) .font('MyriadProBold').fontSize(nameFontSize); if (nameFontSize === FONT_NORMAL){ doc.moveDown(0.5); } doc // Student name .text( certificate.name, {align: 'center'}) .font('MyriadProRegular').fontSize(FONT_NORMAL) .text(' ', 0, 200 , {align:'center'}) // duration .text('has successfully completed the ' + course.duration + ' course', {align: 'center'}) .font('MyriadProBold').fontSize(courseFontSize); if (courseFontSize === FONT_NORMAL){ doc.moveDown(0.5); } doc // course .text( course.name, {align: 'center'}) .font('MyriadProRegular').fontSize(FONT_NORMAL) .moveDown() // instructor .text(' ', 0, 290 , {align:'center'}) .text('delivered by', {align: 'center'}) .font('MyriadProBold').text(instructor.name , {align: 'center'}) // address .font('MyriadProRegular').fontSize(addressSize).text('in ' + edition.address , {align: 'center'}) // date .font('MyriadProRegular').fontSize(FONT_NORMAL) .text('on ' + dateString , {align: 'center'}) // link .text(' ', 0, 455, {align: 'center'}) .font('MyriadProRegular').fontSize(FONT_SMALL) .text(urlCertificate, {align: 'center'}) ; async.series([ function(cb){ doc.write('certificates/' + certificate.uuid + '.pdf', cb); }], function(err, results){ callback(err,results); } ); }
exports.createDocument = function(req, res) { //generate file name var text = ""; var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for( var i=0; i < 5; i++ ) { text += possible.charAt(Math.floor(Math.random() * possible.length)); } var doc = new PDFDocument({ size: [288,432], layout: 'landscape' }); // doc.addPage({ // size: [432,288], // layout: 'landscape' // }); var s3bucket = new AWS.S3({params: {Bucket: 'postacard-heroku'}}); console.log("post length " + req.body.image.length); doc.image(new Buffer(req.body.image, "base64"), 0, 0, {width: 432, height: 288}); doc.output(function(string) { s3bucket.createBucket(function() { var data = {Key: text + ".pdf", ACL:"public-read" , Body: string}; s3bucket.putObject(data, function(err, data) { if (err) { console.log("Error uploading data: ", err); } else { console.log("Successfully uploaded pdf to myBucket/myKey"); var pdfurl = "http://s3-us-west-2.amazonaws.com/postacard-heroku/" + text + ".pdf"; res.jsonp(pdfurl); } }); }); }); // var bufs = []; // req.on('data', function(d){ // bufs.push(d); // console.log("receiving"); // }); // req.on('end', function(){ // var buf = Buffer.concat(bufs); // var s3bucket = new AWS.S3({params: {Bucket: 'postacard-heroku'}}); // doc.image((buf.image, "base64"), 100, 100).text('Full size', 100, 85); // doc.output(function(string) { // s3bucket.createBucket(function() { // var data = {Key: text + ".pdf", ACL:"public-read" , Body: string}; // s3bucket.putObject(data, function(err, data) { // if (err) { // console.log("Error uploading data: ", err); // } else { // console.log("Successfully uploaded pdf to myBucket/myKey"); // var pdfurl = "http://s3-us-west-2.amazonaws.com/postacard-heroku/" + text + ".pdf"; // res.jsonp({pdf:pdfurl}); // } // }); // }); // }); // }); }
module.exports = function createPdfOrder(res, googleDb, code, cart) { const activePromo = activePromotions(googleDb.promotions, 1)[0]; const doc = new PdfDoc({ margins: { bottom: 0 } }); doc.pipe(res); const products = parseCart(cart, googleDb); doc.registerFont('burst', `${__dirname}/../static/assets/fonts/busrt-my-bubble/burstmybubble.ttf`); doc.registerFont('burst-bold', `${__dirname}/../static/assets/fonts/busrt-my-bubble/burstmybubblebold.ttf`); doc .image(path.resolve(`${__dirname}/../static/assets/images/pdf-buy-background.png`), 0, 0, { width: 615 }); const salitre = googleDb.centers[0]; const buenaventura = googleDb.centers[2]; const marginLeft = 40; doc .fontSize(50) .fillColor(info.greenColor) .font('burst-bold') .text('ALGO ESPECIAL', marginLeft + 100, 25) .text('TE ESPERA!', marginLeft + 100, 85) .fillColor('black'); doc .fontSize(10) .font('Helvetica-Bold') .fillColor('white') .text(`${salitre.address}`, marginLeft, 160) .text(`${buenaventura.address}`, 245, 160) .fontSize(9) .font('Helvetica') .text(`TEL: ${salitre.tel}, MOV: ${salitre.mobile}`, marginLeft, 170) .text(`TEL: ${buenaventura.tel}, MOV: ${buenaventura.mobile}`, 245, 170) .text(`HORARIO:`, marginLeft, 185) .text(`HORARIO:`, 245, 185) .text(`lunes-viernes 10:00-20:00 h.`, 90, 185) .text(`lunes-viernes 10:00-19:00 h.`, 295, 185) .text(`sabado 10:00-14:00 h.`, 90, 195) .text(`sabado 10:00-14:00 h.`, 295, 195) .text(`1 hora de parking GRATIS *`, marginLeft + 420, 210); doc.text(`(*) 1 hora de parking gratis a partir de 30€`, marginLeft, 690); let y = 250; doc.font('burst'); if (products.filter(i => i.type !== 'products').length) { doc .fontSize(14) .fillColor('black') .text(`Ya puedes disfrutar de los tratamientos de In&Out!!!`, marginLeft, y); y += 15; doc .fontSize(12) .fillColor('black') .text(`Pide cita en uno de nuestros centros.`, marginLeft, y); y += 15; } else { doc .fontSize(14) .fillColor('black') .text(`Hola! Aqui tiene el codigo de compra de tu productos In&Out!!!`, marginLeft, y); y += 15; } doc .image(path.resolve(`${__dirname}/../order-qr-codes/${code}.png`), 470, y-50, { width: 100 }); const left = marginLeft; if (products.filter(i => i.type !== 'products').length) { y += 15; doc .lineWidth(30) .lineCap('butt') .strokeColor('#FFECD1') .moveTo(marginLeft, y + 7) .lineTo(470, y + 7) .stroke(); doc .fontSize(20) .font('burst-bold') .text('Esto es lo que te espera:', marginLeft + 10, y); y += 25; doc.fontSize(14); doc.font('Helvetica'); products.filter(i => i.type !== 'products') .forEach(function ({ count, price, type, title, category }) { y += 15; doc.text(`${count} x ${category ? `${category}: ` : ''}${title}`, left, y); }); y += 15; } if (products.filter(i => i.type === 'products').length) { y += 15; doc .lineWidth(15) .lineCap('butt') .strokeColor('#dddddd') .moveTo(left, y + 5) .lineTo(570, y + 5) .stroke(); doc.font('burst-bold') if (products.filter(i => i.type !== 'products').length) { doc.text('Ademas te enviaremos:', left, y); } else { doc.text('Te enviaremos:', left, y); } y += 15; doc.fontSize(14); doc.font('Helvetica'); products .filter(i => i.type === 'products') .forEach(function ({ count, price, type, title }) { y += 15; doc.text(`${count} x ${title}`, left, y); }); } if (activePromo) { doc.font('burst'); const discounts = getPromotionDiscounts(activePromo); doc .fontSize(20) .font('burst-bold') .text('Y ADEMAS NO PERDERTE:', 260, 700) .fontSize(12) .font('burst') .text(`${activePromo.titulo}`, 260, 720, { width: 300 }) .fontSize(16) .font('burst-bold') .text(`POR SOLO ${getDiscountsPrice(googleDb, discounts)}€`, 260, doc.y + 5); } doc.end(); };