Skip to content

Commit 4bef3e8

Browse files
committed
Fix Cell() overflow and certificate example (v7.0.13)
- Draw Cell() text on a single line when it exceeds the cell width, with the box kept at the requested geometry and L/C/R alignment anchored to the cell - Share the engine text run between stretched and overflow cells and anchor stretched text to the cell x position - Add Cell() overflow tests - Fix the example 52 certificate path and regenerate the example certificate files - Bump tc-lib-pdf to ^8.77 and mago to 1.51.2 - Bump version to 7.0.13
1 parent c128344 commit 4bef3e8

10 files changed

Lines changed: 363 additions & 65 deletions

File tree

‎VERSION‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
7.0.12
1+
7.0.13

‎composer.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
2929
"require": {
3030
"php": ">=8.2",
3131
"ext-curl": "*",
32-
"tecnickcom/tc-lib-pdf": "^8.76"
32+
"tecnickcom/tc-lib-pdf": "^8.77"
3333
},
3434
"require-dev": {
35-
"carthage-software/mago": "1.50.0",
35+
"carthage-software/mago": "1.51.2",
3636
"pdepend/pdepend": "^2.16",
3737
"phpunit/phpunit": "^11.5 || ^12.5 || ^13.3"
3838
},

‎examples/data/cert/tcpdf.crt‎

Lines changed: 46 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,50 @@
1-
Bag Attributes
2-
localKeyID: 7B AB 1B 7A BE 4C 85 C0 1A A6 DC 59 3F 79 48 C3 93 38 68 9C
3-
subject=/CN=TCPDF DEMO/O=TCPDF/OU=DEMO/emailAddress=you@example.com/C=IT
4-
issuer=/CN=TCPDF DEMO/O=TCPDF/OU=DEMO/emailAddress=you@example.com/C=IT
51
-----BEGIN CERTIFICATE-----
6-
MIIC1TCCAj6gAwIBAgIKkehOL/XGkB5cjjANBgkqhkiG9w0BAQUFADBhMRMwEQYD
7-
VQQDEwpUQ1BERiBERU1PMQ4wDAYDVQQKEwVUQ1BERjENMAsGA1UECxMEREVNTzEe
8-
MBwGCSqGSIb3DQEJARYPeW91QGV4YW1wbGUuY29tMQswCQYDVQQGEwJJVDAeFw0w
9-
OTA4MjExMjU0NDhaFw0xNDA4MjExMjU0NDhaMGExEzARBgNVBAMTClRDUERGIERF
10-
TU8xDjAMBgNVBAoTBVRDUERGMQ0wCwYDVQQLEwRERU1PMR4wHAYJKoZIhvcNAQkB
11-
Fg95b3VAZXhhbXBsZS5jb20xCzAJBgNVBAYTAklUMIGfMA0GCSqGSIb3DQEBAQUA
12-
A4GNADCBiQKBgQDAqIL0uGKmTR98Lxx2vEEE1OGKkMXFo0JViitALe7Onhxxqx0H
13-
XMUDKF5mvEVu1rcvh7/oAnAfrCuEpL/up3u1mQCgBE7WXBnFFE/AE3jCksh9OkS0
14-
Z0Xj9woN5bzxRDsGoPiOu/4xzk5qSEXt8jf2Ep90QuNkqLIRT4swAzpDbwIDAQAB
15-
o4GTMIGQMDcGA1UdEgQwMC6gEQYDVQQDDApUQ1BERiBERU1PoAwGA1UECgwFVENQ
16-
REagCwYDVQQLDARERU1PMDcGA1UdEQQwMC6gEQYDVQQDDApUQ1BERiBERU1PoAwG
17-
A1UECgwFVENQREagCwYDVQQLDARERU1PMA8GCSqGSIb3LwEBCgQCBQAwCwYDVR0P
18-
BAQDAgSQMA0GCSqGSIb3DQEBBQUAA4GBAEhTQfqX3ZNdHmpTLDbIj22RHXii2roE
19-
OavCbu9WsHoWpva0qSd+yIoD594VHvYAd29sfzDfiN+7W0aiZfDhq5jpaSQMVlN8
20-
RGYMupbHY/+a9Gz1wqxnR84mlTtIkZVRYAhsfPwy6M1BEjdMqfdh9h40JIdkdjtb
21-
8faTCfXPePWQ
2+
MIIDwjCCAqqgAwIBAgIUZgtna5GmyWtLd0CJNjRQS1vzt3IwDQYJKoZIhvcNAQEL
3+
BQAwYTETMBEGA1UEAwwKVENQREYgREVNTzEOMAwGA1UECgwFVENQREYxDTALBgNV
4+
BAsMBERFTU8xHjAcBgkqhkiG9w0BCQEWD3lvdUBleGFtcGxlLmNvbTELMAkGA1UE
5+
BhMCSVQwIBcNMjYxMDAzMDk0MDI3WhgPMjEyNjA5MDkwOTQwMjdaMGExEzARBgNV
6+
BAMMClRDUERGIERFTU8xDjAMBgNVBAoMBVRDUERGMQ0wCwYDVQQLDARERU1PMR4w
7+
HAYJKoZIhvcNAQkBFg95b3VAZXhhbXBsZS5jb20xCzAJBgNVBAYTAklUMIIBIjAN
8+
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5IGUpCIVMIDg4/juzn7KcczC2ygv
9+
c984EnVzKitLowUbYg1MQkpRq7TABCFT2qjvnQbClHEupi4CtrFwGJ2r0XvmtGU/
10+
Cz8/lVxkrJzkd6nJIiRoBqD25XabYzJWhdzmYFcrEQVzlnK3j2b+P6+g7rr4u7fY
11+
0rmTj0Oql7+NVk3O64Tio/yuuoCfXqh7+e48QrlBSkf850cDmyu3Rd3ZaQSEK3kL
12+
OS+0P+p35RRGz2d7vr/Uag62V4z6zIuB41N7AaZCSMyTbJ5DrWhsPChTsMB8nRkR
13+
5C07sbpA8+syT6WZB5T8NZ+DiaL5P1Yc7bJMI95OuMfDufNPzifLqQ1J9QIDAQAB
14+
o3AwbjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIE8DATBgNVHSUEDDAKBggr
15+
BgEFBQcDBDAdBgNVHQ4EFgQU/ARNU65poWAMSwaO15u2FQ1HCrAwGgYDVR0RBBMw
16+
EYEPeW91QGV4YW1wbGUuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQDQpvge5CWOydnt
17+
UK21QIEHd9f/L4bRnnyx4fHwU6zbTy+inaDF1l/GwxDVXEuWJOo2xDnwV3lhkLY3
18+
WBK/ZFTJN2h5ttbuTL0T25EdurltvZ8EEfwdc71UJWuB53nBE6y5P1m/7j0hif9K
19+
LRGkqp3wp04yEnZ9m42QBEIujRk64eXeGBIMQ40Jd9vXtPVY8kJpuTDZo871Y3YY
20+
eM56cC1dIGnqYq5wROYYiSTSECIgqY9wmkP3WIri3fU6BG7lYiZR54X7+8cv7qbL
21+
n/ZUMOCE3vsHwf2XALTdRHT6xSg4z9rcH+thI639+h44GEA4HQFDxyZCDK+ZmLxK
22+
LhDJzJ2a
2223
-----END CERTIFICATE-----
23-
Bag Attributes
24-
localKeyID: 7B AB 1B 7A BE 4C 85 C0 1A A6 DC 59 3F 79 48 C3 93 38 68 9C
25-
Key Attributes: <No Attributes>
2624
-----BEGIN RSA PRIVATE KEY-----
27-
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
4050
-----END RSA PRIVATE KEY-----

