使用TCPDF创建多个多边形失败:单个正常,多创建时前序图形消失
解决TCPDF绘制多个多边形时图形消失的问题
嘿,我看了你的代码,问题基本锁定在变换上下文的管理和绘图指令的顺序上,咱们一步步来修正:
问题根源拆解
- 你在第一个多边形绘制完成后直接调用了
StopTransform(),但如果后续还要画需要变换的图形(比如第二个StarPolygon),得重新开启变换上下文才行,不然整个绘图状态会乱掉,导致之前的图形也出问题。 - 你把
SetLineStyle放在了StarPolygon之后,这会导致线条样式根本没应用到多边形上,等于白设置了。 - 另外得确认下图片的坐标会不会刚好把多边形挡住,不过从你给的坐标看,两个图片和多边形位置不冲突,但还是要留意。
修正后的可运行代码示例
// 绘制第一个多边形:按正确顺序管理变换和样式 $pdf->StartTransform(); // 先开启变换上下文(你之前可能漏了这一步?) $pdf->SetLineStyle(array('width' => 1, 'color' => array(145,191,56))); // 先设置线条样式,再绘图 $pdf->StarPolygon(94, 110, 39, 90, 3, 0, 1, 'CNZ'); // 绘制三角形多边形 $pdf->Image('@'.$imgdata1, 50, 70, 90, 90, '', '', 'C', false, 300, '', false, false, 0, false, false, false); $pdf->StopTransform(); // 结束第一个图形的变换上下文 // 绘制第二个多边形:重新开启变换,重复正确流程 $pdf->StartTransform(); // 关键!必须重新开启变换,不然绘图状态异常 $pdf->SetLineStyle(array('width' => 1, 'color' => array(145,191,56))); // 再次设置样式(如果样式不变也可以复用,但明确设置更稳妥) $pdf->StarPolygon(147, 58, 29, 90, 3, 0, 1, 'CNZ'); // 绘制第二个三角形多边形 $pdf->Image('@'.$imgdata2, 25, 130, 70, 60, '', '', 'R', false, 300, '', false, false, 0, false, false, false); $pdf->StopTransform();
几个关键注意事项
- 变换上下文要配对:每一个
StopTransform()都得对应一个StartTransform(),而且多个独立的变换图形要各自开启/结束上下文,不能只开一次就一直用。 - 样式设置要前置:所有的线条、填充样式都要在绘制图形前设置,不然TCPDF会用默认样式,你的自定义样式就失效了。
- 坐标检查:确保图片和多边形的坐标没有重叠覆盖,有时候不是图形没画出来,是被图片挡住了。
如果还是有问题,可以先去掉所有StopTransform()和StartTransform()测试下,看两个多边形能不能正常显示,再逐步加回变换逻辑排查。
内容的提问来源于stack exchange,提问作者Sairam Duggi
相关产品推荐
相关产品推荐

