DomPDF table fixed column width and break long text
Not really an "answer", but my solution is switching to Snappy PDF (used the Laravel Package).
Worked like a charm, I did not even change the HTML markups.
dompdf ignores width attribute
Update the last vertion, it should to work,
dompdf_0-6-0_beta3
download https://code.google.com/p/dompdf/downloads/list
Automatic column width with `overflow-wrap: break-word`
I think either you should go with display flex or add a small tweak in the CSS like shown below.
.table-wrap tr > td:nth-child(1),
.table-wrap tr > td:nth-child(2) {
white-space: nowrap;
}
.table-wrap tr > td:nth-child(3) {
word-break: break-word;
}
th,td {
padding: 0px 16px
}
<table class="table-wrap" style="width: 100%;">
<tr>
<th>ID</th>
<th>Time</th>
<th>Data</th>
</tr>
<tr>
<td>0</td>
<td>10:11</td>
<td>some_long_value_that_may_or_may_not_contain_a_space</td>
</tr>
<tr>
<td>1</td>
<td>10:12</td>
<td>some_long_value_that_may_or_may_not_contain_a_space</td>
</tr>
<tr>
<td>2</td>
<td>10:13</td>
<td>some_long_value_that_may_or_may_not_contain_a_space_and_it_may_be_so_long_that_it_wont_fit_into_the_column_and_needs_to_be_wrapped</td>
</tr>
</table>
dompdf create pdf with four columns?
Ok it looks like all I need to do is set the table width to auto or 100% and let the columns scale across the page automatically without setting their widths.
Text overflowing tables when generating PDF with dompdf
I believe DOMPDF is using a fairly limited character set for determining how to split a line. Right now it only splits a line at a dash or a space. So something like the URL you have in your sample is going to run past the width of the container. DOMPDF just doesn't know how to break it up.
Starting with dompdf v0.6.0 you can style your text so that words are broken at any character, e.g.:
<span style="word-wrap: break-word;">http://example.com/really/long/.../url</span>
It's not as clean as breaking on a particular character (e.g. a /
). If you're comfortable hacking the code you can work around the problem a little more elegantly. Open up the text reflower class and modify the regular expression that splits the line. The regular expression looks like the following:
preg_split('/([\s-]+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE)
Modify that code to include whatever extra characters you think will make for a good line break. You might, for example, break URLs up on ?, &, or even / if you expect to have extremely long URLs in your text:
$words = preg_split('/([\s-\?\&\/]+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
In dompdf 0.6.1 the RegEx can be found in dompdf/include/text_frame_reflower.cls.php lines 86 and 371. In the upcoming 0.7.0 the RegEx can be found in dompdf/src/FrameReflower/Text.php lines 106 and 402.
The drawback to modifying the RegEx is that this will affect all text (not just URLs).
Related Topics
How to Get Multiple Value from Post Variable Using Same Name
How to Pass a PHP Variable Using the Url
How to Fix Undefined Offset: 0 in Laravel Blade
How to Throw an Error Message If Username Is Already Registered
Laravel - How to Join 2 Tables from Different Db Connection
Laravel: Pdoexception: Could Not Find Driver
Display Data from Database to Dropdown Codeigniter
Codeigniter - Call to a Member Function Result() on Boolean In
Why Shouldn't I Use MySQL_* Functions in PHP
Get Image Type from Base64 Encoded Src String
Sum Value in Foreach Loop Every 3 Time Looping
How to Prevent a User from Directly Accessing My HTML Page by Writing Url
Get Selected Option in PHP Without Pressing Submit
Laravel Eloquent How to Get the Minimum Value That Is Not Null
Displaying Data from an Array in a HTML Table Using PHP