nfTlWNl rn Ѻq$³*4A8t+Sjįq;m ^*Ogص\`Lٔ*ܝIcǪ*LTG0?ZqXeYVgn&aIYutB1˧aK>1mLGrJsf]ZV hu=J͕X}׃i7 H\bhp6[޾,_NgFJ~^uMno̗DZ?u`]|1_~r&W\5yȰ$h4W2hzYv90p`x^v{h)~VDϰ?,"OvgS;%͌ >H,NG~$8bBP5'֧PZ}Дƃk] 1;!,ϋ9  pc9FT[ ( ~bDwe3c$Zz^nѕ0(D_nqvei0D5^G` ;G z<&lU"cǾe~r\,mt7.\388ksHr%\'qߺNnȏq n]\Ht!xe][up)totG/ǎ_%c':^M)s ld0ʾ8 {d.] ' S[{0)0UR?yCfTH|J*vb(zBNM׹c.WcqW^TG/0 ORYئQ sgD0,(1R'+@0"/HgcC$x nm"Gj^pѷMX)Go95xިi+46<{.vt㚥KbmULnXZEH~Tx1{꓊)q6둘 M@_ȋg^C O;z[ W z/VcCDxH~Tx1{꓊<2ƹaLfUP<)u~~R蚙r:,G80Kٜ _λ8|h3TܹCY*4[&iz-=wy駬)^fhۿ+`2yZ0-3x: 57Of,dwuZ誊hmkdt0teyڢ$ߓ"g*MP)P^#{DEӾ$cdVzP+sT^9mFH>wL7C1{+׀p+HߍkL|QD1ަ5y6h3 A'Ie9|C&)QeWŎlSA߻ED"T^to^v zF1^Rs8fODOwT@ 6mt B E. ӟNA;% @˛Ƃ#1; ^tO6F.EJ+pd݄\wrZmgE5Δek*hHqpM=GؘՏ$]A 1^΃կA< 3Zm;T&Fbpr(eGaYd6•qE1\bY YA@ItdNST԰'bk7rALrPwb?É^ZGtk6(_8gn2C+z^+MH@xz=%}P7h7]S_]`d ƸJũ1&ƒ 0 Ԋb!2F1<:,G80Kٜ _λ8|1^C [89[Uwp ͷ#:@S5)݇ϝ ڳD'92-X@ ƇحZ|֣Ųz+K sLDRA8GT,-JY Lu.E^|ǯgbRJ}zZ3e`ԨNbr`N.2'Ybnt2g P _ZƁ%Oz. ]p,/6[ʙA_m,Vd,QQk'eJkk0U?*Jb.]SB}Y_zxlѥSro',XUl 'dWt+_\:xk[?^FnL>HTc*KEbB$V֍YrALrPwb?É^ F !핟Ղ w 贄7 |>pWEAzHrq0~^ h"Ct䜝f~GWOmd>Nd݄\wrZmg/,,bx'fj(cՌM{Get}彯j ^ 4 nE;Cfw+;}1dh{>/rALrPwb?É^󠭿I󁧏5xިi+4fvd`GNu1ute('id', '_x0000_t202'); $objWriter->writeAttribute('coordsize', '21600,21600'); $objWriter->writeAttribute('o:spt', '202'); $objWriter->writeAttribute('path', 'm,l,21600r21600,l21600,xe'); // v:stroke $objWriter->startElement('v:stroke'); $objWriter->writeAttribute('joinstyle', 'miter'); $objWriter->endElement(); // v:path $objWriter->startElement('v:path'); $objWriter->writeAttribute('gradientshapeok', 't'); $objWriter->writeAttribute('o:connecttype', 'rect'); $objWriter->endElement(); $objWriter->endElement(); // Loop through comments foreach ($comments as $key => $value) { $this->writeVMLComment($objWriter, $key, $value); } $objWriter->endElement(); // Return return $objWriter->getData(); } /** * Write VML comment to XML format. * * @param string $cellReference Cell reference, eg: 'A1' * @param Comment $comment Comment */ private function writeVMLComment(XMLWriter $objWriter, $cellReference, Comment $comment): void { // Metadata [$column, $row] = Coordinate::indexesFromString($cellReference); $id = 1024 + $column + $row; $id = substr("$id", 0, 4); // v:shape $objWriter->startElement('v:shape'); $objWriter->writeAttribute('id', '_x0000_s' . $id); $objWriter->writeAttribute('type', '#_x0000_t202'); $objWriter->writeAttribute('style', 'position:absolute;margin-left:' . $comment->getMarginLeft() . ';margin-top:' . $comment->getMarginTop() . ';width:' . $comment->getWidth() . ';height:' . $comment->getHeight() . ';z-index:1;visibility:' . ($comment->getVisible() ? 'visible' : 'hidden')); $objWriter->writeAttribute('fillcolor', '#' . $comment->getFillColor()->getRGB()); $objWriter->writeAttribute('o:insetmode', 'auto'); // v:fill $objWriter->startElement('v:fill'); $objWriter->writeAttribute('color2', '#' . $comment->getFillColor()->getRGB()); if ($comment->hasBackgroundImage()) { $bgImage = $comment->getBackgroundImage(); $objWriter->writeAttribute('o:relid', 'rId' . $bgImage->getImageIndex()); $objWriter->writeAttribute('o:title', $bgImage->getName()); $objWriter->writeAttribute('type', 'frame'); } $objWriter->endElement(); // v:shadow $objWriter->startElement('v:shadow'); $objWriter->writeAttribute('on', 't'); $objWriter->writeAttribute('color', 'black'); $objWriter->writeAttribute('obscured', 't'); $objWriter->endElement(); // v:path $objWriter->startElement('v:path'); $objWriter->writeAttribute('o:connecttype', 'none'); $objWriter->endElement(); // v:textbox $objWriter->startElement('v:textbox'); $objWriter->writeAttribute('style', 'mso-direction-alt:auto'); // div $objWriter->startElement('div'); $objWriter->writeAttribute('style', 'text-align:left'); $objWriter->endElement(); $objWriter->endElement(); // x:ClientData $objWriter->startElement('x:ClientData'); $objWriter->writeAttribute('ObjectType', 'Note'); // x:MoveWithCells $objWriter->writeElement('x:MoveWithCells', ''); // x:SizeWithCells $objWriter->writeElement('x:SizeWithCells', ''); // x:AutoFill $objWriter->writeElement('x:AutoFill', 'False'); // x:Row $objWriter->writeElement('x:Row', (string) ($row - 1)); // x:Column $objWriter->writeElement('x:Column', (string) ($column - 1)); $objWriter->endElement(); $objWriter->endElement(); } }