Creé una exportación de pdf usando Datatables y estoy mostrando un mensaje debajo de la tabla exportada usando messageBottom
. El problema es que se alinea automáticamente a la izquierda y me gustaría que el valor se alineara a la derecha, debajo de la última columna de la tabla exportada. ¿Hay una manera de lograr esto? Revisé la documentación de Datatable pdfHtml5 pero parece que no puedo entender cómo ajustar la alineación del texto en messageBottom
o messageTop
.
Aquí está mi código inicializando la tabla:
var table = $('#exampleTable').DataTable( { dom: 'Bfrtip', buttons: [ { extend: 'pdfHtml5', messageBottom: function() { return 'message to be displayed at bottom' }, customize: function ( doc ) { /* here I am aligning text in a column to the right */ var rowCount = table.rows().count() + 1; for (i = 0; i < rowCount; i++) { doc.content[2].table.body[i][3].alignment = 'right'; }; } } ] } );
en la version de datable que estoy usando lo he solucionado asi. 'messageBottom' usa el estilo 'mensaje', por lo que agregar la siguiente línea en la personalización me resolvió el problema.
doc.styles.message.alignment = "right";
El problema con esta solución es que 'messageTop' también usa el estilo 'message', por lo que también se alineará a la derecha, pero en mi caso solo estoy usando 'messageBottom'. No sé si hay una mejor manera.
mi ejemplo:
{ extend: 'pdf', messageBottom: function() { return "\n\nTOTAL VENCIMIENTO: "+$('#header-vcto-total span').text()+"\n" }, customize: function(doc) { /** this line changes the alignment of 'messageBottom' and 'messageTop' **/ doc.styles.message.alignment = "right"; doc.content[1].table.widths = [ '40%', '25%', '17.5%', '17.5%']; var rowCount = doc.content[1].table.body.length; for (i = 1; i < rowCount; i++) { doc.content[1].table.body[i][1].alignment = 'center'; doc.content[1].table.body[i][2].alignment = 'center'; doc.content[1].table.body[i][3].alignment = 'right'; doc.content[1].table.body[i][3].text += ' €'; }; } }
Espero que le sea útil. Un saludo.
La respuesta de @zhexirox alinea a la derecha la parte inferior del mensaje, el único problema es que también alinea la parte superior del mensaje de la misma manera. Si solo desea alinear / formatear el contenido debajo de la tabla, puede usar doc.content.push
Aquí hay un ejemplo:
customize: function(doc) { doc.content.push( { margin: [15, 20, 0, 0 ], alignment: 'left', text: 'example message' }); }