‎examples/data/cert/tcpdf.fdf‎

224 Bytes
Binary file not shown.

‎examples/data/cert/tcpdf.p12‎

1.03 KB
Binary file not shown.

‎examples/example_052.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
*/
7878

7979
// set certificate file
80-
$certificate = 'file://data/cert/tcpdf.crt';
80+
$certificate = 'file://' . dirname(__FILE__) . '/data/cert/tcpdf.crt';
8181

8282
// set additional information
8383
$info = [

‎mago.src.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#:schema https://mago.carthage.software/1.50.0/schema.json
1+
#:schema https://mago.carthage.software/1.51.2/schema.json
22
version = "1"
33
php-version = "8.2.0"
44

‎mago.test.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#:schema https://mago.carthage.software/1.50.0/schema.json
1+
#:schema https://mago.carthage.software/1.51.2/schema.json
22
version = "1"
33
php-version = "8.2.0"
44

‎tcpdf.php‎

Lines changed: 156 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
//============================================================+
44
// File name : tcpdf.php
5-
// Version : 7.0.12
5+
// Version : 7.0.13
66
// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com
77
// License : GNU-LGPL v3 (https://www.gnu.org/copyleft/lesser.html)
88
// Copyright (C): 2002-2026 Nicola Asuni - Tecnick.com LTD
@@ -15,7 +15,7 @@
1515
* See: https://tcpdf.org
1616
* @package com.tecnick.tcpdf
1717
* @author Nicola Asuni
18-
* @version 7.0.12
18+
* @version 7.0.13
1919
*/
2020

2121
// TCPDF configuration
@@ -1710,6 +1710,7 @@ protected function insertPageContent(int $pid, int $start, string $content): voi
17101710
protected function stretchedCellText(
17111711
int $mode,
17121712
string $txt,
1713+
float $cellx,
17131714
float $width,
17141715
float $height,
17151716
float $textw,
@@ -1729,33 +1730,16 @@ protected function stretchedCellText(
17291730
$rawwidth =
17301731
$eng->font->getOrdArrDims(array_values($eng->uniconv->strToOrdArr($txt)))['totwidth'] / $this->kratio;
17311732
$naturalbox = max($rawwidth, $textw) + $padl + $padr;
1732-
$boxx = $this->rtlmode ? $this->posx + $width - $naturalbox : $this->posx;
1733+
$boxx = $this->rtlmode ? $cellx + $width - $naturalbox : $cellx;
17331734

1734-
$text = $eng->getTextCell(
1735+
$text = $this->cellTextRun(
17351736
$txt,
17361737
$boxx,
1737-
$this->posy,
17381738
$naturalbox,
17391739
$height,
1740-
0,
1741-
0,
17421740
$valign,
17431741
$this->rtlmode ? 'R' : 'L',
17441742
null,
1745-
['all' => ['lineWidth' => 0.0]],
1746-
$this->textrendermode['stroke'],
1747-
0,
1748-
0,
1749-
0,
1750-
true,
1751-
$this->textrendermode['fill'],
1752-
$this->textrendermode['stroke'] > 0,
1753-
$this->fontdecor['U'],
1754-
$this->fontdecor['D'],
1755-
$this->fontdecor['O'],
1756-
$this->textrendermode['clip'],
1757-
false,
1758-
$this->forcedTextDir(),
17591743
$shadow,
17601744
);
17611745
$eng->font->popLastFont();
@@ -1769,7 +1753,7 @@ protected function stretchedCellText(
17691753
// Glyph scaling anchored at the text start edge: the ambient
17701754
// spacing/stretching apply inside the saved graphics state and
17711755
// the CTM brings the rendered width up to the available width.
1772-
$anchor = $this->rtlmode ? $this->posx + $width - $padr : $this->posx + $padl;
1756+
$anchor = $this->rtlmode ? $cellx + $width - $padr : $cellx + $padl;
17731757
return (
17741758
$basestate
17751759
. $eng->graph->getStartTransform()
@@ -1793,6 +1777,128 @@ protected function stretchedCellText(
17931777
return $spacingstate . $text . $reset;
17941778
}
17951779

1780+
/**
1781+
* PDF code for a cell whose text is drawn on one line regardless of the
1782+
* cell width.
1783+
*
1784+
* The box is drawn by the engine with the requested geometry and the
1785+
* border-adjusted cell definition used by getTextCell(). The text is
1786+
* drawn in a box wider than the text, anchored to the cell so the
1787+
* engine alignment places it as in the cell: left edge for L, right
1788+
* edge for R, center for C.
1789+
*
1790+
* @param array{margin: array{T: float, R: float, B: float, L: float}, padding: array{T: float, R: float, B: float, L: float}, borderpos: float}|null $engcell
1791+
* @param array<int|string, array<string, mixed>> $styles
1792+
*/
1793+
protected function overflowCellOutput(
1794+
string $txt,
1795+
float $cellx,
1796+
float $width,
1797+
float $height,
1798+
float $txtw,
1799+
string $halign,
1800+
string $valign,
1801+
?array $engcell,
1802+
array $styles,
1803+
): string {
1804+
$eng = $this->engine();
1805+
/** @var array{margin: array{T: float, R: float, B: float, L: float}, padding: array{T: float, R: float, B: float, L: float}, borderpos: float} $cell */
1806+
$cell = $this->engineMethod('adjustMinCellPadding')->invoke($eng, $styles, $engcell);
1807+
$box = $this->engineMethod('drawCell')->invoke(
1808+
$eng,
1809+
$eng->toPoints($cellx) + $cell['margin']['L'],
1810+
$eng->toYPoints($this->posy) - $cell['margin']['T'],
1811+
$eng->toPoints($width),
1812+
$eng->toPoints($height),
1813+
$styles,
1814+
$cell,
1815+
);
1816+
1817+
if ($halign === 'J') {
1818+
$halign = $this->isRTLTextDir() ? 'R' : 'L';
1819+
}
1820+
1821+
// Twice the estimated text width leaves the engine enough room for
1822+
// the prepared text, whose width can differ from the estimate.
1823+
$boxw = $width + (2 * $txtw) + $eng->toUnit($cell['padding']['L'] + $cell['padding']['R']);
1824+
$boxx = match ($halign) {
1825+
'R' => $cellx + $width - $boxw,
1826+
'C' => $cellx + (($width - $boxw) / 2),
1827+
default => $cellx,
1828+
};
1829+
1830+
return (is_string($box) ? $box : '') . $this->cellTextRun($txt, $boxx, $boxw, $height, $valign, $halign, $cell, $this->engineShadow());
1831+
}
1832+
1833+
/**
1834+
* Text-only engine cell run (no box) with the current text render mode
1835+
* and decorations.
1836+
*
1837+
* @param array{margin: array{T: float, R: float, B: float, L: float}, padding: array{T: float, R: float, B: float, L: float}, borderpos: float}|null $cell
1838+
* @param array{xoffset: float, yoffset: float, opacity: float, mode: string, color: string}|null $shadow
1839+
*/
1840+
protected function cellTextRun(
1841+
string $txt,
1842+
float $posx,
1843+
float $width,
1844+
float $height,
1845+
string $valign,
1846+
string $halign,
1847+
?array $cell,
1848+
?array $shadow,
1849+
): string {
1850+
return $this->engine()->getTextCell(
1851+
$txt,
1852+
$posx,
1853+
$this->posy,
1854+
$width,
1855+
$height,
1856+
0,
1857+
0,
1858+
$valign,
1859+
$halign,
1860+
$cell,
1861+
['all' => ['lineWidth' => 0.0]],
1862+
$this->textrendermode['stroke'],
1863+
0,
1864+
0,
1865+
0,
1866+
true,
1867+
$this->textrendermode['fill'],
1868+
$this->textrendermode['stroke'] > 0,
1869+
$this->fontdecor['U'],
1870+
$this->fontdecor['D'],
1871+
$this->fontdecor['O'],
1872+
$this->textrendermode['clip'],
1873+
false,
1874+
$this->forcedTextDir(),
1875+
$shadow,
1876+
);
1877+
}
1878+
1879+
/**
1880+
* Protected engine method made callable from the facade.
1881+
*/
1882+
protected function engineMethod(string $name): \ReflectionMethod
1883+
{
1884+
static $methods = [];
1885+
if (!isset($methods[$name])) {
1886+
$methods[$name] = new \ReflectionMethod(\Com\Tecnick\Pdf\Tcpdf::class, $name);
1887+
}
1888+
1889+
return $methods[$name];
1890+
}
1891+
1892+
/**
1893+
* Text width in user units measured with the current engine font,
1894+
* including its spacing and stretching.
1895+
*/
1896+
protected function engineTextWidth(string $txt): float
1897+
{
1898+
$eng = $this->engine();
1899+
return $eng->toUnit($eng->font->getOrdArrDims(array_values($eng->uniconv->strToOrdArr($txt)))['totwidth']);
1900+
}
1901+
17961902
/**
17971903
* Re-apply the current font to the engine font stack so it carries the
17981904
* up-to-date spacing/stretching.
@@ -3396,13 +3502,40 @@ public function Cell(
33963502
}
33973503
}
33983504

3399-
if ($stretchmode > 0 && $txt !== '') {
3505+
// Legacy Cell never wraps. Text that may not fit the inner cell
3506+
// width is drawn on one line by overflowCellOutput(). The width
3507+
// estimate skips the engine text preparation (cleanup, Bidi,
3508+
// shaping, hyphenation), so near-fitting text takes the same path;
3509+
// its rendering is unchanged when the text fits.
3510+
$txtw = 0.0;
3511+
if ($stretchmode === 0 && $txt !== '') {
3512+
$txtw = $stretchtextw > 0 ? $stretchtextw : $this->engineTextWidth($txt);
3513+
$innerw = $width - $borderpadding['L'] - $borderpadding['R'];
3514+
if ($txtw <= $innerw * 0.95) {
3515+
$txtw = 0.0;
3516+
}
3517+
}
3518+
3519+
if ($txtw > 0) {
3520+
$out .= $this->overflowCellOutput(
3521+
$txt,
3522+
$cellx,
3523+
$width,
3524+
$height,
3525+
$txtw,
3526+
$this->halignToEngine($_align),
3527+
$this->valignToEngine($_valign === 'M' ? 'C' : $_valign),
3528+
$engcell,
3529+
$styles,
3530+
);
3531+
} elseif ($stretchmode > 0 && $txt !== '') {
34003532
// Box and text drawn separately: the border must keep the
34013533
// requested geometry while the text run is scaled or spaced.
34023534
$out .= $this->cellBoxOutput($cellx, $this->posy, $width, $height, $styles, (bool) $_fill);
34033535
$out .= $this->stretchedCellText(
34043536
$stretchmode,
34053537
$txt,
3538+
$cellx,
34063539
$width,
34073540
$height,
34083541
$stretchtextw,

0 commit comments

Comments
 (0)