mPDF will atempt to layout tables using the same algorithm recommended by the HTML specifications (see Auto-layout algorithm). However, the constraints of fitting content to the page size means that the recommended algorithm has to be altered.
In general, mPDF places more priority on producing a pleasing, efficiently laid out table than it does on respecting defined values e.g. <table width=”300px”> or <td width=”30%”>
If the result is not what you want, consider using some of the following to control the layout:
- change the maximum shrinkage factor allowed for an individual table e.g. <table autosize="1.6">
- prevent an individual table from resizing e.g. <table autosize="1">
- prevent all tables from resizing: $mpdf->shrink_tables_to_fit=1;
- non-breaking spaces
- <td nowrap="nowrap">
- <td style="white-space:nowrap">
- <td style="width: 33%">
- <td style="width: 5cm">
- <table style="page-break-inside:avoid"> to force the table onto one page.
- <table style="overflow: visible|hidden|wrap"> to control wide tables or tables with specific widths specified
Overriding the Auto- Layout
Other methods to override the default layout algorithm.
If the table width is set greater than the page width allows, mPDF will by default ignore any defined sizes and attempt to auto-layout the table to the page width. This will result in relative column widths etc. being lost.
If you wish to maintain the relative proportions of the table, set $keep_table_proportions = TRUE; this forces the table to be resized, but keep relative proportions. NB It also forces respect of cell widths set by %
Table and cell widths set as a percent value are respected when possible by mPDF - as long as the table layout meets the other constraints. This can lead to an ugly or inefficiently laid out table for a printed document. Setting $$ignore_table_percents = TRUE; will force mPDF to ignore any table or cell widths set as percent values.
Table widths set as absolute length values are respected when possible by mPDF - as long as the table layout meets the other constraints. This can lead to an ugly or inefficiently laid out table for a printed document. Setting $$ignore_table_$width = TRUE; will force mPDF to ignore any table widths set as absolute length values.
If there is a conflict between respecting $page-break-inside:avoid and respecting the maximum value allowed for $autosize, the configurable variable tableMinSizePriority will determine which factor takes priority. (mPDF v>=4.6)