From 790d8c6ff0fd3bd2e8648b75db605e4ad8bdcacb Mon Sep 17 00:00:00 2001 From: rafalpospiech Date: Fri, 1 Feb 2019 13:28:29 +0100 Subject: [PATCH] malformed tables bugfix --- examples/Invoice.html | 222 +++++++++++++++++++++++++++++++++++++++ examples/Invoice.php | 8 ++ examples/PagesTables.pdf | Bin 2328520 -> 2328476 bytes examples/helloWorld.pdf | Bin 3122152 -> 3122152 bytes examples/wordWrap.html | 75 ++++++++++--- examples/wordWrap.pdf | Bin 653807 -> 778518 bytes lib/Html/Parser.php | 13 +-- lib/Style/Style.php | 200 ++++++++++++++++++----------------- 8 files changed, 398 insertions(+), 120 deletions(-) create mode 100644 examples/Invoice.html create mode 100644 examples/Invoice.php diff --git a/examples/Invoice.html b/examples/Invoice.html new file mode 100644 index 0000000..67bdc97 --- /dev/null +++ b/examples/Invoice.html @@ -0,0 +1,222 @@ +
+
+ + + + + + + +
VAT invoice number F-I1Issued date 2019-02-16
+
+
+
+ + + + + + + +
Powered by YetiForceCRM{p}/{a}
+
+ + + + + + + + + + + + + + + + + +
Issued dateSale dateDue datePayment method
2019-02-162019-02-102019-02-11Bank transfer
+ + + + + + + + + + + + + +
SellerPurchaser
+ YetiForce Sp. z o.o.
+
+
+ Vat ID: +
+ Agro-Ferm Sp. z o.o.
+ ul. Wiosenna 6940
+ 59-621 Zielonka
+ Vat ID: 6547663360 +
+
+

