1 The PDF document

The following example shows how to generate tags in a PDF.

You will see how to:

  • Create svg from the code bar using an SVG() function.
  • Create the structure to contain the tag.
  • Create a table and use colspan to adjust the columns as needed.

2 The source code

Copy
var template = new Ax.fop.SinglePageTemplate("A4");

template.setRoot(root => {
    root.getSimplePageMaster().getRegionBefore().setExtent(1.5);
    root.getSimplePageMaster().getRegionAfter().setExtent(1.5);
    root.getSimplePageMaster().getRegionStart().setExtent(1.0);
    root.getSimplePageMaster().getRegionEnd().setExtent(1.0);
    root.getSimplePageMaster().setMargins(0, 0, 0, 0);
});

template.setBody( body => {
    //Se declara la tabla principal
    var t1 = body.addTable();

    //Adición de 3 columnas
    t1.addColumn().setColumnWidth(7);
    t1.addColumn().setColumnWidth(7);
    t1.addColumn().setColumnWidth(7);

    //Se imprimen 8 filas
    for(let cont = 0; cont < 8; cont++){
        t1.getBody().addRow(
            ``,
            ``,
            ``
        ).forEach(cell => {
            var etiqueta = cell;
                etiqueta.setPaddingBottom("21pt");
            
            //Se declara la tabla para la etiqueta
            var t2 = etiqueta.addTable();

            //Adición de columnas
            t2.addColumn().setColumnWidth(2.5);
            t2.addColumn().setColumnWidth(4.5);

            //Row 1
            var t2row1 = t2.getBody().addRow();
            var t2c11 = t2row1.addCell().setColspan(2).setFontSize('7pt').setLetterSpacing(0.5);
                t2c11.addBlock('AU- Réactif Phosphore 4 x590 tests');

            //Row 2
            var t2row2 = t2.getBody().addRow();
            var t2c21 = t2row2.addCell().setColspan(2).setFontSize('7pt').setPaddingTop('2pt');
                t2c21.addBlock('BECKMAN COULTER (0SR61222)');

            //Row 3
            var t2row3 = t2.getBody().addRow();
            var t2c31 = t2row3.addCell().setColspan(2).setFontSize('7pt').setPaddingTop('2pt').setLetterSpacing(0.5);
                t2c31.addBlock('10-07-19 FR131 BR3449 C4');

            //Row 4
            var t2row4 = t2.getBody().addRow();
            var t2c41 = t2row4.addCell().setColspan(2);
                t2c41.addBlock()
                    .setTextAlign("center")
                    .addInstreamForeignObject(new Ax.barcode.SVG('24221431245A')    //Código de barras
                                            .setHeight(0.7)
                                            .setModule(0.02)
                                            .to3of9())
                    .setPaddingTop("-8pt")
                    .setPaddingBottom("-8pt")
                    .setPaddingLeft("-34.5pt");

            //Row 5
            var t2row5 = t2.getBody().addRow();
            var t2c51 = t2row5.addCell();
                t2c51.addBlock('000063405187').setFontSize('7pt')
            var t2c52 = t2row5.addCell();
                t2c52.addBlock('Lot:2555').setFontSize('7pt');

            //Row 6
            var t2row6 = t2.getBody().addRow();
            var t2c61 = t2row6.addCell();
                t2c61.addBlock('GF1 CH FROIDE').setFontSize('7pt')
            var t2c62 = t2row6.addCell();
                t2c62.addBlock('Exp:01-03-21').setFontSize('7pt');
        });
    }
});

var fop = template.toFOP();
let pdf = new Ax.fop.Processor().transform(fop);

return pdf;

3 Alternative Fo

