golden hour
/home/doctorbruno/public_html/taeionline.com/support/include/mpdf/vendor/mpdf/mpdf/src/Tag
⬆️ Go Up
Upload
File/Folder
Size
Actions
A.php
1.43 KB
Del
OK
Acronym.php
66 B
Del
OK
Address.php
65 B
Del
OK
Annotation.php
2.68 KB
Del
OK
Article.php
65 B
Del
OK
Aside.php
63 B
Del
OK
B.php
60 B
Del
OK
BarCode.php
9.61 KB
Del
OK
Bdi.php
62 B
Del
OK
Bdo.php
62 B
Del
OK
Big.php
62 B
Del
OK
BlockQuote.php
68 B
Del
OK
BlockTag.php
50.99 KB
Del
OK
Bookmark.php
746 B
Del
OK
Br.php
3.08 KB
Del
OK
Caption.php
65 B
Del
OK
Center.php
64 B
Del
OK
Cite.php
63 B
Del
OK
Code.php
63 B
Del
OK
ColumnBreak.php
69 B
Del
OK
Columns.php
1.49 KB
Del
OK
Dd.php
60 B
Del
OK
Del.php
62 B
Del
OK
Details.php
65 B
Del
OK
Div.php
61 B
Del
OK
Dl.php
60 B
Del
OK
DotTab.php
2.19 KB
Del
OK
Dt.php
60 B
Del
OK
Em.php
61 B
Del
OK
FieldSet.php
66 B
Del
OK
FigCaption.php
68 B
Del
OK
Figure.php
64 B
Del
OK
Font.php
63 B
Del
OK
Footer.php
64 B
Del
OK
Form.php
62 B
Del
OK
FormFeed.php
7.74 KB
Del
OK
H1.php
60 B
Del
OK
H2.php
60 B
Del
OK
H3.php
60 B
Del
OK
H4.php
60 B
Del
OK
H5.php
60 B
Del
OK
H6.php
60 B
Del
OK
HGroup.php
64 B
Del
OK
Header.php
64 B
Del
OK
Hr.php
4.58 KB
Del
OK
I.php
60 B
Del
OK
Img.php
14.89 KB
Del
OK
IndexEntry.php
817 B
Del
OK
IndexInsert.php
815 B
Del
OK
InlineTag.php
7.05 KB
Del
OK
Input.php
14.13 KB
Del
OK
Ins.php
62 B
Del
OK
Kbd.php
62 B
Del
OK
Legend.php
1.18 KB
Del
OK
Li.php
60 B
Del
OK
Main.php
62 B
Del
OK
Mark.php
63 B
Del
OK
Meter.php
17.03 KB
Del
OK
Nav.php
61 B
Del
OK
NewColumn.php
327 B
Del
OK
NewPage.php
64 B
Del
OK
Ol.php
60 B
Del
OK
Option.php
1.01 KB
Del
OK
P.php
59 B
Del
OK
PageBreak.php
66 B
Del
OK
PageFooter.php
5.07 KB
Del
OK
PageHeader.php
69 B
Del
OK
Pre.php
281 B
Del
OK
Progress.php
2.43 KB
Del
OK
Q.php
60 B
Del
OK
S.php
60 B
Del
OK
Samp.php
63 B
Del
OK
Section.php
65 B
Del
OK
Select.php
5.13 KB
Del
OK
SetHtmlPageFooter.php
2.27 KB
Del
OK
SetHtmlPageHeader.php
84 B
Del
OK
SetPageFooter.php
80 B
Del
OK
SetPageHeader.php
80 B
Del
OK
Small.php
64 B
Del
OK
Span.php
63 B
Del
OK
Strike.php
65 B
Del
OK
Strong.php
65 B
Del
OK
Sub.php
62 B
Del
OK
SubstituteTag.php
382 B
Del
OK
Summary.php
65 B
Del
OK
Sup.php
62 B
Del
OK
TBody.php
542 B
Del
OK
TFoot.php
1.64 KB
Del
OK
THead.php
1.65 KB
Del
OK
Table.php
54.95 KB
Del
OK
Tag.php
2.16 KB
Del
OK
Td.php
18.53 KB
Del
OK
TextArea.php
5.41 KB
Del
OK
TextCircle.php
8.29 KB
Del
OK
Th.php
170 B
Del
OK
Time.php
63 B
Del
OK
Toc.php
262 B
Del
OK
TocEntry.php
893 B
Del
OK
TocPageBreak.php
300 B
Del
OK
Tr.php
4.95 KB
Del
OK
Tt.php
61 B
Del
OK
Tta.php
578 B
Del
OK
Tts.php
340 B
Del
OK
Ttz.php
346 B
Del
OK
U.php
60 B
Del
OK
Ul.php
60 B
Del
OK
VarTag.php
65 B
Del
OK
WatermarkImage.php
705 B
Del
OK
WatermarkText.php
430 B
Del
OK
Edit: BlockTag.php
<?php namespace Mpdf\Tag; use Mpdf\Conversion\DecToAlpha; use Mpdf\Conversion\DecToRoman; use Mpdf\Utils\Arrays; use Mpdf\Utils\UtfString; abstract class BlockTag extends Tag { public function open($attr, &$ahtml, &$ihtml) { $tag = $this->getTagName(); // mPDF 6 Lists $this->mpdf->lastoptionaltag = ''; // mPDF 6 bidi // Block // If unicode-bidi set on current clock, any embedding levels, isolates, or overrides are closed (not inherited) if (isset($this->mpdf->blk[$this->mpdf->blklvl]['bidicode'])) { $blockpost = $this->mpdf->_setBidiCodes('end', $this->mpdf->blk[$this->mpdf->blklvl]['bidicode']); if ($blockpost) { $this->mpdf->OTLdata = []; if ($this->mpdf->tableLevel) { $this->mpdf->_saveCellTextBuffer($blockpost); } else { $this->mpdf->_saveTextBuffer($blockpost); } } } $p = $this->cssManager->PreviewBlockCSS($tag, $attr); if (isset($p['DISPLAY']) && strtolower($p['DISPLAY']) === 'none') { $this->mpdf->blklvl++; $this->mpdf->blk[$this->mpdf->blklvl]['hide'] = true; $this->mpdf->blk[$this->mpdf->blklvl]['tag'] = $tag; // mPDF 6 return; } if ($tag === 'CAPTION') { // position is written in AdjstHTML $divpos = 'T'; if (isset($attr['POSITION']) && strtolower($attr['POSITION']) === 'bottom') { $divpos = 'B'; } $cappos = 'T'; if (isset($attr['ALIGN']) && strtolower($attr['ALIGN']) === 'bottom') { $cappos = 'B'; } elseif (isset($p['CAPTION-SIDE']) && strtolower($p['CAPTION-SIDE']) === 'bottom') { $cappos = 'B'; } if (isset($attr['ALIGN'])) { unset($attr['ALIGN']); } if ($cappos != $divpos) { $this->mpdf->blklvl++; $this->mpdf->blk[$this->mpdf->blklvl]['hide'] = true; $this->mpdf->blk[$this->mpdf->blklvl]['tag'] = $tag; // mPDF 6 return; } } /* -- FORMS -- */ if ($tag === 'FORM') { $this->form->formMethod = 'POST'; if (isset($attr['METHOD']) && strtolower($attr['METHOD']) === 'get') { $this->form->formMethod = 'GET'; } $this->form->formAction = ''; if (isset($attr['ACTION'])) { $this->form->formAction = $attr['ACTION']; } } /* -- END FORMS -- */ /* -- CSS-POSITION -- */ if ((isset($p['POSITION']) && (strtolower($p['POSITION']) === 'fixed' || strtolower($p['POSITION']) === 'absolute')) && $this->mpdf->blklvl == 0) { if ($this->mpdf->inFixedPosBlock) { throw new \Mpdf\MpdfException('Cannot nest block with position:fixed or position:absolute'); } $this->mpdf->inFixedPosBlock = true; return; } /* -- END CSS-POSITION -- */ // Start Block $this->mpdf->ignorefollowingspaces = true; $lastbottommargin = 0; if ($this->mpdf->blockjustfinished && !count($this->mpdf->textbuffer) && $this->mpdf->y != $this->mpdf->tMargin && $this->mpdf->collapseBlockMargins) { $lastbottommargin = $this->mpdf->lastblockbottommargin; } $this->mpdf->lastblockbottommargin = 0; $this->mpdf->blockjustfinished = false; $this->mpdf->InlineBDF = []; // mPDF 6 $this->mpdf->InlineBDFctr = 0; // mPDF 6 $this->mpdf->InlineProperties = []; $this->mpdf->divbegin = true; $this->mpdf->linebreakjustfinished = false; /* -- TABLES -- */ if ($this->mpdf->tableLevel) { // If already something on the line if ($this->mpdf->cell[$this->mpdf->row][$this->mpdf->col]['s'] > 0 && !$this->mpdf->nestedtablejustfinished) { $this->mpdf->_saveCellTextBuffer("\n"); if (!isset($this->mpdf->cell[$this->mpdf->row][$this->mpdf->col]['maxs'])) { $this->mpdf->cell[$this->mpdf->row][$this->mpdf->col]['maxs'] = $this->mpdf->cell[$this->mpdf->row][$this->mpdf->col]['s']; } elseif ($this->mpdf->cell[$this->mpdf->row][$this->mpdf->col]['maxs'] < $this->mpdf->cell[$this->mpdf->row][$this->mpdf->col]['s']) { $this->mpdf->cell[$this->mpdf->row][$this->mpdf->col]['maxs'] = $this->mpdf->cell[$this->mpdf->row][$this->mpdf->col]['s']; } $this->mpdf->cell[$this->mpdf->row][$this->mpdf->col]['s'] = 0; // reset } // Cannot set block properties inside table - use Bold to indicate h1-h6 if ($tag === 'CENTER' && $this->mpdf->tdbegin) { $this->mpdf->cell[$this->mpdf->row][$this->mpdf->col]['a'] = $this->getAlign('center'); } $this->mpdf->InlineProperties['BLOCKINTABLE'] = $this->mpdf->saveInlineProperties(); $properties = $this->cssManager->MergeCSS('', $tag, $attr); if (!empty($properties)) { $this->mpdf->setCSS($properties, 'INLINE'); } // mPDF 6 Lists if ($tag === 'UL' || $tag === 'OL') { $this->mpdf->listlvl++; if (isset($attr['START'])) { $this->mpdf->listcounter[$this->mpdf->listlvl] = (int) $attr['START'] - 1; } else { $this->mpdf->listcounter[$this->mpdf->listlvl] = 0; } $this->mpdf->listitem = []; if ($tag === 'OL') { $this->mpdf->listtype[$this->mpdf->listlvl] = 'decimal'; } elseif ($tag === 'UL') { if ($this->mpdf->listlvl % 3 == 1) { $this->mpdf->listtype[$this->mpdf->listlvl] = 'disc'; } elseif ($this->mpdf->listlvl % 3 == 2) { $this->mpdf->listtype[$this->mpdf->listlvl] = 'circle'; } else { $this->mpdf->listtype[$this->mpdf->listlvl] = 'square'; } } } // mPDF 6 Lists - in Tables if ($tag === 'LI') { if ($this->mpdf->listlvl == 0) { //in case of malformed HTML code. Example:(...)</p><li>Content</li><p>Paragraph1</p>(...) $this->mpdf->listlvl++; // first depth level $this->mpdf->listcounter[$this->mpdf->listlvl] = 0; } $this->mpdf->listcounter[$this->mpdf->listlvl]++; $this->mpdf->listitem = []; //if in table - output here as a tabletextbuffer //position:inside OR position:outside (always output in table as position:inside) $decToAlpha = new DecToAlpha(); $decToRoman = new DecToRoman(); switch ($this->mpdf->listtype[$this->mpdf->listlvl]) { case 'upper-alpha': case 'upper-latin': case 'A': $blt = $decToAlpha->convert($this->mpdf->listcounter[$this->mpdf->listlvl]) . $this->mpdf->list_number_suffix; break; case 'lower-alpha': case 'lower-latin': case 'a': $blt = $decToAlpha->convert($this->mpdf->listcounter[$this->mpdf->listlvl], false) . $this->mpdf->list_number_suffix; break; case 'upper-roman': case 'I': $blt = $decToRoman->convert($this->mpdf->listcounter[$this->mpdf->listlvl]) . $this->mpdf->list_number_suffix; break; case 'lower-roman': case 'i': $blt = $decToRoman->convert($this->mpdf->listcounter[$this->mpdf->listlvl]) . $this->mpdf->list_number_suffix; break; case 'decimal': case '1': $blt = $this->mpdf->listcounter[$this->mpdf->listlvl] . $this->mpdf->list_number_suffix; break; default: $blt = '-'; if ($this->mpdf->listlvl % 3 == 1 && $this->mpdf->_charDefined($this->mpdf->CurrentFont['cw'], 8226)) { $blt = "\xe2\x80\xa2"; } // • elseif ($this->mpdf->listlvl % 3 == 2 && $this->mpdf->_charDefined($this->mpdf->CurrentFont['cw'], 9900)) { $blt = "\xe2\x9a\xac"; } // ⚬ elseif ($this->mpdf->listlvl % 3 == 0 && $this->mpdf->_charDefined($this->mpdf->CurrentFont['cw'], 9642)) { $blt = "\xe2\x96\xaa"; } // ▪ break; } // change to spaces if ($this->mpdf->usingCoreFont) { $ls = str_repeat(chr(160) . chr(160), ($this->mpdf->listlvl - 1) * 2) . $blt . ' '; } else { $ls = str_repeat("\xc2\xa0\xc2\xa0", ($this->mpdf->listlvl - 1) * 2) . $blt . ' '; } $this->mpdf->_saveCellTextBuffer($ls); $this->mpdf->cell[$this->mpdf->row][$this->mpdf->col]['s'] += $this->mpdf->GetStringWidth($ls); } return; } /* -- END TABLES -- */ if ($this->mpdf->lastblocklevelchange == 1) { $blockstate = 1; } // Top margins/padding only elseif ($this->mpdf->lastblocklevelchange < 1) { $blockstate = 0; } // NO margins/padding $this->mpdf->printbuffer($this->mpdf->textbuffer, $blockstate); $this->mpdf->textbuffer = []; $save_blklvl = $this->mpdf->blklvl; $save_blk = $this->mpdf->blk; $this->mpdf->Reset(); $pagesel = ''; /* -- CSS-PAGE -- */ if (isset($p['PAGE'])) { $pagesel = $p['PAGE']; } // mPDF 6 (uses $p - preview of properties so blklvl can be incremented after page-break) /* -- END CSS-PAGE -- */ // If page-box has changed AND/OR PAGE-BREAK-BEFORE // mPDF 6 (uses $p - preview of properties so blklvl can be imcremented after page-break) if (!$this->mpdf->tableLevel && (($pagesel && (!isset($this->mpdf->page_box['current']) || $pagesel != $this->mpdf->page_box['current'])) || (isset($p['PAGE-BREAK-BEFORE']) && $p['PAGE-BREAK-BEFORE']))) { // mPDF 6 pagebreaktype $startpage = $this->mpdf->page; $pagebreaktype = $this->mpdf->defaultPagebreakType; $this->mpdf->lastblocklevelchange = -1; if ($this->mpdf->ColActive) { $pagebreaktype = 'cloneall'; } if ($pagesel && (!isset($this->mpdf->page_box['current']) || $pagesel != $this->mpdf->page_box['current'])) { $pagebreaktype = 'cloneall'; } $this->mpdf->_preForcedPagebreak($pagebreaktype); if (isset($p['PAGE-BREAK-BEFORE'])) { if (strtoupper($p['PAGE-BREAK-BEFORE']) === 'RIGHT') { $this->mpdf->AddPage( $this->mpdf->CurOrientation, 'NEXT-ODD', '', '', '', '', '', '', '', '', '', '', '', '', '', 0, 0, 0, 0, $pagesel ); } elseif (strtoupper($p['PAGE-BREAK-BEFORE']) === 'LEFT') { $this->mpdf->AddPage( $this->mpdf->CurOrientation, 'NEXT-EVEN', '', '', '', '', '', '', '', '', '', '', '', '', '', 0, 0, 0, 0, $pagesel ); } elseif (strtoupper($p['PAGE-BREAK-BEFORE']) === 'ALWAYS') { $this->mpdf->AddPage($this->mpdf->CurOrientation, '', '', '', '', '', '', '', '', '', '', '', '', '', '', 0, 0, 0, 0, $pagesel); } elseif ($this->mpdf->page_box['current'] != $pagesel) { $this->mpdf->AddPage($this->mpdf->CurOrientation, '', '', '', '', '', '', '', '', '', '', '', '', '', '', 0, 0, 0, 0, $pagesel); } // *CSS-PAGE* } /* -- CSS-PAGE -- */ // Must Add new page if changed page properties elseif (!isset($this->mpdf->page_box['current']) || $pagesel != $this->mpdf->page_box['current']) { $this->mpdf->AddPage($this->mpdf->CurOrientation, '', '', '', '', '', '', '', '', '', '', '', '', '', '', 0, 0, 0, 0, $pagesel); } /* -- END CSS-PAGE -- */ // mPDF 6 pagebreaktype $this->mpdf->_postForcedPagebreak($pagebreaktype, $startpage, $save_blk, $save_blklvl); } // mPDF 6 pagebreaktype - moved after pagebreak $this->mpdf->blklvl++; $currblk = & $this->mpdf->blk[$this->mpdf->blklvl]; $this->mpdf->initialiseBlock($currblk); $prevblk = & $this->mpdf->blk[$this->mpdf->blklvl - 1]; $currblk['tag'] = $tag; $currblk['attr'] = $attr; $properties = $this->cssManager->MergeCSS('BLOCK', $tag, $attr); // mPDF 6 - moved to after page-break-before // mPDF 6 page-break-inside:avoid if (isset($properties['PAGE-BREAK-INSIDE']) && strtoupper($properties['PAGE-BREAK-INSIDE']) === 'AVOID' && !$this->mpdf->ColActive && !$this->mpdf->keep_block_together && !isset($attr['PAGEBREAKAVOIDCHECKED'])) { // avoid re-iterating using PAGEBREAKAVOIDCHECKED; set in CloseTag $currblk['keep_block_together'] = 1; $currblk['array_i'] = $ihtml; // mPDF 6 $this->mpdf->kt_y00 = $this->mpdf->y; $this->mpdf->kt_p00 = $this->mpdf->page; $this->mpdf->keep_block_together = 1; } if ($lastbottommargin && !empty($properties['MARGIN-TOP']) && empty($properties['FLOAT'])) { $currblk['lastbottommargin'] = $lastbottommargin; } if (isset($properties['Z-INDEX']) && $this->mpdf->current_layer == 0) { $v = (int) $properties['Z-INDEX']; if ($v > 0) { $currblk['z-index'] = $v; $this->mpdf->BeginLayer($v); } } // mPDF 6 Lists // List-type set by attribute if ($tag === 'OL' || $tag === 'UL' || $tag === 'LI') { if (!empty($attr['TYPE'])) { $listtype = $attr['TYPE']; switch ($listtype) { case 'A': $listtype = 'upper-latin'; break; case 'a': $listtype = 'lower-latin'; break; case 'I': $listtype = 'upper-roman'; break; case 'i': $listtype = 'lower-roman'; break; case '1': $listtype = 'decimal'; break; } $currblk['list_style_type'] = $listtype; } } $this->mpdf->setCSS($properties, 'BLOCK', $tag); //name(id/class/style) found in the CSS array! $currblk['InlineProperties'] = $this->mpdf->saveInlineProperties(); if (isset($properties['VISIBILITY'])) { $v = strtolower($properties['VISIBILITY']); if (($v === 'hidden' || $v === 'printonly' || $v === 'screenonly') && $this->mpdf->visibility === 'visible' && !$this->mpdf->tableLevel) { $currblk['visibility'] = $v; $this->mpdf->SetVisibility($v); } } // mPDF 6 if (!empty($attr['ALIGN'])) { $currblk['block-align'] = $this->getAlign($attr['ALIGN']); } if (isset($properties['HEIGHT'])) { $currblk['css_set_height'] = $this->sizeConverter->convert( $properties['HEIGHT'], $this->mpdf->h - $this->mpdf->tMargin - $this->mpdf->bMargin, $this->mpdf->FontSize, false ); if (($currblk['css_set_height'] + $this->mpdf->y) > $this->mpdf->PageBreakTrigger && $this->mpdf->y > $this->mpdf->tMargin + 5 && $currblk['css_set_height'] < ($this->mpdf->h - ($this->mpdf->tMargin + $this->mpdf->bMargin))) { $this->mpdf->AddPage($this->mpdf->CurOrientation); } } else { $currblk['css_set_height'] = false; } // Added mPDF 3.0 Float DIV if (isset($prevblk['blockContext'])) { $currblk['blockContext'] = $prevblk['blockContext']; } // *CSS-FLOAT* if (isset($properties['CLEAR'])) { $this->mpdf->ClearFloats(strtoupper($properties['CLEAR']), $this->mpdf->blklvl - 1); } // *CSS-FLOAT* $currblk['padding_left'] = is_numeric($currblk['padding_left']) ? $currblk['padding_left'] : 0; $currblk['padding_right'] = is_numeric($currblk['padding_right']) ? $currblk['padding_right'] : 0; $container_w = $prevblk['inner_width']; $bdr = $currblk['border_right']['w']; $bdl = $currblk['border_left']['w']; $pdr = $currblk['padding_right']; $pdl = $currblk['padding_left']; $setwidth = 0; if (isset($currblk['css_set_width'])) { $setwidth = $currblk['css_set_width']; } /* -- CSS-FLOAT -- */ if (isset($properties['FLOAT']) && strtoupper($properties['FLOAT']) === 'RIGHT' && !$this->mpdf->ColActive) { // Cancel Keep-Block-together $currblk['keep_block_together'] = false; $this->mpdf->kt_y00 = 0; $this->mpdf->keep_block_together = 0; $this->mpdf->blockContext++; $currblk['blockContext'] = $this->mpdf->blockContext; list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->mpdf->GetFloatDivInfo($this->mpdf->blklvl - 1); // DIV is too narrow for text to fit! $maxw = $container_w - $l_width - $r_width; $doubleCharWidth = (2 * $this->mpdf->GetCharWidth('W', false)); if (($setwidth + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) > $maxw || ($maxw - ($currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr)) < (2 * $this->mpdf->GetCharWidth('W', false))) { // Too narrow to fit - try to move down past L or R float if ($l_max < $r_max && ($setwidth + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) <= ($container_w - $r_width) && (($container_w - $r_width) - ($currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr)) > $doubleCharWidth) { $this->mpdf->ClearFloats('LEFT', $this->mpdf->blklvl - 1); } elseif ($r_max < $l_max && ($setwidth + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) <= ($container_w - $l_width) && (($container_w - $l_width) - ($currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr)) > $doubleCharWidth) { $this->mpdf->ClearFloats('RIGHT', $this->mpdf->blklvl - 1); } else { $this->mpdf->ClearFloats('BOTH', $this->mpdf->blklvl - 1); } list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->mpdf->GetFloatDivInfo($this->mpdf->blklvl - 1); } if ($r_exists) { $currblk['margin_right'] += $r_width; } $currblk['float'] = 'R'; $currblk['float_start_y'] = $this->mpdf->y; if (isset($currblk['css_set_width'])) { $currblk['margin_left'] = $container_w - ($setwidth + $bdl + $pdl + $bdr + $pdr + $currblk['margin_right']); $currblk['float_width'] = ($setwidth + $bdl + $pdl + $bdr + $pdr + $currblk['margin_right']); } else { // *** If no width set - would need to buffer and keep track of max width, then Right-align if not full width // and do borders and backgrounds - For now - just set to maximum width left if ($l_exists) { $currblk['margin_left'] += $l_width; } $currblk['css_set_width'] = $container_w - ($currblk['margin_left'] + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr); $currblk['float_width'] = ($currblk['css_set_width'] + $bdl + $pdl + $bdr + $pdr + $currblk['margin_right']); } } elseif (isset($properties['FLOAT']) && strtoupper($properties['FLOAT']) === 'LEFT' && !$this->mpdf->ColActive) { // Cancel Keep-Block-together $currblk['keep_block_together'] = false; $this->mpdf->kt_y00 = 0; $this->mpdf->keep_block_together = 0; $this->mpdf->blockContext++; $currblk['blockContext'] = $this->mpdf->blockContext; list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->mpdf->GetFloatDivInfo($this->mpdf->blklvl - 1); // DIV is too narrow for text to fit! $maxw = $container_w - $l_width - $r_width; $doubleCharWidth = (2 * $this->mpdf->GetCharWidth('W', false)); if (($setwidth + $currblk['margin_left'] + $bdl + $pdl + $bdr + $pdr) > $maxw || ($maxw - ($currblk['margin_left'] + $bdl + $pdl + $bdr + $pdr)) < (2 * $this->mpdf->GetCharWidth('W', false))) { // Too narrow to fit - try to move down past L or R float if ($l_max < $r_max && ($setwidth + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) <= ($container_w - $r_width) && (($container_w - $r_width) - ($currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr)) > $doubleCharWidth) { $this->mpdf->ClearFloats('LEFT', $this->mpdf->blklvl - 1); } elseif ($r_max < $l_max && ($setwidth + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) <= ($container_w - $l_width) && (($container_w - $l_width) - ($currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr)) > $doubleCharWidth) { $this->mpdf->ClearFloats('RIGHT', $this->mpdf->blklvl - 1); } else { $this->mpdf->ClearFloats('BOTH', $this->mpdf->blklvl - 1); } list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->mpdf->GetFloatDivInfo($this->mpdf->blklvl - 1); } if ($l_exists) { $currblk['margin_left'] += $l_width; } $currblk['float'] = 'L'; $currblk['float_start_y'] = $this->mpdf->y; if ($setwidth) { $currblk['margin_right'] = $container_w - ($setwidth + $bdl + $pdl + $bdr + $pdr + $currblk['margin_left']); $currblk['float_width'] = ($setwidth + $bdl + $pdl + $bdr + $pdr + $currblk['margin_left']); } else { // *** If no width set - would need to buffer and keep track of max width, then Right-align if not full width // and do borders and backgrounds - For now - just set to maximum width left if ($r_exists) { $currblk['margin_right'] += $r_width; } $currblk['css_set_width'] = $container_w - ($currblk['margin_left'] + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr); $currblk['float_width'] = ($currblk['css_set_width'] + $bdl + $pdl + $bdr + $pdr + $currblk['margin_left']); } } else { // Don't allow overlap - if floats present - adjust padding to avoid overlap with Floats list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->mpdf->GetFloatDivInfo($this->mpdf->blklvl - 1); $maxw = $container_w - $l_width - $r_width; $pdl = is_numeric($pdl) ? $pdl : 0; $pdr = is_numeric($pdr) ? $pdr : 0; $doubleCharWidth = (2 * $this->mpdf->GetCharWidth('W', false)); if (($setwidth + $currblk['margin_left'] + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) > $maxw || ($maxw - ($currblk['margin_right'] + $currblk['margin_left'] + $bdl + $pdl + $bdr + $pdr)) < $doubleCharWidth) { // Too narrow to fit - try to move down past L or R float if ($l_max < $r_max && ($setwidth + $currblk['margin_left'] + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) <= ($container_w - $r_width) && (($container_w - $r_width) - ($currblk['margin_right'] + $currblk['margin_left'] + $bdl + $pdl + $bdr + $pdr)) > $doubleCharWidth) { $this->mpdf->ClearFloats('LEFT', $this->mpdf->blklvl - 1); } elseif ($r_max < $l_max && ($setwidth + $currblk['margin_left'] + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) <= ($container_w - $l_width) && (($container_w - $l_width) - ($currblk['margin_right'] + $currblk['margin_left'] + $bdl + $pdl + $bdr + $pdr)) > $doubleCharWidth) { $this->mpdf->ClearFloats('RIGHT', $this->mpdf->blklvl - 1); } else { $this->mpdf->ClearFloats('BOTH', $this->mpdf->blklvl - 1); } list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->mpdf->GetFloatDivInfo($this->mpdf->blklvl - 1); } if ($r_exists) { $currblk['padding_right'] = max($r_width - $currblk['margin_right'] - $bdr, $pdr); } if ($l_exists) { $currblk['padding_left'] = max($l_width - $currblk['margin_left'] - $bdl, $pdl); } } /* -- END CSS-FLOAT -- */ /* -- BORDER-RADIUS -- */ // Automatically increase padding if required for border-radius if ($this->mpdf->autoPadding && !$this->mpdf->ColActive) { $currblk['border_radius_TL_H'] = Arrays::get($currblk, 'border_radius_TL_H', 0); $currblk['border_radius_TL_V'] = Arrays::get($currblk, 'border_radius_TL_V', 0); $currblk['border_radius_TR_H'] = Arrays::get($currblk, 'border_radius_TR_H', 0); $currblk['border_radius_TR_V'] = Arrays::get($currblk, 'border_radius_TR_V', 0); $currblk['border_radius_BL_H'] = Arrays::get($currblk, 'border_radius_BL_H', 0); $currblk['border_radius_BL_V'] = Arrays::get($currblk, 'border_radius_BL_V', 0); $currblk['border_radius_BR_H'] = Arrays::get($currblk, 'border_radius_BR_H', 0); $currblk['border_radius_BR_V'] = Arrays::get($currblk, 'border_radius_BR_V', 0); if ($currblk['border_radius_TL_H'] > $currblk['padding_left'] && $currblk['border_radius_TL_V'] > $currblk['padding_top']) { if ($currblk['border_radius_TL_H'] > $currblk['border_radius_TL_V']) { $this->mpdf->_borderPadding( $currblk['border_radius_TL_H'], $currblk['border_radius_TL_V'], $currblk['padding_left'], $currblk['padding_top'] ); } else { $this->mpdf->_borderPadding( $currblk['border_radius_TL_V'], $currblk['border_radius_TL_H'], $currblk['padding_top'], $currblk['padding_left'] ); } } if ($currblk['border_radius_TR_H'] > $currblk['padding_right'] && $currblk['border_radius_TR_V'] > $currblk['padding_top']) { if ($currblk['border_radius_TR_H'] > $currblk['border_radius_TR_V']) { $this->mpdf->_borderPadding( $currblk['border_radius_TR_H'], $currblk['border_radius_TR_V'], $currblk['padding_right'], $currblk['padding_top'] ); } else { $this->mpdf->_borderPadding( $currblk['border_radius_TR_V'], $currblk['border_radius_TR_H'], $currblk['padding_top'], $currblk['padding_right'] ); } } if ($currblk['border_radius_BL_H'] > $currblk['padding_left'] && $currblk['border_radius_BL_V'] > $currblk['padding_bottom']) { if ($currblk['border_radius_BL_H'] > $currblk['border_radius_BL_V']) { $this->mpdf->_borderPadding( $currblk['border_radius_BL_H'], $currblk['border_radius_BL_V'], $currblk['padding_left'], $currblk['padding_bottom'] ); } else { $this->mpdf->_borderPadding( $currblk['border_radius_BL_V'], $currblk['border_radius_BL_H'], $currblk['padding_bottom'], $currblk['padding_left'] ); } } if ($currblk['border_radius_BR_H'] > $currblk['padding_right'] && $currblk['border_radius_BR_V'] > $currblk['padding_bottom']) { if ($currblk['border_radius_BR_H'] > $currblk['border_radius_BR_V']) { $this->mpdf->_borderPadding( $currblk['border_radius_BR_H'], $currblk['border_radius_BR_V'], $currblk['padding_right'], $currblk['padding_bottom'] ); } else { $this->mpdf->_borderPadding( $currblk['border_radius_BR_V'], $currblk['border_radius_BR_H'], $currblk['padding_bottom'], $currblk['padding_right'] ); } } } /* -- END BORDER-RADIUS -- */ // Hanging indent - if negative indent: ensure padding is >= indent if (!isset($currblk['text_indent'])) { $currblk['text_indent'] = null; } if (!isset($currblk['inner_width'])) { $currblk['inner_width'] = null; } $cbti = $this->sizeConverter->convert( $currblk['text_indent'], $this->mpdf->blk[$this->mpdf->blklvl]['inner_width'], $this->mpdf->FontSize, false ); if ($cbti < 0) { $hangind = -$cbti; if (isset($currblk['direction']) && $currblk['direction'] === 'rtl') { // *OTL* $currblk['padding_right'] = max($currblk['padding_right'], $hangind); // *OTL* } // *OTL* else { // *OTL* $currblk['padding_left'] = max($currblk['padding_left'], $hangind); } // *OTL* } if (isset($currblk['css_set_width'])) { if (isset($properties['MARGIN-LEFT'], $properties['MARGIN-RIGHT']) && strtolower($properties['MARGIN-LEFT']) === 'auto' && strtolower($properties['MARGIN-RIGHT']) === 'auto') { // Try to reduce margins to accomodate - if still too wide, set margin-right/left=0 (reduces width) $anyextra = $prevblk['inner_width'] - ($currblk['css_set_width'] + $currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right']); if ($anyextra > 0) { $currblk['margin_left'] = $currblk['margin_right'] = $anyextra / 2; } else { $currblk['margin_left'] = $currblk['margin_right'] = 0; } } elseif (isset($properties['MARGIN-LEFT']) && strtolower($properties['MARGIN-LEFT']) === 'auto') { // Try to reduce margin-left to accomodate - if still too wide, set margin-left=0 (reduces width) $currblk['margin_left'] = $prevblk['inner_width'] - ($currblk['css_set_width'] + $currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right'] + $currblk['margin_right']); if ($currblk['margin_left'] < 0) { $currblk['margin_left'] = 0; } } elseif (isset($properties['MARGIN-RIGHT']) && strtolower($properties['MARGIN-RIGHT']) === 'auto') { // Try to reduce margin-right to accomodate - if still too wide, set margin-right=0 (reduces width) $currblk['margin_right'] = $prevblk['inner_width'] - ($currblk['css_set_width'] + $currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right'] + $currblk['margin_left']); if ($currblk['margin_right'] < 0) { $currblk['margin_right'] = 0; } } else { if ($currblk['direction'] === 'rtl') { // *OTL* // Try to reduce margin-left to accomodate - if still too wide, set margin-left=0 (reduces width) $currblk['margin_left'] = $prevblk['inner_width'] - ($currblk['css_set_width'] + $currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right'] + $currblk['margin_right']); // *OTL* if ($currblk['margin_left'] < 0) { // *OTL* $currblk['margin_left'] = 0; // *OTL* } // *OTL* } // *OTL* else { // *OTL* // Try to reduce margin-right to accomodate - if still too wide, set margin-right=0 (reduces width) $currblk['margin_right'] = $prevblk['inner_width'] - ($currblk['css_set_width'] + $currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right'] + $currblk['margin_left']); if ($currblk['margin_right'] < 0) { $currblk['margin_right'] = 0; } } // *OTL* } } $currblk['outer_left_margin'] = $prevblk['outer_left_margin'] + $currblk['margin_left'] + $prevblk['border_left']['w'] + $prevblk['padding_left']; $currblk['outer_right_margin'] = $prevblk['outer_right_margin'] + $currblk['margin_right'] + $prevblk['border_right']['w'] + $prevblk['padding_right']; $currblk['width'] = $this->mpdf->pgwidth - ($currblk['outer_right_margin'] + $currblk['outer_left_margin']); $currblk['inner_width'] = $currblk['width'] - ($currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right']); // Check DIV is not now too narrow to fit text $mw = 2 * $this->mpdf->GetCharWidth('W', false); if ($currblk['inner_width'] < $mw) { $currblk['padding_left'] = 0; $currblk['padding_right'] = 0; $currblk['border_left']['w'] = 0.2; $currblk['border_right']['w'] = 0.2; $currblk['margin_left'] = 0; $currblk['margin_right'] = 0; $currblk['outer_left_margin'] = $prevblk['outer_left_margin'] + $currblk['margin_left'] + $prevblk['border_left']['w'] + $prevblk['padding_left']; $currblk['outer_right_margin'] = $prevblk['outer_right_margin'] + $currblk['margin_right'] + $prevblk['border_right']['w'] + $prevblk['padding_right']; $currblk['width'] = $this->mpdf->pgwidth - ($currblk['outer_right_margin'] + $currblk['outer_left_margin']); $currblk['inner_width'] = $this->mpdf->pgwidth - ($currblk['outer_right_margin'] + $currblk['outer_left_margin'] + $currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right']); // if ($currblk['inner_width'] < $mw) { throw new \Mpdf\MpdfException("DIV is too narrow for text to fit!"); } } $this->mpdf->x = $this->mpdf->lMargin + $currblk['outer_left_margin']; /* -- BACKGROUNDS -- */ if (!empty($properties['BACKGROUND-IMAGE']) && !$this->mpdf->kwt && !$this->mpdf->ColActive && !$this->mpdf->keep_block_together) { $ret = $this->mpdf->SetBackground($properties, $currblk['inner_width']); if ($ret) { $currblk['background-image'] = $ret; } } /* -- END BACKGROUNDS -- */ /* -- TABLES -- */ if ($this->mpdf->use_kwt && isset($attr['KEEP-WITH-TABLE']) && !$this->mpdf->ColActive && !$this->mpdf->keep_block_together) { $this->mpdf->kwt = true; $this->mpdf->kwt_y0 = $this->mpdf->y; //$this->mpdf->kwt_x0 = $this->mpdf->x; $this->mpdf->kwt_x0 = $this->mpdf->lMargin; // mPDF 6 $this->mpdf->kwt_height = 0; $this->mpdf->kwt_buffer = []; $this->mpdf->kwt_Links = []; $this->mpdf->kwt_Annots = []; $this->mpdf->kwt_moved = false; $this->mpdf->kwt_saved = false; $this->mpdf->kwt_Reference = []; $this->mpdf->kwt_BMoutlines = []; $this->mpdf->kwt_toc = []; } else { /* -- END TABLES -- */ $this->mpdf->kwt = false; } // *TABLES* // Save x,y coords in case we need to print borders... $currblk['y0'] = $this->mpdf->y; $currblk['initial_y0'] = $this->mpdf->y; // mPDF 6 $currblk['x0'] = $this->mpdf->x; $currblk['initial_x0'] = $this->mpdf->x; // mPDF 6 $currblk['initial_startpage'] = $this->mpdf->page; $currblk['startpage'] = $this->mpdf->page; // mPDF 6 $this->mpdf->oldy = $this->mpdf->y; $this->mpdf->lastblocklevelchange = 1; // mPDF 6 Lists if ($tag === 'OL' || $tag === 'UL') { $this->mpdf->listlvl++; if (!empty($attr['START'])) { $this->mpdf->listcounter[$this->mpdf->listlvl] = (int) $attr['START'] - 1; } else { $this->mpdf->listcounter[$this->mpdf->listlvl] = 0; } $this->mpdf->listitem = []; // List-type if (empty($currblk['list_style_type'])) { if ($tag === 'OL') { $currblk['list_style_type'] = 'decimal'; } elseif ($tag === 'UL') { if ($this->mpdf->listlvl % 3 == 1) { $currblk['list_style_type'] = 'disc'; } elseif ($this->mpdf->listlvl % 3 == 2) { $currblk['list_style_type'] = 'circle'; } else { $currblk['list_style_type'] = 'square'; } } } // List-image if (empty($currblk['list_style_image'])) { $currblk['list_style_image'] = 'none'; } // List-position if (empty($currblk['list_style_position'])) { $currblk['list_style_position'] = 'outside'; } // Default indentation using padding if (strtolower($this->mpdf->list_auto_mode) === 'mpdf' && isset($currblk['list_style_position']) && $currblk['list_style_position'] === 'outside' && isset($currblk['list_style_image']) && $currblk['list_style_image'] === 'none' && (!isset($currblk['list_style_type']) || !preg_match('/U\+([a-fA-F0-9]+)/i', $currblk['list_style_type']))) { $autopadding = $this->mpdf->_getListMarkerWidth($currblk, $ahtml, $ihtml); if ($this->mpdf->listlvl > 1 || $this->mpdf->list_indent_first_level) { $autopadding += $this->sizeConverter->convert( $this->mpdf->list_indent_default, $currblk['inner_width'], $this->mpdf->FontSize, false ); } // autopadding value is applied to left or right according // to dir of block. Once a CSS value is set for padding it overrides this default value. if (isset($properties['PADDING-RIGHT']) && $properties['PADDING-RIGHT'] === 'auto' && isset($currblk['direction']) && $currblk['direction'] === 'rtl') { $currblk['padding_right'] = $autopadding; } elseif (isset($properties['PADDING-LEFT']) && $properties['PADDING-LEFT'] === 'auto') { $currblk['padding_left'] = $autopadding; } } else { // Initial default value is set by $this->mpdf->list_indent_default in config.php; this value is applied to left or right according // to dir of block. Once a CSS value is set for padding it overrides this default value. if (isset($properties['PADDING-RIGHT']) && $properties['PADDING-RIGHT'] === 'auto' && isset($currblk['direction']) && $currblk['direction'] === 'rtl') { $currblk['padding_right'] = $this->sizeConverter->convert( $this->mpdf->list_indent_default, $currblk['inner_width'], $this->mpdf->FontSize, false ); } elseif (isset($properties['PADDING-LEFT']) && $properties['PADDING-LEFT'] === 'auto') { $currblk['padding_left'] = $this->sizeConverter->convert( $this->mpdf->list_indent_default, $currblk['inner_width'], $this->mpdf->FontSize, false ); } } } // mPDF 6 Lists if ($tag === 'LI') { if ($this->mpdf->listlvl == 0) { // in case of malformed HTML code. Example:(...)</p><li>Content</li><p>Paragraph1</p>(...) $this->mpdf->listlvl++; // first depth level $this->mpdf->listcounter[$this->mpdf->listlvl] = 0; } if (!isset($attr['PAGEBREAKAVOIDCHECKED']) || !$attr['PAGEBREAKAVOIDCHECKED']) { $this->mpdf->listcounter[$this->mpdf->listlvl]++; } $this->mpdf->listitem = []; // Listitem-type $this->mpdf->_setListMarker($currblk['list_style_type'], $currblk['list_style_image'], $currblk['list_style_position']); } // mPDF 6 Bidirectional formatting for block elements $bdf = false; $bdf2 = ''; $popd = ''; // Get current direction $currdir = 'ltr'; if (isset($currblk['direction'])) { $currdir = $currblk['direction']; } if (isset($attr['DIR']) && $attr['DIR'] != '') { $currdir = strtolower($attr['DIR']); } if (isset($properties['DIRECTION'])) { $currdir = strtolower($properties['DIRECTION']); } // mPDF 6 bidi // cf. http://www.w3.org/TR/css3-writing-modes/#unicode-bidi if (isset($properties ['UNICODE-BIDI']) && (strtolower($properties ['UNICODE-BIDI']) === 'bidi-override' || strtolower($properties ['UNICODE-BIDI']) === 'isolate-override')) { if ($currdir === 'rtl') { $bdf = 0x202E; $popd = 'RLOPDF'; } // U+202E RLO else { $bdf = 0x202D; $popd = 'LROPDF'; } // U+202D LRO } elseif (isset($properties ['UNICODE-BIDI']) && strtolower($properties ['UNICODE-BIDI']) === 'plaintext') { $bdf = 0x2068; $popd = 'FSIPDI'; // U+2068 FSI } if ($bdf) { if ($bdf2) { $bdf2 = UtfString::code2utf($bdf); } $this->mpdf->OTLdata = []; if ($this->mpdf->tableLevel) { $this->mpdf->_saveCellTextBuffer(UtfString::code2utf($bdf) . $bdf2); } else { $this->mpdf->_saveTextBuffer(UtfString::code2utf($bdf) . $bdf2); } $this->mpdf->biDirectional = true; $currblk['bidicode'] = $popd; } } public function close(&$ahtml, &$ihtml) { $tag = $this->getTagName(); // mPDF 6 bidi // Block // If unicode-bidi set, any embedding levels, isolates, or overrides started by this box are closed if (isset($this->mpdf->blk[$this->mpdf->blklvl]['bidicode'])) { $blockpost = $this->mpdf->_setBidiCodes('end', $this->mpdf->blk[$this->mpdf->blklvl]['bidicode']); if ($blockpost) { $this->mpdf->OTLdata = []; if ($this->mpdf->tableLevel) { $this->mpdf->_saveCellTextBuffer($blockpost); } else { $this->mpdf->_saveTextBuffer($blockpost); } } } $this->mpdf->ignorefollowingspaces = true; //Eliminate exceeding left-side spaces $this->mpdf->blockjustfinished = true; $this->mpdf->lastblockbottommargin = $this->mpdf->blk[$this->mpdf->blklvl]['margin_bottom']; // mPDF 6 Lists if ($tag === 'UL' || $tag === 'OL') { if ($this->mpdf->listlvl > 0 && $this->mpdf->tableLevel) { if (isset($this->mpdf->listtype[$this->mpdf->listlvl])) { unset($this->mpdf->listtype[$this->mpdf->listlvl]); } } $this->mpdf->listlvl--; $this->mpdf->listitem = []; } if ($tag === 'LI') { $this->mpdf->listitem = []; } if (preg_match('/^H\d/', $tag) && !$this->mpdf->tableLevel && !$this->mpdf->writingToC) { if (isset($this->mpdf->h2toc[$tag]) || isset($this->mpdf->h2bookmarks[$tag])) { $content = ''; if (count($this->mpdf->textbuffer) == 1) { $content = $this->mpdf->textbuffer[0][0]; } else { for ($i = 0; $i < count($this->mpdf->textbuffer); $i++) { if (0 !== strpos($this->mpdf->textbuffer[$i][0], "\xbb\xa4\xac")) { //inline object $content .= $this->mpdf->textbuffer[$i][0]; } } } /* -- TOC -- */ if (isset($this->mpdf->h2toc[$tag])) { $objattr = []; $objattr['type'] = 'toc'; $objattr['toclevel'] = $this->mpdf->h2toc[$tag]; $objattr['CONTENT'] = htmlspecialchars($content); $e = "\xbb\xa4\xactype=toc,objattr=" . serialize($objattr) . "\xbb\xa4\xac"; array_unshift($this->mpdf->textbuffer, [$e]); } /* -- END TOC -- */ /* -- BOOKMARKS -- */ if (isset($this->mpdf->h2bookmarks[$tag])) { $objattr = []; $objattr['type'] = 'bookmark'; $objattr['bklevel'] = $this->mpdf->h2bookmarks[$tag]; $objattr['CONTENT'] = $content; $e = "\xbb\xa4\xactype=toc,objattr=" . serialize($objattr) . "\xbb\xa4\xac"; array_unshift($this->mpdf->textbuffer, [$e]); } /* -- END BOOKMARKS -- */ } } /* -- TABLES -- */ if ($this->mpdf->tableLevel) { if ($this->mpdf->linebreakjustfinished) { $this->mpdf->blockjustfinished = false; } if (isset($this->mpdf->InlineProperties['BLOCKINTABLE'])) { if ($this->mpdf->InlineProperties['BLOCKINTABLE']) { $this->mpdf->restoreInlineProperties($this->mpdf->InlineProperties['BLOCKINTABLE']); } unset($this->mpdf->InlineProperties['BLOCKINTABLE']); } if ($tag === 'PRE') { $this->mpdf->ispre = false; } return; } /* -- END TABLES -- */ $this->mpdf->lastoptionaltag = ''; $this->mpdf->divbegin = false; $this->mpdf->linebreakjustfinished = false; $this->mpdf->x = $this->mpdf->lMargin + $this->mpdf->blk[$this->mpdf->blklvl]['outer_left_margin']; /* -- CSS-FLOAT -- */ // If float contained in a float, need to extend bottom to allow for it $currpos = $this->mpdf->page * 1000 + $this->mpdf->y; if (isset($this->mpdf->blk[$this->mpdf->blklvl]['float_endpos']) && $this->mpdf->blk[$this->mpdf->blklvl]['float_endpos'] > $currpos) { $old_page = $this->mpdf->page; $new_page = (int) ($this->mpdf->blk[$this->mpdf->blklvl]['float_endpos'] / 1000); if ($old_page != $new_page) { $s = $this->mpdf->PrintPageBackgrounds(); // Writes after the marker so not overwritten later by page background etc. $this->mpdf->pages[$this->mpdf->page] = preg_replace( '/(___BACKGROUND___PATTERNS' . $this->mpdf->uniqstr . ')/', '\\1' . "\n" . $s . "\n", $this->mpdf->pages[$this->mpdf->page] ); $this->mpdf->pageBackgrounds = []; $this->mpdf->page = $new_page; $this->mpdf->ResetMargins(); $this->mpdf->Reset(); $this->mpdf->pageoutput[$this->mpdf->page] = []; } // mod changes operands to integers before processing $this->mpdf->y = (round($this->mpdf->blk[$this->mpdf->blklvl]['float_endpos'] * 1000) % 1000000) / 1000; } /* -- END CSS-FLOAT -- */ //Print content $blockstate = 0; if ($this->mpdf->lastblocklevelchange == 1) { $blockstate = 3; } // Top & bottom margins/padding elseif ($this->mpdf->lastblocklevelchange == -1) { $blockstate = 2; } // Bottom margins/padding only // called from after e.g. </table> </div> </div> ... Outputs block margin/border and padding if (count($this->mpdf->textbuffer) && $this->mpdf->textbuffer[count($this->mpdf->textbuffer) - 1]) { if (0 !== strpos($this->mpdf->textbuffer[count($this->mpdf->textbuffer) - 1][0], "\xbb\xa4\xac")) { // not special content // Right trim last content and adjust OTLdata if (preg_match('/[ ]+$/', $this->mpdf->textbuffer[count($this->mpdf->textbuffer) - 1][0], $m)) { $strip = strlen($m[0]); $this->mpdf->textbuffer[count($this->mpdf->textbuffer) - 1][0] = substr( $this->mpdf->textbuffer[count($this->mpdf->textbuffer) - 1][0], 0, strlen($this->mpdf->textbuffer[count($this->mpdf->textbuffer) - 1][0]) - $strip ); /* -- OTL -- */ if (!empty($this->mpdf->CurrentFont['useOTL'])) { $this->otl->trimOTLdata($this->mpdf->textbuffer[count($this->mpdf->textbuffer) - 1][18], false); // mPDF 6 ZZZ99K } /* -- END OTL -- */ } } } if (count($this->mpdf->textbuffer) == 0 && $this->mpdf->lastblocklevelchange != 0) { /*$this->mpdf->newFlowingBlock( $this->mpdf->blk[$this->mpdf->blklvl]['width'], $this->mpdf->lineheight, '', false, 2, true, (isset($this->mpdf->blk[$this->mpdf->blklvl]['direction']) ? $this->mpdf->blk[$this->mpdf->blklvl]['direction'] : 'ltr') );*/ $this->mpdf->newFlowingBlock( $this->mpdf->blk[$this->mpdf->blklvl]['width'], $this->mpdf->lineheight, '', false, $blockstate, true, (isset($this->mpdf->blk[$this->mpdf->blklvl]['direction']) ? $this->mpdf->blk[$this->mpdf->blklvl]['direction'] : 'ltr') ); $this->mpdf->finishFlowingBlock(true); // true = END of flowing block $this->mpdf->PaintDivBB('', $blockstate); } else { $this->mpdf->printbuffer($this->mpdf->textbuffer, $blockstate); } $this->mpdf->textbuffer = []; if ($this->mpdf->kwt) { $this->mpdf->kwt_height = $this->mpdf->y - $this->mpdf->kwt_y0; } /* -- CSS-IMAGE-FLOAT -- */ $this->mpdf->printfloatbuffer(); /* -- END CSS-IMAGE-FLOAT -- */ if ($tag === 'PRE') { $this->mpdf->ispre = false; } /* -- CSS-FLOAT -- */ if ($this->mpdf->blk[$this->mpdf->blklvl]['float'] === 'R') { // If width not set, here would need to adjust and output buffer $s = $this->mpdf->PrintPageBackgrounds(); // Writes after the marker so not overwritten later by page background etc. $this->mpdf->pages[$this->mpdf->page] = preg_replace('/(___BACKGROUND___PATTERNS' . $this->mpdf->uniqstr . ')/', '\\1' . "\n" . $s . "\n", $this->mpdf->pages[$this->mpdf->page]); $this->mpdf->pageBackgrounds = []; $this->mpdf->Reset(); $this->mpdf->pageoutput[$this->mpdf->page] = []; for ($i = ($this->mpdf->blklvl - 1); $i >= 0; $i--) { if (isset($this->mpdf->blk[$i]['float_endpos'])) { $this->mpdf->blk[$i]['float_endpos'] = max($this->mpdf->blk[$i]['float_endpos'], $this->mpdf->page * 1000 + $this->mpdf->y); } else { $this->mpdf->blk[$i]['float_endpos'] = $this->mpdf->page * 1000 + $this->mpdf->y; } } $this->mpdf->floatDivs[] = [ 'side' => 'R', 'startpage' => $this->mpdf->blk[$this->mpdf->blklvl]['startpage'], 'y0' => $this->mpdf->blk[$this->mpdf->blklvl]['float_start_y'], 'startpos' => $this->mpdf->blk[$this->mpdf->blklvl]['startpage'] * 1000 + $this->mpdf->blk[$this->mpdf->blklvl]['float_start_y'], 'endpage' => $this->mpdf->page, 'y1' => $this->mpdf->y, 'endpos' => $this->mpdf->page * 1000 + $this->mpdf->y, 'w' => $this->mpdf->blk[$this->mpdf->blklvl]['float_width'], 'blklvl' => $this->mpdf->blklvl, 'blockContext' => $this->mpdf->blk[$this->mpdf->blklvl - 1]['blockContext'] ]; $this->mpdf->y = $this->mpdf->blk[$this->mpdf->blklvl]['float_start_y']; $this->mpdf->page = $this->mpdf->blk[$this->mpdf->blklvl]['startpage']; $this->mpdf->ResetMargins(); $this->mpdf->pageoutput[$this->mpdf->page] = []; } if ($this->mpdf->blk[$this->mpdf->blklvl]['float'] === 'L') { // If width not set, here would need to adjust and output buffer $s = $this->mpdf->PrintPageBackgrounds(); // Writes after the marker so not overwritten later by page background etc. $this->mpdf->pages[$this->mpdf->page] = preg_replace('/(___BACKGROUND___PATTERNS' . $this->mpdf->uniqstr . ')/', '\\1' . "\n" . $s . "\n", $this->mpdf->pages[$this->mpdf->page]); $this->mpdf->pageBackgrounds = []; $this->mpdf->Reset(); $this->mpdf->pageoutput[$this->mpdf->page] = []; for ($i = ($this->mpdf->blklvl - 1); $i >= 0; $i--) { if (isset($this->mpdf->blk[$i]['float_endpos'])) { $this->mpdf->blk[$i]['float_endpos'] = max($this->mpdf->blk[$i]['float_endpos'], $this->mpdf->page * 1000 + $this->mpdf->y); } else { $this->mpdf->blk[$i]['float_endpos'] = $this->mpdf->page * 1000 + $this->mpdf->y; } } $this->mpdf->floatDivs[] = [ 'side' => 'L', 'startpage' => $this->mpdf->blk[$this->mpdf->blklvl]['startpage'], 'y0' => $this->mpdf->blk[$this->mpdf->blklvl]['float_start_y'], 'startpos' => $this->mpdf->blk[$this->mpdf->blklvl]['startpage'] * 1000 + $this->mpdf->blk[$this->mpdf->blklvl]['float_start_y'], 'endpage' => $this->mpdf->page, 'y1' => $this->mpdf->y, 'endpos' => $this->mpdf->page * 1000 + $this->mpdf->y, 'w' => $this->mpdf->blk[$this->mpdf->blklvl]['float_width'], 'blklvl' => $this->mpdf->blklvl, 'blockContext' => $this->mpdf->blk[$this->mpdf->blklvl - 1]['blockContext'] ]; $this->mpdf->y = $this->mpdf->blk[$this->mpdf->blklvl]['float_start_y']; $this->mpdf->page = $this->mpdf->blk[$this->mpdf->blklvl]['startpage']; $this->mpdf->ResetMargins(); $this->mpdf->pageoutput[$this->mpdf->page] = []; } /* -- END CSS-FLOAT -- */ if (isset($this->mpdf->blk[$this->mpdf->blklvl]['visibility']) && $this->mpdf->blk[$this->mpdf->blklvl]['visibility'] !== 'visible') { $this->mpdf->SetVisibility('visible'); } $page_break_after = ''; if (isset($this->mpdf->blk[$this->mpdf->blklvl]['page_break_after'])) { $page_break_after = $this->mpdf->blk[$this->mpdf->blklvl]['page_break_after']; } // Reset values $this->mpdf->Reset(); if (isset($this->mpdf->blk[$this->mpdf->blklvl]['z-index']) && $this->mpdf->blk[$this->mpdf->blklvl]['z-index'] > 0) { $this->mpdf->EndLayer(); } // mPDF 6 page-break-inside:avoid if ($this->mpdf->blk[$this->mpdf->blklvl]['keep_block_together']) { $movepage = false; // If page-break-inside:avoid section has broken to new page but fits on one side - then move: if (($this->mpdf->page - $this->mpdf->kt_p00) == 1 && $this->mpdf->y < $this->mpdf->kt_y00) { $movepage = true; } if (($this->mpdf->page - $this->mpdf->kt_p00) > 0) { for ($i = $this->mpdf->page; $i > $this->mpdf->kt_p00; $i--) { unset($this->mpdf->pages[$i]); if (isset($this->mpdf->blk[$this->mpdf->blklvl]['bb_painted'][$i])) { unset($this->mpdf->blk[$this->mpdf->blklvl]['bb_painted'][$i]); } if (isset($this->mpdf->blk[$this->mpdf->blklvl]['marginCorrected'][$i])) { unset($this->mpdf->blk[$this->mpdf->blklvl]['marginCorrected'][$i]); } if (isset($this->mpdf->pageoutput[$i])) { unset($this->mpdf->pageoutput[$i]); } } $this->mpdf->page = $this->mpdf->kt_p00; } $this->mpdf->keep_block_together = 0; $this->mpdf->pageoutput[$this->mpdf->page] = []; $this->mpdf->y = $this->mpdf->kt_y00; $ihtml = $this->mpdf->blk[$this->mpdf->blklvl]['array_i'] - 1; $ahtml[$ihtml + 1] .= ' pagebreakavoidchecked="true";'; // avoid re-iterating; read in OpenTag() unset($this->mpdf->blk[$this->mpdf->blklvl]); $this->mpdf->blklvl--; for ($blklvl = 1; $blklvl <= $this->mpdf->blklvl; $blklvl++) { $this->mpdf->blk[$blklvl]['y0'] = $this->mpdf->blk[$blklvl]['initial_y0']; $this->mpdf->blk[$blklvl]['x0'] = $this->mpdf->blk[$blklvl]['initial_x0']; $this->mpdf->blk[$blklvl]['startpage'] = $this->mpdf->blk[$blklvl]['initial_startpage']; } if (isset($this->mpdf->blk[$this->mpdf->blklvl]['x0'])) { $this->mpdf->x = $this->mpdf->blk[$this->mpdf->blklvl]['x0']; } else { $this->mpdf->x = $this->mpdf->lMargin; } $this->mpdf->lastblocklevelchange = 0; $this->mpdf->ResetMargins(); if ($movepage) { $this->mpdf->AddPage(); } return; } if ($this->mpdf->blklvl > 0) { // ==0 SHOULDN'T HAPPEN - NOT XHTML if ($this->mpdf->blk[$this->mpdf->blklvl]['tag'] == $tag) { unset($this->mpdf->blk[$this->mpdf->blklvl]); $this->mpdf->blklvl--; } //else { echo $tag; exit; } // debug - forces error if incorrectly nested html tags } $this->mpdf->lastblocklevelchange = -1; // Reset Inline-type properties if (isset($this->mpdf->blk[$this->mpdf->blklvl]['InlineProperties'])) { $this->mpdf->restoreInlineProperties($this->mpdf->blk[$this->mpdf->blklvl]['InlineProperties']); } $this->mpdf->x = $this->mpdf->lMargin + $this->mpdf->blk[$this->mpdf->blklvl]['outer_left_margin']; if (!$this->mpdf->tableLevel && $page_break_after) { $save_blklvl = $this->mpdf->blklvl; $save_blk = $this->mpdf->blk; $save_silp = $this->mpdf->saveInlineProperties(); $save_ilp = $this->mpdf->InlineProperties; $save_bflp = $this->mpdf->InlineBDF; $save_bflpc = $this->mpdf->InlineBDFctr; // mPDF 6 // mPDF 6 pagebreaktype $startpage = $this->mpdf->page; $pagebreaktype = $this->mpdf->defaultPagebreakType; if ($this->mpdf->ColActive) { $pagebreaktype = 'cloneall'; } // mPDF 6 pagebreaktype $this->mpdf->_preForcedPagebreak($pagebreaktype); if ($page_break_after === 'RIGHT') { $this->mpdf->AddPage($this->mpdf->CurOrientation, 'NEXT-ODD'); } elseif ($page_break_after === 'LEFT') { $this->mpdf->AddPage($this->mpdf->CurOrientation, 'NEXT-EVEN'); } else { $this->mpdf->AddPage($this->mpdf->CurOrientation); } // mPDF 6 pagebreaktype $this->mpdf->_postForcedPagebreak($pagebreaktype, $startpage, $save_blk, $save_blklvl); $this->mpdf->InlineProperties = $save_ilp; $this->mpdf->InlineBDF = $save_bflp; $this->mpdf->InlineBDFctr = $save_bflpc; // mPDF 6 $this->mpdf->restoreInlineProperties($save_silp); } // mPDF 6 bidi // Block // If unicode-bidi set, any embedding levels, isolates, or overrides reopened in the continuing block if (isset($this->mpdf->blk[$this->mpdf->blklvl]['bidicode'])) { $blockpre = $this->mpdf->_setBidiCodes('start', $this->mpdf->blk[$this->mpdf->blklvl]['bidicode']); if ($blockpre) { $this->mpdf->OTLdata = []; if ($this->mpdf->tableLevel) { $this->mpdf->_saveCellTextBuffer($blockpre); } else { $this->mpdf->_saveTextBuffer($blockpre); } } } } }
Save