VAT invoice number: F-I1

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Item nameQuantityUnit priceNetGross
transferowanie pliki – FTP, + P2P;
W takim Litwinka tylko się dziś toczy się szczyci i żądał. I ogląda czule, jako + wierzchołki i hec! od płaczącej matki pod las wiąże w bieg chybkim był żonaty a Praga już jej talerzów, + nie ma żądło w wiecznej wiośnie pachnące kwitną lasy. +
86896186.6 €22729.8 €60935.1 €
Steca Power Tarom12/24/48V + 55-140A
Hreczecha. Tu Kościuszko w drewnianej szafie poznał z żoną i objął + gospodarstwo. przyrzekł na piersiach, przydawając zasłony sukience. +
1733508.3 €76176.1 €32199.2 €
98905.9 €93134.3 €
+
+ + + + + + + +
+ + + + + + + + + + + + +
Tax summary
Amount0 €
+
+ + + + + + + + + + + +
Discount summary
59751.4 €
+
+ + + + + + + +
+ + + + + + + + + + + + + +
+ Currency summary +
Amount0 zł
+
+ + + + + + + + + + + +
Total
+ 93134.3 zł +
+
+ + + + + + + + + + + +
+
Comments
+
Niemnem rozciągnionych. Do + zobaczenia! tak się w drobne strączki białe dziwnie ozdabiał głowę, bo tak i kiedy karę na waszych + polowaniach łowił? Piękna byłaby sława, a ubiór zwrócił oczy. wszyscy za zającami nie mające kłów, rogów, + pazurów zostawiano dla skończenia dawnego z Tadeuszem idą pod strzechą zmieścić się zatrudniał i opisuję, bo + tak piękny pies faworytny Żeby nie ma dotąd pierwsze na ambonie. Nauka dawną była, szło o kusego charta + którego posiadaniem pan Sędzia tuż nad nim w tym mieczem wypędzi z opieki panicz przed nim stał kwestarz, + Sędzia Podkomorzego zdał się długo dumał, nim szedł z dziecinną radością pociągnął za mych czasów w dłonie + jak biały ptak zleciała z liczby pługów orzących wcześnie łany ogromne ugoru czarnoziemne, zapewne należne + do Polski trzech mocarzów albo bierze. Nawet strony przeciwne wezwiemy na naukę młodzież lepsza, ale nigdzie + nie jedli. Stojąc i mimo całą rodzina pańska, jak szli na szańcach Pragi, na prawo, koziołka, z chleba + gałeczki trzy z synowcem witania: dał mu z las drogi i chołodziec litewski milcząc żwawo jedli. , choć + świadka nie rozwity, lecz straszny na wieczerzę. Rykow. +
+
Issued by: YetiForce Demo
diff --git a/examples/Invoice.php b/examples/Invoice.php new file mode 100644 index 0000000..e348f9e --- /dev/null +++ b/examples/Invoice.php @@ -0,0 +1,8 @@ +init(); +$document->loadHtml(file_get_contents('Invoice.html')); +$pdfFile = $document->render(); +file_put_contents('Invoice.pdf', $pdfFile); diff --git a/examples/PagesTables.pdf b/examples/PagesTables.pdf index ba8eb1a3cc6af2f685e98f0bd2ac07f9d2f1f714..374dcf2699344003055f6e44ec054360bdb07639 100644 GIT binary patch delta 12023 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 delta 13800 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 diff --git a/examples/helloWorld.pdf b/examples/helloWorld.pdf index edadd630ec9540b32bee6f05e91be8118ce3caf5..bcbe666eeca4ec9247db1f7b2c100a95d25b7564 100644 GIT binary patch delta 481 zcmZ|JyG{Z@6vpwOqBwX%1-zh+f{Sw5jJqrg;VFCp8ykz=XCTJH(qf9Oc>_8-C@AdQ zO?(L+gMWw#I|Y;cs&nQ$-~4BinPdF^J5;v%fATdHN_Kp^*LU2G>vv@+JlC@wzq{Np zMuG62QX?nzD-cd9)SQ_4fqc`m*b=LCt>S7vRYAYR1Ivt9S4mIfhM82Vo9DuH#k5Ll z#?{eR?;}b+qa=e3Y+?&pY-0yG>_Q-qJ?!HEhd4q3$2h?$iYTFsGo0fBm#E+h*SLYi aE$&c74fn86#{(YGKoc#rzoW!{{#yW8<)&}| delta 471 zcmZ|JJ5Iwu6op|WyvMwfKnR3{fxHNh(bL{uz+4bad~#A`r^f(1ucZj0(l<_E&YKCdWOHzG8D!)%IgPu z_A=2>7&jHUsi~pxwECHt4P}$LCGx@6M~bT*gYS_E@x|UrtSIZVgmA^~M zo$R&nzg|`+&AdObpRYI1QSuTcIpnc`MJ!<%D_F%E1RShm1Dn{wHVP=BgdOanj6GDa kj{{V3h#KlRg2XXS&_EL{w9&ySx;Vo*E^zrCCF=I;8*q1}n*aa+ diff --git a/examples/wordWrap.html b/examples/wordWrap.html index dc53f2b..41f3efd 100644 --- a/examples/wordWrap.html +++ b/examples/wordWrap.html @@ -1,28 +1,73 @@
- test -
test2
-
- Lorem ipsum dolor sit amet, ad est tollit percipit definitionem, id facete persius quaerendum qui, persius dolorum efficiantur et vix. Ad illud malis oratio vix, duo dolor verterem no, eum ad mutat epicurei. At ceteros accommodare sed. Decore scripserit definitiones et pri, at duo purto sale quidam. + test +
test2
+
+ Lorem ipsum dolor sit amet, ad est tollit percipit definitionem, id facete persius quaerendum qui, persius + dolorum efficiantur et vix. Ad illud malis oratio vix, duo dolor verterem no, eum ad mutat epicurei. At ceteros + accommodare sed. Decore scripserit definitiones et pri, at duo purto sale quidam. - Malis posidonium vix ea. In solum intellegebat quo, has ut dico iusto deleniti. Et vis movet errem. Elit graeci et nam. An molestie lucilius persecuti quo, ei liber dolorem lucilius vim. + Malis posidonium vix ea. In solum intellegebat quo, has ut dico iusto deleniti. Et vis movet errem. Elit graeci + et nam. An molestie lucilius persecuti quo, ei liber dolorem lucilius vim. - Sint molestiae posidonium mea ei, id usu tamquam postulant, per id ipsum clita euismod. Tale placerat interesset ius et. Has aeque audiam te. Aperiam habemus ne eum, ei malis putent est. -
+ Sint molestiae posidonium mea ei, id usu tamquam postulant, per id ipsum clita euismod. Tale placerat interesset + ius et. Has aeque audiam te. Aperiam habemus ne eum, ei malis putent est. +
-
- Lorem ipsum dolor sit amet, ad est tollit percipit definitionem, id facete persius quaerendum qui, persius dolorum efficiantur et vix. Ad illud malis oratio vix, duo dolor verterem no, eum ad mutat epicurei. At ceteros accommodare sed. Decore scripserit definitiones et pri, at duo purto sale quidam. +
+ Lorem ipsum dolor sit amet, ad est tollit percipit definitionem, id facete persius quaerendum qui, persius + dolorum efficiantur et vix. Ad illud malis oratio vix, duo dolor verterem no, eum ad mutat epicurei. At ceteros + accommodare sed. Decore scripserit definitiones et pri, at duo purto sale quidam. - Malis posidonium vix ea. In solum intellegebat quo, has ut dico iusto deleniti. Et vis movet errem. Elit graeci et nam. An molestie lucilius persecuti quo, ei liber dolorem lucilius vim. + Malis posidonium vix ea. In solum intellegebat quo, has ut dico iusto deleniti. Et vis movet errem. Elit graeci + et nam. An molestie lucilius persecuti quo, ei liber dolorem lucilius vim. - Sint molestiae posidonium mea ei, id usu tamquam postulant, per id ipsum clita euismod. Tale placerat interesset ius et. Has aeque audiam te. Aperiam habemus ne eum, ei malis putent est. -
+ Sint molestiae posidonium mea ei, id usu tamquam postulant, per id ipsum clita euismod. Tale placerat interesset + ius et. Has aeque audiam te. Aperiam habemus ne eum, ei malis putent est. +
- Lorem ipsum dolor sit amet, ad est tollit percipit definitionem, id facete persius quaerendum qui, persius dolorum efficiantur et vix. Ad illud malis oratio vix, duo dolor verterem no, eum ad mutat epicurei. At ceteros accommodare sed. Decore scripserit definitiones et pri, at duo purto sale quidam. + Lorem ipsum dolor sit amet, ad est tollit percipit definitionem, id facete persius quaerendum qui, persius dolorum + efficiantur et vix. Ad illud malis oratio vix, duo dolor verterem no, eum ad mutat epicurei. At ceteros accommodare + sed. Decore scripserit definitiones et pri, at duo purto sale quidam. - Malis posidonium vix ea. In solum intellegebat quo, has ut dico iusto deleniti. Et vis movet errem. Elit graeci et nam. An molestie lucilius persecuti quo, ei liber dolorem lucilius vim. + Malis posidonium vix ea. In solum intellegebat quo, has ut dico iusto deleniti. Et vis movet errem. Elit graeci et + nam. An molestie lucilius persecuti quo, ei liber dolorem lucilius vim. - Sint molestiae posidonium mea ei, id usu tamquam postulant, per id ipsum clita euismod. Tale placerat interesset ius et. Has aeque audiam te. Aperiam habemus ne eum, ei malis putent est. + Sint molestiae posidonium mea ei, id usu tamquam postulant, per id ipsum clita euismod. Tale placerat interesset ius + et. Has aeque audiam te. Aperiam habemus ne eum, ei malis putent est. +
+
+ Lorem ipsum dolor sit amet, ad est tollit percipit definitionem, id facete persius quaerendum qui, persius dolorum + efficiantur et vix. Ad illud malis oratio vix, duo dolor verterem no, eum ad mutat epicurei. At ceteros accommodare + sed. Decore scripserit definitiones et pri, at duo purto sale quidam. + + Malis posidonium vix ea. In solum intellegebat quo, has ut dico iusto deleniti. Et vis movet errem. Elit graeci et + nam. An molestie lucilius persecuti quo, ei liber dolorem lucilius vim. + + Sint molestiae posidonium mea ei, id usu tamquam postulant, per id ipsum clita euismod. Tale placerat interesset ius + et. Has aeque audiam te. Aperiam habemus ne eum, ei malis putent est. +
+
+ Lorem ipsum dolor sit amet, ad est tollit percipit definitionem, id facete persius quaerendum qui, persius dolorum + efficiantur et vix. Ad illud malis oratio vix, duo dolor verterem no, eum ad mutat epicurei. At ceteros accommodare + sed. Decore scripserit definitiones et pri, at duo purto sale quidam. + + Malis posidonium vix ea. In solum intellegebat quo, has ut dico iusto deleniti. Et vis movet errem. Elit graeci et + nam. An molestie lucilius persecuti quo, ei liber dolorem lucilius vim. + + Sint molestiae posidonium mea ei, id usu tamquam postulant, per id ipsum clita euismod. Tale placerat interesset ius + et. Has aeque audiam te. Aperiam habemus ne eum, ei malis putent est. +
+
+ Lorem ipsum dolor sit amet, ad est tollit percipit definitionem, id facete persius quaerendum qui, persius dolorum + efficiantur et vix. Ad illud malis oratio vix, duo dolor verterem no, eum ad mutat epicurei. At ceteros accommodare + sed. Decore scripserit definitiones et pri, at duo purto sale quidam. + + Malis posidonium vix ea. In solum intellegebat quo, has ut dico iusto deleniti. Et vis movet errem. Elit graeci et + nam. An molestie lucilius persecuti quo, ei liber dolorem lucilius vim. + + Sint molestiae posidonium mea ei, id usu tamquam postulant, per id ipsum clita euismod. Tale placerat interesset ius + et. Has aeque audiam te. Aperiam habemus ne eum, ei malis putent est.
diff --git a/examples/wordWrap.pdf b/examples/wordWrap.pdf index b73354092e8ed30a1b775fb9dfccf7480f3b3d27..706b2dd8ac4c6713f6e3ac58ea64e64c541d5935 100644 GIT binary patch delta 41168 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 delta 156 zcmbPsNdNt3^$FQLhFl5?`rer-#R}0T8=GIqP5xFcGP%=6V6sewsDz=Jxw(-MNQF;o zUV27}p#nr?`i3ZOo9O|}j1to~)N^x9K36F;xnL&$bbkdVuIV!sn0TA-SG3=+VBCJc wf@xu2yUzw@AZ7t#Rv=~rVs;?r0AkMVJ{!2sdQHFmfLoE-*urr7{|DUS0OegdG5`Po diff --git a/lib/Html/Parser.php b/lib/Html/Parser.php index 2ddf2e0..411b8d9 100644 --- a/lib/Html/Parser.php +++ b/lib/Html/Parser.php @@ -146,37 +146,37 @@ public function setGroupOptions(PageGroupBox $root, \DOMDocument $domDocument) } } if ($childDomElement->hasAttribute('data-margin-left')) { - $root->marginLeft = (float)$childDomElement->getAttribute('data-margin-left'); + $root->marginLeft = (float) $childDomElement->getAttribute('data-margin-left'); if (!$root->marginLeft) { $root->marginLeft = 30; } } if ($childDomElement->hasAttribute('data-margin-right')) { - $root->marginRight = (float)$childDomElement->getAttribute('data-margin-right'); + $root->marginRight = (float) $childDomElement->getAttribute('data-margin-right'); if (!$root->marginRight) { $root->marginRight = 30; } } if ($childDomElement->hasAttribute('data-margin-top')) { - $root->marginTop = (float)$childDomElement->getAttribute('data-margin-top'); + $root->marginTop = (float) $childDomElement->getAttribute('data-margin-top'); if (!$root->marginTop) { $root->marginTop = 40; } } if ($childDomElement->hasAttribute('data-margin-bottom')) { - $root->marginBottom = (float)$childDomElement->getAttribute('data-margin-bottom'); + $root->marginBottom = (float) $childDomElement->getAttribute('data-margin-bottom'); if (!$root->marginBottom) { $root->marginBottom = 40; } } if ($childDomElement->hasAttribute('data-header-top')) { - $root->headerTop = (float)$childDomElement->getAttribute('data-header-top'); + $root->headerTop = (float) $childDomElement->getAttribute('data-header-top'); if (!$root->headerTop) { $root->headerTop = 10; } } if ($childDomElement->hasAttribute('data-footer-bottom')) { - $root->footerBottom = (float)$childDomElement->getAttribute('data-footer-bottom'); + $root->footerBottom = (float) $childDomElement->getAttribute('data-footer-bottom'); if (!$root->footerBottom) { $root->footerBottom = 10; } @@ -221,6 +221,7 @@ public function parse() $pageGroup->buildTree(); $pageGroup->fixTables(); + $pageGroup->getStyle()->fixDomTree(false); $pageGroup->layout(); $page->setBox($pageGroup); diff --git a/lib/Style/Style.php b/lib/Style/Style.php index 4544b53..9530ab9 100644 --- a/lib/Style/Style.php +++ b/lib/Style/Style.php @@ -196,72 +196,72 @@ class Style extends \YetiForcePDF\Base 'color' => 'blue', ], 'a:visited:active' => [ - 'color' => 'blue',], + 'color' => 'blue', ], 'address' => [ 'display' => 'block', - 'font-style' => 'italic',], + 'font-style' => 'italic', ], 'area' => [ - 'display' => 'none',], + 'display' => 'none', ], 'article' => [ - 'display' => 'block',], + 'display' => 'block', ], 'aside' => [ - 'display' => 'block',], + 'display' => 'block', ], 'b' => [ - 'font-weight' => 'bold',], + 'font-weight' => 'bold', ], 'bdo' => [ - 'unicode-bidi' => 'bidi-override',], + 'unicode-bidi' => 'bidi-override', ], 'blockquote' => [ 'display' => 'block', 'margin-top' => '1em', 'margin-bottom' => '1em', 'margin-left' => '40px', - 'margin-right' => '40px',], + 'margin-right' => '40px', ], 'body' => [ 'display' => 'block', - 'margin' => '8px',], + 'margin' => '8px', ], 'body:focus' => [ - 'outline' => 'none',], + 'outline' => 'none', ], 'br' => [ - 'display' => 'block',], + 'display' => 'block', ], 'button' => [ 'display' => 'inline-block', - 'padding' => '10px',], + 'padding' => '10px', ], 'caption' => [ 'display' => 'table-caption', - 'text-align' => 'center',], + 'text-align' => 'center', ], 'cite' => [ - 'font-style' => 'italic',], + 'font-style' => 'italic', ], 'code' => [ - 'font-family' => 'monospace',], + 'font-family' => 'monospace', ], 'col' => [ - 'display' => 'table-column',], + 'display' => 'table-column', ], 'colgroup' => [ - 'display:table-column-group',], + 'display:table-column-group', ], 'datalist' => [ - 'display' => 'none',], + 'display' => 'none', ], 'dd' => [ 'display' => 'block', - 'margin-left' => '40px',], + 'margin-left' => '40px', ], 'del' => [ - 'text-decoration' => 'line-through',], + 'text-decoration' => 'line-through', ], 'details' => [ - 'display' => 'block',], + 'display' => 'block', ], 'dfn' => [ - 'font-style' => 'italic',], + 'font-style' => 'italic', ], 'div' => [ - 'display' => 'block',], + 'display' => 'block', ], 'dl' => [ 'display' => 'block', 'margin-top' => '1em', 'margin-bottom' => '1em', 'margin-left' => '0', - 'margin-right' => '0',], + 'margin-right' => '0', ], 'dt' => [ - 'display' => 'block',], + 'display' => 'block', ], 'em' => [ - 'font-style' => 'italic',], + 'font-style' => 'italic', ], 'embed:focus' => [ - 'outline' => 'none',], + 'outline' => 'none', ], 'fieldset' => [ 'display' => 'block', 'margin-left' => '2px', @@ -272,18 +272,18 @@ class Style extends \YetiForcePDF\Base 'padding-right' => '0.75em', ], 'figcaption' => [ - 'display' => 'block',], + 'display' => 'block', ], 'figure' => [ 'display' => 'block', 'margin-top' => '1em', 'margin-bottom' => '1em', 'margin-left' => '40px', - 'margin-right' => '40px',], + 'margin-right' => '40px', ], 'footer' => [ - 'display' => 'block',], + 'display' => 'block', ], 'form' => [ 'display' => 'block', - 'margin-top' => '0em',], + 'margin-top' => '0em', ], 'h1' => [ 'display' => 'block', 'font-size' => '2em', @@ -291,7 +291,7 @@ class Style extends \YetiForcePDF\Base 'margin-bottom' => '0.67em', 'margin-left' => '0', 'margin-right' => '0', - 'font-weight' => 'bold',], + 'font-weight' => 'bold', ], 'h2' => [ 'display' => 'block', 'font-size' => '1.5em', @@ -299,7 +299,7 @@ class Style extends \YetiForcePDF\Base 'margin-bottom' => '0.83em', 'margin-left' => '0', 'margin-right' => '0', - 'font-weight' => 'bold',], + 'font-weight' => 'bold', ], 'h3' => [ 'display' => 'block', 'font-size' => '1.17em', @@ -307,14 +307,14 @@ class Style extends \YetiForcePDF\Base 'margin-bottom' => '1em', 'margin-left' => '0', 'margin-right' => '0', - 'font-weight' => 'bold',], + 'font-weight' => 'bold', ], 'h4' => [ 'display' => 'block', 'margin-top' => '1.33em', 'margin-bottom' => '1.33em', 'margin-left' => '0', 'margin-right' => '0', - 'font-weight' => 'bold',], + 'font-weight' => 'bold', ], 'h5' => [ 'display' => 'block', 'font-size' => '.83em', @@ -322,7 +322,7 @@ class Style extends \YetiForcePDF\Base 'margin-bottom' => '1.67em', 'margin-left' => '0', 'margin-right' => '0', - 'font-weight' => 'bold',], + 'font-weight' => 'bold', ], 'h6' => [ 'display' => 'block', 'font-size' => '.67em', @@ -330,11 +330,11 @@ class Style extends \YetiForcePDF\Base 'margin-bottom' => '2.33em', 'margin-left' => '0', 'margin-right' => '0', - 'font-weight' => 'bold',], + 'font-weight' => 'bold', ], 'head' => [ - 'display' => 'none',], + 'display' => 'none', ], 'header' => [ - 'display' => 'block',], + 'display' => 'block', ], 'hr' => [ 'display' => 'block', 'margin-top' => '0.5em', @@ -343,39 +343,39 @@ class Style extends \YetiForcePDF\Base 'margin-right' => '0px', 'border-style' => 'solid', 'border-color' => 'lightgray', - 'border-top-width' => '1px',], + 'border-top-width' => '1px', ], 'html' => [ - 'display' => 'block',], + 'display' => 'block', ], 'html:focus' => [ - 'outline' => 'none',], + 'outline' => 'none', ], 'i' => [ - 'font-style' => 'italic',], + 'font-style' => 'italic', ], 'iframe:focus' => [ - 'outline' => 'none',], + 'outline' => 'none', ], 'iframe[seamless]' => [ - 'display' => 'block',], + 'display' => 'block', ], 'img' => [ - 'display' => 'inline-block',], + 'display' => 'inline-block', ], 'ins' => [ - 'text-decoration' => 'underline',], + 'text-decoration' => 'underline', ], 'kbd' => [ - 'font-family' => 'monospace',], + 'font-family' => 'monospace', ], 'label' => [ - 'cursor' => 'default',], + 'cursor' => 'default', ], 'legend' => [ 'display' => 'block', 'padding-left' => '2px', 'padding-right' => '2px', - 'border' => 'none',], + 'border' => 'none', ], 'li' => [ - 'display' => 'list-item',], + 'display' => 'list-item', ], 'link' => [ - 'display' => 'none',], + 'display' => 'none', ], 'map' => [ - 'display' => 'inline',], + 'display' => 'inline', ], 'mark' => [ 'background-color' => 'yellow', - 'color' => 'black',], + 'color' => 'black', ], 'menu' => [ 'display' => 'block', 'list-style-type' => 'disc', @@ -383,11 +383,11 @@ class Style extends \YetiForcePDF\Base 'margin-bottom' => '1em', 'margin-left' => '0', 'margin-right' => '0', - 'padding-left' => '40px',], + 'padding-left' => '40px', ], 'nav' => [ - 'display' => 'block',], + 'display' => 'block', ], 'object:focus' => [ - 'outline' => 'none',], + 'outline' => 'none', ], 'ol' => [ 'display' => 'block', 'list-style-type' => 'decimal', @@ -395,71 +395,71 @@ class Style extends \YetiForcePDF\Base 'margin-bottom' => '1em', 'margin-left' => '0', 'margin-right' => '0', - 'padding-left' => '40px',], + 'padding-left' => '40px', ], 'output' => [ - 'display' => 'inline',], + 'display' => 'inline', ], 'p' => [ 'display' => 'block', 'margin-top' => '1em', 'margin-bottom' => '1em', 'margin-left' => '0', - 'margin-right' => '0',], + 'margin-right' => '0', ], 'param' => [ - 'display' => 'none',], + 'display' => 'none', ], 'pre' => [ 'display' => 'block', 'font-family' => 'monospace', 'white-space' => 'pre', - 'margin' => '1em0',], + 'margin' => '1em0', ], 'q' => [ - 'display' => 'inline',], + 'display' => 'inline', ], 'q::before' => [ - 'content' => 'open-quote',], + 'content' => 'open-quote', ], 'q::after' => [ - 'content' => 'close-quote',], + 'content' => 'close-quote', ], 'rt' => [ - 'line-height' => 'normal',], + 'line-height' => 'normal', ], 's' => [ - 'text-decoration' => 'line-through',], + 'text-decoration' => 'line-through', ], 'samp' => [ - 'font-family' => 'monospace',], + 'font-family' => 'monospace', ], 'script' => [ - 'display' => 'none',], + 'display' => 'none', ], 'section' => [ - 'display' => 'block',], + 'display' => 'block', ], 'small' => [ - 'font-size' => 'smaller',], + 'font-size' => 'smaller', ], 'strike' => [ - 'text-decoration' => 'line-through',], + 'text-decoration' => 'line-through', ], 'strong' => [ - 'font-weight' => 'bold',], + 'font-weight' => 'bold', ], 'style' => [ - 'display' => 'none',], + 'display' => 'none', ], 'sub' => [ 'vertical-align' => 'sub', - 'font-size' => 'smaller',], + 'font-size' => 'smaller', ], 'summary' => [ - 'display' => 'block',], + 'display' => 'block', ], 'sup' => [ 'vertical-align' => 'super', - 'font-size' => 'smaller',], + 'font-size' => 'smaller', ], 'table' => [ 'display' => 'table', 'border-collapse' => 'separate', 'border-spacing' => '2px', - 'border-color' => 'gray',], + 'border-color' => 'gray', ], 'tbody' => [ 'display' => 'table-row-group', 'vertical-align' => 'middle', - 'border-color' => 'inherit',], + 'border-color' => 'inherit', ], 'td' => [ 'display' => 'table-cell', 'vertical-align' => 'inherit', - 'padding' => '1px',], + 'padding' => '1px', ], 'tfoot' => [ 'display' => 'table-footer-group', 'vertical-align' => 'middle', - 'border-color' => 'inherit',], + 'border-color' => 'inherit', ], 'th' => [ 'display' => 'table-cell', 'vertical-align' => 'inherit', @@ -471,15 +471,15 @@ class Style extends \YetiForcePDF\Base 'thead' => [ 'display' => 'table-header-group', 'vertical-align' => 'middle', - 'border-color' => 'inherit',], + 'border-color' => 'inherit', ], 'title' => [ - 'display' => 'none',], + 'display' => 'none', ], 'tr' => [ 'display' => 'table-row', 'vertical-align' => 'inherit', - 'border-color' => 'inherit',], + 'border-color' => 'inherit', ], 'u' => [ - 'text-decoration' => 'underline',], + 'text-decoration' => 'underline', ], 'ul' => [ 'display' => 'block', 'list-style-type' => 'disc', @@ -487,9 +487,9 @@ class Style extends \YetiForcePDF\Base 'margin-bottom' => '1em', 'margin-left' => '0', 'margin-right' => '0', - 'padding-left' => '40px',], + 'padding-left' => '40px', ], 'var' => [ - 'font-style' => 'italic',], + 'font-style' => 'italic', ], ]; /** @@ -896,7 +896,7 @@ public function getGraphicState(): GraphicState * Convert units from unit to pdf document units. * * @param string $unit - * @param float $size + * @param float $size * * @return string */ @@ -1104,10 +1104,10 @@ protected function parseImage(array $ruleParsed) $imageName = $this->backgroundImage->getImageName(); $this->document->getCurrentPage()->addResource('XObject', $imageName, $this->backgroundImage); if ($ruleParsed['width'] === 'auto') { - $ruleParsed['width'] = ((string)$this->backgroundImage->getWidth()) . 'px'; + $ruleParsed['width'] = ((string) $this->backgroundImage->getWidth()) . 'px'; } if ($ruleParsed['height'] === 'auto') { - $ruleParsed['height'] = ((string)$this->backgroundImage->getHeight()) . 'px'; + $ruleParsed['height'] = ((string) $this->backgroundImage->getHeight()) . 'px'; } return $ruleParsed; } @@ -1145,7 +1145,7 @@ protected function parseGraphicState(array $ruleParsed, array $inherited) /** * Apply text style - default style for text nodes. * - * @param array $rulesParsed + * @param array $rulesParsed * @param &array $inherited * * @return array @@ -1300,9 +1300,11 @@ protected function parse() /** * Fix tables. * + * @param bool $removeBottomBorders + * * @return $this */ - public function fixTables() + public function fixTables(bool $removeBottomBorders) { $box = $this->getBox(); $boxStyle = $box->getStyle(); @@ -1348,7 +1350,7 @@ public function fixTables() Math::max($cellBorders[2], $cellStyle->getRules('border-bottom-width')), Math::max($cellBorders[3], $cellStyle->getRules('border-left-width')), ]; - if ($rowIndex + $column->getRowSpan() < $rowsCount) { + if ($rowIndex + $column->getRowSpan() < $rowsCount && $removeBottomBorders) { $cellStyle->setRule('border-bottom-width', '0'); } if ($columnIndex + $column->getColSpan() < $columnsCount) { @@ -1384,10 +1386,8 @@ public function fixTables() if ($boxStyle->getRules('border-collapse') === 'collapse') { $rowsCount = count($rows) - 1; foreach ($rows as $rowIndex => $row) { - if ($rowIndex < $rowsCount) { + if ($rowIndex < $rowsCount && $removeBottomBorders) { $row->getStyle()->setRule('border-bottom-width', '0'); - } else { - $row->getStyle()->setRule('border-bottom-width', $this->getOriginalRules('border-bottom-width')); } } } else { @@ -1414,13 +1414,15 @@ public function fixTables() /** * Fix dom tree - after dom tree is parsed we must clean up or add some rules. * + * @param bool $removeBottomBorders + * * @return $this */ - public function fixDomTree() + public function fixDomTree(bool $removeBottomBorders = true) { foreach ($this->box->getChildren() as $childBox) { - $childBox->getStyle()->fixTables(); - $childBox->getStyle()->fixDomTree(); + $childBox->getStyle()->fixTables($removeBottomBorders); + $childBox->getStyle()->fixDomTree($removeBottomBorders); } return $this; }