Copy
function getPDFBarcodes(ncols, widthBarcode, heightBarcode, svgs)
{
	var fop_begin = `
<fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>
    <fo:layout-master-set>
		<!-- A4 master page with 1cm margins -->
        <fo:simple-page-master master-name='main' page-height='29.7cm' page-width='21cm' font-family='sans-serif' margin-top='0.6cm' margin-bottom='0cm' margin-left='0.7cm' margin-right='0cm' reference-orientation='0'>
            <fo:region-body margin='1cm' background-color='white' border='solid' border-color='white' />
            <fo:region-before extent='1cm' background-color='white' border='none' border-color='white' />
            <fo:region-after extent='1cm' background-color='white' border='none' border-color='white' />
            <fo:region-start extent='1cm' background-color='white' border='none' border-color='white' />
            <fo:region-end extent='1cm' background-color='white' border='none' border-color='white' />
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference='main'>
      <fo:flow flow-name='xsl-region-body'>
	`;	
	
	var fop_end = `
      </fo:flow>
   </fo:page-sequence>
</fo:root>
	`;
	
	// ========================================================================
    // A4(21.0cm) = 1cm + 19cm + 1cm
	// ========================================================================
	var pagewidh = 19.0;
	
	var fop = fop_begin;
	fop += "      <fo:table>\n";


	for (idx = 0; idx < ncols; idx++) {
        fop += "       <fo:table-column column-width='" + (pagewidh / ncols) + "cm'/>\n";
	}

	fop += "       <fo:table-body>\n";

	for (idx = 0; idx < svgs.length; idx++) {
		var svg = svgs[idx];
		if (idx % ncols == 0) {
			if (idx > 0)

				fop += "      </fo:table-row>\n";
			fop += "      <fo:table-row border-style='solid' border-width='0.5pt' border-color='white' >\n";

		}

        fop += "                <fo:table-cell padding-bottom='21pt'>";
        fop += "                           <fo:block></fo:block>";
        fop += "                           <fo:table>";
        fop += "                            <fo:table-column column-number='1' column-width='2.5cm'/>";
        fop += "                            <fo:table-column column-number='2' column-width='4.5cm'/>";
        fop += "                                    <fo:table-body>";

//                                                   ROW 1
        fop += "                                     <fo:table-row>";
        fop += "                                      <fo:table-cell font-size='7pt' letter-spacing='0.8pt' number-columns-spanned='2'>";
        fop += "                                         <fo:block></fo:block>";
        fop += "                                         <fo:block>AU- Réactif Phosphore 4 x590 tests</fo:block>";
        fop += "                                      </fo:table-cell>";
        fop += "                                     </fo:table-row>";

//                                                   ROW 2
        fop += "                                     <fo:table-row>";
        fop += "                                      <fo:table-cell font-size='7pt' number-columns-spanned='2' padding-top='2pt'>";
        fop += "                                          <fo:block></fo:block>";
        fop += "                                          <fo:block>BECKMAN COULTER (0SR61222)</fo:block>";
        fop += "                                      </fo:table-cell>";
        fop += "                                     </fo:table-row>";

//                                                   ROW 3
        fop += "                                     <fo:table-row>";
        fop += "                                      <fo:table-cell font-size='7pt' letter-spacing='0.5pt' number-columns-spanned='2' padding-top='2pt'>";
        fop += "                                            <fo:block></fo:block>";
        fop += "                                            <fo:block>10-07-19 FR131 BR3449 C4</fo:block>";
        fop += "                                       </fo:table-cell>";
        fop += "                                      </fo:table-row>";

//                                                   ROW 4
        fop += "                                     <fo:table-row>";
        fop += "                                      <fo:table-cell font-size='7pt' letter-spacing='0.5pt' number-columns-spanned='2' padding-top='2pt'>";
        fop += "                                            <fo:block></fo:block>";
	    fop += "                                            <fo:block text-align='left'><fo:instream-foreign-object padding-left='-11.5pt' padding-top='-7pt' padding-bottom='-5pt' content-width='" + widthBarcode + "cm'>" + svg + "</fo:instream-foreign-object></fo:block>\n";
        fop += "                                       </fo:table-cell>";
        fop += "                                      </fo:table-row>";

//                                                   ROW 5
        fop += "                                      <fo:table-row>";
        fop += "                                        <fo:table-cell>";
        fop += "                                             <fo:block></fo:block>";
        fop += "                                             <fo:block font-size='7pt'>000063405187</fo:block>";
        fop += "                                        </fo:table-cell>";
        fop += "                                        <fo:table-cell>";
        fop += "                                              <fo:block></fo:block>";
        fop += "                                              <fo:block font-size='7pt'>Lot:2555</fo:block>";
        fop += "                                        </fo:table-cell>";
        fop += "                                       </fo:table-row>";

//                                                   ROW 6
        fop += "                                       <fo:table-row>";
        fop += "                                        <fo:table-cell>";
        fop += "                                               <fo:block></fo:block>";
        fop += "                                               <fo:block font-size='7pt'>GF1 CH FROIDE</fo:block>";
        fop += "                                        </fo:table-cell>";
        fop += "                                        <fo:table-cell>";
        fop += "                                                <fo:block></fo:block>";
        fop += "                                                <fo:block font-size='7pt'>Exp:01-03-21</fo:block>";
        fop += "                                        </fo:table-cell>";
        fop += "                                       </fo:table-row>";

        fop += "                                    </fo:table-body>";
        fop += "                           </fo:table>";
        fop += "                </fo:table-cell>";

	}
	fop += "            </fo:table-row>\n";
	fop += "       </fo:table-body>\n";
	fop += "      </fo:table>\n";
	fop += fop_end;
	var pdf = new Ax.fop.Processor().transform(fop);
	return pdf;
}

//============================================================================
// 24 por page
//============================================================================
function getPDFBarcodes24PerPage()
{
	// Número de columnas
	var ncols  = 3;

    // Ancho del código de barras
	var widthBarcode  = 5.7;	

    // Altura del código de barras
	var heightBarcode = 1.122; 

	// Se imprimen 24
	var svgs = [];
	for (idx = 0; idx < 24; idx++) {
               
		var svg = new Ax.barcode.SVG("000063405118").setHeight(heightBarcode).setPrintText(false).to3of9();
		svgs.push(svg);
	}

	return getPDFBarcodes(ncols, widthBarcode, heightBarcode, svgs);
}

var pdf = getPDFBarcodes24PerPage();
new Ax.io.File("/tmp/barcodes24.pdf").write(pdf);
return pdf;