Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Different width for each columns in jspdf autotable?

My table has 13 columns. How can I get different width for each column? Can I give each column width like this?

styles: {overflow: 'linebreak' ,columnWidth: [100,80,80,70,80,80,70,70,70,70,60,80,100]},

My table Syntax:

> var res = doc.autoTableHtmlToJson(document.getElementById(tableID)); 
> doc.autoTable(res.columns, res.data, {  styles: {overflow: 'linebreak'
> ,columnWidth: [100,80,80,70,80,80,70,70,70,70,60,80,100]},  startY:
> 60,  bodyStyles: {valign: 'top'},  });
like image 780
Abdu Rahiman Avatar asked Aug 05 '16 10:08

Abdu Rahiman


2 Answers

You would have to transform your columnWidth array to look like this:

doc.autoTable({
  html: '#table',
  columnStyles: {
    0: {cellWidth: 100},
    1: {cellWidth: 80},
    2: {cellWidth: 80},
    // etc
  }
});

Note the use of columnStyles instead of styles.

like image 110
Simon Bengtsson Avatar answered Sep 20 '22 15:09

Simon Bengtsson


In previous release (1.3.4) it could have done like below:

var columns = [
          {title: "Signum", dataKey: "signum"},
          {title: "Name", dataKey: "name"},
          {title: "Role", dataKey: "role"},
          {title: "Location", dataKey: "location"} 
          ]

But the latest one i.e. 2.3.2 requires the below format

doc.autoTable(colums,data,{
    addPageContent:pageContent,
    margin: {horizontal:5,top: 20},
    startY: 0.47*doc.internal.pageSize.height,
    styles: {overflow: 'linebreak'},
    columnStyles: {
     id: {columnWidth: 25}, 
     name:{columnWidth:40}, 
     role: {columnWidth: 15}, 
     location: {columnWidth: 30}
    }
  });

This will fix only id, name, role, and location to the specified limits. Rest other headers will be adjusted accordingly by autotable.js

like image 45
Pikesh Prasoon Avatar answered Sep 16 '22 15:09

Pikesh Prasoon