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;