You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TCPDF创建多个多边形失败:单个正常,多创建时前序图形消失

解决TCPDF绘制多个多边形时图形消失的问题

嘿,我看了你的代码,问题基本锁定在变换上下文的管理和绘图指令的顺序上,咱们一步步来修正:

问题根源拆解

  1. 你在第一个多边形绘制完成后直接调用了StopTransform(),但如果后续还要画需要变换的图形(比如第二个StarPolygon),得重新开启变换上下文才行,不然整个绘图状态会乱掉,导致之前的图形也出问题。
  2. 你把SetLineStyle放在了StarPolygon之后,这会导致线条样式根本没应用到多边形上,等于白设置了。
  3. 另外得确认下图片的坐标会不会刚好把多边形挡住,不过从你给的坐标看,两个图片和多边形位置不冲突,但还是要留意。

修正后的可运行代码示例

// 绘制第一个多边形:按正确顺序管理变换和样式
$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:07:35