pdfHtml5 how to check every cell for a class and align
pdfHtml5 how to check every cell for a class and align
Hi I need to export a table in excel and PDF.
I want:
- 1) remove some pieces of text not needed in exports (done cleaning every cell removing tags with .noExport class)
- 2) export in excel applying some background colors and styles (ok done)
- 3) export in pdf and do align right only for "valuta" and "age" classes (TD)
But i can't do point 3.
The text, in pdf, for those cells (body and footer) are not aligned to right. I can't do it. Anyone could help me?
This is my example: https://live.datatables.net/keqicuvo/1/edit
Tried this code without success.
Also, with some console.log debug I see that - if I hide some columns with COLVIS button, indexed "I" and "K" in table.row(i).column(k) are not the same index in doc.content[1].table.body[i][k] ... so i need to fix also this.
customize: function(doc) {
var rows = doc.content[1].table.body.length; // ALLINEA A DX GLI IMPORTi
for (var i = 0; i < rows; i++) {
var colonne = doc.content[1].table.body[i].length;
for (var k = 0; k < colonne; k++) {
if (
$(table.row(i).column(k).nodes()).hasClass("valuta") ||
$(table.row(i).column(k).nodes()).hasClass("age")
) {
doc.content[1].table.body[i][k].alignment = 'right';
}
}
}
This question has an accepted answers - jump to answer
Answers
sorry, my answer referred to xlsx export. Hence I deleted it.
No problem.
Any idea how to simply loop cells from a row(index) and sync "indexes" from datatable-html-table and pdf-table?
The problem is not with how you are applying the
alignment
to the PDF cell but how you are using the API. Usingtable.row(i).column(k).nodes()
doesn't return what you are expecting. It sill first return the row with in instance of the API allowingcolumn()
to work.column().nodes()
returns all the nodes in the column, not just the cell you are expecting.In your test case you can see that the Salary column is right aligned but no the age column. I haven't debugged the code to determine why it finds the class
valuta
in the if statement.I haven't sat down and taken the time to determine what to change. Do you need to look at the header classes? The reason I ask is
doc.content[1].table.body[0]
contains the header not the table rows. So you will need to keep track of the header rows versus the table rows.If the header is not of concern then I would look at using
rows().every()
to loop the rows thencells().every()
to loop the cells within the row.Kevin
I had some time to workout an example:
https://live.datatables.net/zixexemu/1/edit
You may also need to use
columns().header()
andcolumns.footer()
to apply the same alignment to the header and footer of the PDF.Kevin
Thank you for your explanation and example! Very clear implementation! THANKS!!!