From 55a1635900c97172e9209c64c56bf6649ad377b6 Mon Sep 17 00:00:00 2001 From: erikn69 Date: Fri, 5 Dec 2025 15:45:03 -0500 Subject: [PATCH] Add e-signature placeholders support --- .../ESignaturePlaceholderTrait.php | 86 ++++++++++++++++++ scripts/ESignaturePlaceholder/README.md | 51 +++++++++++ scripts/ESignaturePlaceholder/ex.pdf | Bin 0 -> 2117 bytes scripts/ESignaturePlaceholder/ex.php | 23 +++++ scripts/README.md | 1 + src/FawnoFPDF.php | 5 + .../ESignaturePlaceholderTraitTest.php | 22 +++++ tests/examples/example.pdf | Bin 27707 -> 28654 bytes .../exampleESignaturePlaceholderTraitTest.pdf | Bin 0 -> 703 bytes tests/test.php | 8 ++ 10 files changed, 196 insertions(+) create mode 100644 scripts/ESignaturePlaceholder/ESignaturePlaceholderTrait.php create mode 100644 scripts/ESignaturePlaceholder/README.md create mode 100644 scripts/ESignaturePlaceholder/ex.pdf create mode 100644 scripts/ESignaturePlaceholder/ex.php create mode 100644 tests/Scripts/ESignaturePlaceholderTraitTest.php create mode 100644 tests/examples/exampleESignaturePlaceholderTraitTest.pdf diff --git a/scripts/ESignaturePlaceholder/ESignaturePlaceholderTrait.php b/scripts/ESignaturePlaceholder/ESignaturePlaceholderTrait.php new file mode 100644 index 0000000..27ad8f0 --- /dev/null +++ b/scripts/ESignaturePlaceholder/ESignaturePlaceholderTrait.php @@ -0,0 +1,86 @@ +PageLinks[$this->page][] = compact('name', 'x', 'y', 'w', 'h'); + + if (! isset($this->SigFields[$this->page])) { + $this->SigFields[$this->page] = true; + $this->PageLinks[$this->page][] = []; // just to reserve the oid on _putpages + } + } + + protected function _putlinks($n) + { + $this->_putsigfields($n); + parent::_putlinks($n); + } + + protected function _putsigfields($n) + { + $pageLinks = $this->PageLinks[$n]; + $this->PageLinks[$n] = []; + $this->SigFields[$n] = []; + foreach ($pageLinks as $pl) + { + if (isset($pl['name'])) // it's a sig placeholder + $this->SigFields[$n][] = $pl; + elseif (isset($pl[0])) // it's a page link + $this->PageLinks[$n][] = $pl; + } + + if (empty($this->SigFields[$n])) + return; + + $fieldRefs = []; + $page = $this->PageInfo[$n]['n'] . ' 0 R'; + + foreach ($this->SigFields[$n] as $i => $f) { + $this->_newobj(); + $fieldRefs[] = $this->n . ' 0 R'; + $name = $f['name'] ?: 'Sign_' . $n. '_' . $i; + $rect = sprintf( + '%.2F %.2F %.2F %.2F', + $f['x'] * $this->k, + ($this->h - $f['y'] - $f['h']) * $this->k, + ($f['x'] + $f['w']) * $this->k, + ($this->h - $f['y']) * $this->k + ); + $this->_put("<>"); + $this->_put('endobj'); + } + + $this->_newobj(); + $this->acroformObjId = $this->n; + $this->_put('<>'); + $this->_put('endobj'); + } + + function _putcatalog() + { + parent::_putcatalog(); + $this->_putesignatureplaceholdercatalog(); + } + + protected function _putesignatureplaceholdercatalog() { + if ($this->acroformObjId) + $this->_put('/AcroForm ' . $this->acroformObjId . ' 0 R'); + } +} diff --git a/scripts/ESignaturePlaceholder/README.md b/scripts/ESignaturePlaceholder/README.md new file mode 100644 index 0000000..e99963b --- /dev/null +++ b/scripts/ESignaturePlaceholder/README.md @@ -0,0 +1,51 @@ +# ESignaturePlaceholderTrait +![GitHub license](https://img.shields.io/badge/license-FPDF-green) +[![Author](https://img.shields.io/badge/author-ErikN-blue)](https://github.com/erikn69) + +This trait handles e-Signature Placeholders + +## Usage +The method to add empty placeholder for e-signature: + +```php +/** + * Add a e-signature placeholder + * + * @param float $x Abscissa of upper-left corner + * @param float $y Ordinate of upper-left corner + * @param float $w Width + * @param float $h Height + * @param string $name Name of pdf object + */ +function AddSignatureField(float $x, float $y, float $w, float $h, string $name = '');; +``` + +## Example + +```php +declare(strict_types=1); + +require dirname(dirname(__DIR__)) . '/fpdf/fpdf.php'; +require __DIR__ . '/ESignaturePlaceholderTrait.php'; + +use FPDF\Scripts\ESignaturePlaceholder\ESignaturePlaceholderTrait; + +$pdf = new class extends FPDF { + use ESignaturePlaceholderTrait; +}; + +$pdf->AddPage(); +$pdf->SetFont('Arial', '', 12); +$pdf->Text(20, 10, 'First Sign Here:'); +// add placeholder with name `SignPlaceholder1` on page 1 +$pdf->AddSignatureField(20, 15, 120, 40, 'SignPlaceholder1'); + +$pdf->AddPage(); +$pdf->SetFont('Arial', '', 12); +$pdf->Text(20, 10, 'Second Sign Here:'); +// add placeholder with default name on page 2 +$pdf->AddSignatureField(20, 15, 120, 40); + +$pdf->Output('F', __DIR__ . '/example.pdf'); +``` +[Result](ex.pdf) diff --git a/scripts/ESignaturePlaceholder/ex.pdf b/scripts/ESignaturePlaceholder/ex.pdf new file mode 100644 index 0000000000000000000000000000000000000000..70c5586ae0eb97644c94a6b38c1d93085ecfa055 GIT binary patch literal 2117 zcmbVN4Qv!e6s~9qZYb$N%AbJ@O-`;AZuaN)ZWk|A==JFFlOER!h0>Po-E_O>v5R}# zdNvj;)M!EwXym6@tJb!r*ode>0z}kef*}M_Z9*hyDQd-POF#t;CeCcH-qET7H`$+g zJM-R~?|bt-tKZ{Y$k;iG12oVo!j#($i=Nqp0Q5^TqVQ8kssR}MH$cGvifYw*5Jdqy zVpy!Inh^yhJQ)I~`7EViuBIAzSrj;kB`1eMYKS-|!*~#{5;2etpf@5J$b*7f2*+H3 zRN1HkE&(rz8ak3TQn6+(aIK#`&+%()13IE4# z%-MrY2W$;(wyL9Odd5E619HbeR;+D$`#L4NAyoh6gp~57mUl=ZamVqLNajiVhUSi7 zVReOpQGjcdkcNfZ+)mCA`z_6oFIV z?Vz;J8=4uV%aHg<}UkfVTuUIj%$(Gf^X6O&zu$^U~Okt7Hh z+I%H5BoIp?3K`xFL*iXC^vS$XxI?b&+#pqT$>G-Y#@5#@%?Fxa+t-@j+|=?`-|lrU zhub^T8&d<5Q%*HbpFEx-lKZ_=RL+*ugc^d|y;EZ%^{?ERXeMz(jz?04BZntS!R1N_ z9}crPM)CkA^ws!8u@qd1LW;CRi-8hC3or6^Rse#7u?u1;m7s)4^8R0^hI2ZSNhuAS zQMb|QCvIfqbi6QW#q6!t29Ix-@XH%Ln^WqodD#3ze;kJt1Z%rCxjSgu+96&xyTHo)7I#RzF+wbtNWmpi6p=3g^HHP*8A?#1Mzsc*y30^7PsL)Ws4~Fn zqb^pX%BX>YMcNapVoIf16oI5FNkqh=t!u$TWPlQg)gAjqF&xpi5exc~_&YcL_ThRo z6LP!p2LsH+O}DVPpdyU*4B$Vwtdhzx(J9PGq3R&kahsQf!lmoX!t#%m+fX#sgQXqV zJd0SG@pQh($CHqV?2E0kL{p3o96wzeTfn?lo;tgnVP}jVgzA>(3 zNiJeKs-$SZ@D%;`1)Mz3@t_in+5`^k8@YfwYGWJ%_I;-fkMIc}V`GRUjIpsiR+lk0 z?jQU)SSM!lJo4^17 literal 0 HcmV?d00001 diff --git a/scripts/ESignaturePlaceholder/ex.php b/scripts/ESignaturePlaceholder/ex.php new file mode 100644 index 0000000..85ea054 --- /dev/null +++ b/scripts/ESignaturePlaceholder/ex.php @@ -0,0 +1,23 @@ +AddPage(); + $pdf->SetFont('Arial', '', 12); + $pdf->Text(20, 10, 'First Sign Here:'); + // add placeholder with name `SignPlaceholder1` on page 1 + $pdf->AddSignatureField(20, 15, 120, 40, 'SignPlaceholder1'); + + $pdf->AddPage(); + $pdf->SetFont('Arial', '', 12); + $pdf->Text(20, 10, 'Second Sign Here:'); + // add placeholder with default name on page 2 + $pdf->AddSignatureField(20, 15, 120, 40); diff --git a/scripts/README.md b/scripts/README.md index 3df84f5..88a8e98 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -20,3 +20,4 @@ $pdf = new class extends FPDF { 95. [Attachments](Attachments) by **Olivier** (2012-04-29) - [QRcode](QRcode) by **Laurent MINGUET** (2010-04-29) +- [ESignaturePlaceholder](ESignaturePlaceholder) by **Erik N.** (2025-12-06) diff --git a/src/FawnoFPDF.php b/src/FawnoFPDF.php index d3f2c29..e8e097b 100644 --- a/src/FawnoFPDF.php +++ b/src/FawnoFPDF.php @@ -9,6 +9,7 @@ use Fawno\FPDF\Traits\BasicFunctionsTrait; use Fawno\FPDF\Traits\EAN13Trait; use Fawno\FPDF\Traits\FontsTrait; + use FPDF\Scripts\ESignaturePlaceholder\ESignaturePlaceholderTrait; use FPDF\Scripts\Attachments\AttachmentsTrait; use FPDF\Scripts\PDFBookmark\PDFBookmarkTrait; use FPDF\Scripts\PDFCircularText\PDFCircularTextTrait; @@ -29,6 +30,9 @@ class FawnoFPDF extends PDFWrapper { AttachmentsTrait::_putresources as Attachments_putresources; AttachmentsTrait::_putcatalog as Attachments_putcatalog; } + use ESignaturePlaceholderTrait{ + ESignaturePlaceholderTrait::_putcatalog as ESignaturePlaceholder_putcatalog; + } use PDFBookmarkTrait { PDFBookmarkTrait::_putresources as PDFBookmark_putresources; PDFBookmarkTrait::_putcatalog as PDFBookmark_putcatalog; @@ -59,5 +63,6 @@ protected function _putcatalog() parent::_putcatalog(); $this->_putbookmarkscatalog(); $this->_putfilescatalog(); + $this->_putesignatureplaceholdercatalog(); } } diff --git a/tests/Scripts/ESignaturePlaceholderTraitTest.php b/tests/Scripts/ESignaturePlaceholderTraitTest.php new file mode 100644 index 0000000..1aabf7a --- /dev/null +++ b/tests/Scripts/ESignaturePlaceholderTraitTest.php @@ -0,0 +1,22 @@ +AddSignatureField(20, 15, 120, 40); + + $this->assertFileCanBeCreated($pdf); + + $this->assertPdfIsOk($pdf); + } + } diff --git a/tests/examples/example.pdf b/tests/examples/example.pdf index 8c4f4754048ce599a2e46f6ea6d02def99e23fdf..2eaf5e10f05b1c572baa524d3e06de7fc64ad17e 100644 GIT binary patch literal 28654 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%0AK4**$j|Xk>eH{Vk70`cKTUxS8Lq ztw|Yo(n_8S<>sW}5cm+M8XViH{E&8ZC^q{Zue{7WPoq`m3!TBc(y9+f&-O|~vmVOL zYM#+`_PNo~Nuxl|EDEX3I)5R|&MLH22*Rau@+cn`!dGiCbULO^zeiX$V@tb6ahQlU zW2twiM8n90>_Ez-y~XTw>Jj$}zcD%LS90@aeq#5n%Qb1LQ9ov6rgGKc8a{=+Q6etZna7cJwCQwo7%t7cJZ8g%7YW{#^L-7+=XYN z)SK-Fnxhk%LxQe|U(PiT)6BZ-)ovJZR8MrvOJSw$JL&kL65724UqpmwFy3KzWx<4D z<^F+_0Rx^Y+j3=Ix9qU83Ca7dcKK1S)ZVRF&Q{S;F=_541O8w60s{-^cW+7s5q_PV z9KC}*N!6A$Wys*0B~SSZ4R#vtI2=43x?hIQ5O2&zt*Lgi$3I~9+jy1C?%^BXtT;H`bE@oOBEz^>a!Vyr_*~fR(*b|EwGZG)Cpni7k^d``|EmM-LUOdr$pK$rAd*8K*hU=-2O&t|8KUPLN_Oi3 zeq%5Z4S34>P1$uQ*k*;uVxi#Ma9cV>!e(6;}w0A-iln& zH~C_jBT~D7{!!m+gF4Il9Q-MYSik5>vWrrIOb zEvt;$eEZ7GApHk6V}dO9G83ekVP!~@!^r>E0;n}Ml-%oso*b2zzjyj3^(N3OA}>Re zN5QiE}o+SZh| zj8?ALd6AcCDE)EgX5eHgmqjKIxn+^b2>}17XiCc_cbTQCSLOR=z+^#}f!EnDa>~I! z0#h0=Dn~^5skVKO&iihLz1Fm#$RnLB^nV%Lq+8dIt^|eeR%QgB!p)G$f-XzF&Zv=7 zEB;YxN~0#@G3)<8Xy&b-T+e3UYi$~EgaxqDTN%&fgpPj%C*HbV?B}~9=@oSM+4blp-sqTI1{LzdF3D(8-u+H{M{e`yTFHB*%x#5v~Y_Vy*bq~^WS!qD`fPlF#{HPIA@@p zO~L*O%n%Ssi@+nwn#NtVJ*4F{-qQ*=AqZ?juUF_6&FiiJC{7tT6No6&GKWU4B2|`G zX?&ux5}`Cq84ICd&mv*4DaeSXOkVjPt-bx!MxNw*?p?&lZ0=;-BRU@GGDV zAos(--FoHM6)AxBTdR6^5J^(vkvKqGf=pMWBSHMBM2XZhoQX#x0mZBcu2@%sGx?;K zH7xrOtZf*jKxj0h)So{Pu=PA(P;EfVG#DCAOywf}fn3NmxHN|N{IHHjya0yzMjD2) z9GqylHk6YlCY^1dA&|i6-#|kW=lKmZ6w#_~prJ892i`!#5YyE*&}4|arL3m`X$-)y z+dzX+;=*BD0Bd*l!Asq5U1Jo^klSWbC!lcm@xG)5;=k&&V5i&9qG!&e&918xIatO>u*??0X zi1W^R{?G{GWA_Fc2D4FKKzkHz4#U7G^b7-T-PoVu($W-t5*X#gW%oKa3q|#dDMFT z03%1iGZH~DF5yU|3+3^F zQ|b?eq-b+E3iX$AXyTe}Lw%UFHphd21Lk%Da0DMPzY}L^U|xXgy1IIRh*~DD{nTA- zTtR4nec}a>kV)`$1AYXmCH<%Z%(xIRgf!E-d*BEjr0E5YmXbm-iioJ{U>W}hp{39b literal 27707 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 A{r~^~ diff --git a/tests/examples/exampleESignaturePlaceholderTraitTest.pdf b/tests/examples/exampleESignaturePlaceholderTraitTest.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ca001b6c065ac26f3439c4b49e224a1285fc4099 GIT binary patch literal 703 zcmZWnK~BRk5JVi!jTh{tY7wG#oH$KU#etSc6(CSR0;%E+j~@D?7$8@O=g z0UTJ+#E{M+APJPLR>pU}?dlZo+tim7bXl zE07DIuS-k)3IbOj955_%$KuMGEiR@O4e)rHS{z`eb0R;%a$@hm>(WSN4W21xp2J8`PjyvW zMi2#FJL=xBrCjG`K}(K}&Mwfxh*LDcFL7>x4<9Iv!}{*m_mKV+QvlHGIWB&Ec6*Q6 zPq}1Qf7$a{MtQViM^8e+9nwn)*g}^BiU?YReJP~!q)<}IK!&@*YYNfaSrHtrP%hTh zPi;EY6SuJm?PsyDrG~k|F%!^X;`czPl&@e6KbY4crS3rai^-6(`G*P7UB{x%8s;mK z`ENGxS7xnAizymBookmark('Paragraph 3', false, 1, -1); $pdf->Cell(0, 6, 'Paragraph 3'); + // ESignaturePlaceholderTrait + // Page 3 + $pdf->AddPage(); + $pdf->AddSignatureField(20, 15, 120, 40); + // Page 4 + $pdf->AddPage(); + $pdf->AddSignatureField(20, 15, 120, 40); + //EAN13Trait $pdf->AddPage(); $pdf->Bookmark('EAN13 Barcode', false);