コード例 #1
1
    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();
    	
    };
コード例 #2
0
ファイル: app.js プロジェクト: 1234224576/ProfileMaker
	  	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();

	  	});
コード例 #3
0
ファイル: index.js プロジェクト: baekdata/AndroidProject
 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)
 })
コード例 #4
0
ファイル: costApiHandler.js プロジェクト: sahand12/inventory
            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');
            }
コード例 #5
0
ファイル: ticket.js プロジェクト: wejs/we-plugin-ticket
    }).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);
コード例 #6
0
		.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!');
		});
コード例 #7
0
		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');
				});
			});
	  });
コード例 #8
0
ファイル: app.js プロジェクト: jacky-ttt/CodingEveryday
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();
}
コード例 #9
0
ファイル: prize.js プロジェクト: bozuko/bozuko
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();
});
コード例 #10
0
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") 
}
コード例 #11
0
		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();
			}
		})
コード例 #12
0
ファイル: geradorDePdf.js プロジェクト: brasil-js/danfe
    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);
        }
    }
コード例 #13
0
ファイル: PdfInvoice.js プロジェクト: arein/Mils-Server
    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);
        }
    };
コード例 #14
0
ファイル: pdf.js プロジェクト: gcouncil/Receipt-Organizer
    _.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;
    });
コード例 #15
0
ファイル: createPdf.js プロジェクト: bholdt/Wordsearch
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,
コード例 #16
0
ファイル: reporte.js プロジェクト: edwincrug/talleres-v2
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();
}
コード例 #17
0
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();
        });
    });
}
コード例 #18
0
ファイル: main.js プロジェクト: closrks/nodepdfsln
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();
    });
  });
});
コード例 #19
0
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") 
}
コード例 #20
0
ファイル: index.js プロジェクト: lalalic/we-edit
			.then(buffer=>this.pdf.image(buffer,x,y-height,width,height))
コード例 #21
0
		.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)
		});
コード例 #22
0
ファイル: bigout.js プロジェクト: abenrob/bigout
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();
コード例 #23
0
		.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);
			})
		})	
コード例 #24
0
ファイル: labels.js プロジェクト: liefl/detoxwater
 results.forEach(function (result, index) {
   index === 0 || doc.addPage();
   doc.image(result.body, 20, 20, {
     width: 300
   });
 });
コード例 #25
0
 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");
 });
コード例 #26
0
ファイル: prize.js プロジェクト: bozuko/bozuko
	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());
	});
コード例 #27
0
ファイル: cprint.js プロジェクト: demangel09/Tambola
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");
};
コード例 #28
0
  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);
      }
      );
  }
コード例 #29
0
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});
  //         }
  //       });
  //     });
  //   });
  // });
}
コード例 #30
0
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();
};