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

如何使用iText7在PDF中实现图像平铺填充?

使用iText7实现图片平铺填充图形

你的代码问题在于只给平铺图案添加了图像资源,但没有在图案画布上实际绘制图像,导致图案内容为空,最终填充显示为默认的黑色。以下是修正后的完整实现方案:

关键步骤说明

  1. 正确转换图像尺寸:将图像的像素尺寸转换为PDF的点单位(1英寸=72点,96DPI下像素转点公式:像素值 / 96 * 72)
  2. 创建并配置平铺图案:指定图案的宽高,确保图案的坐标系和绘制逻辑正确
  3. 在图案画布上绘制图像:必须通过PdfPatternCanvas将图像绘制到图案内部,而非仅添加资源
  4. 应用图案填充:将配置好的图案作为填充色应用到目标画布

修正后的代码示例

private void SetImageTilingFill(PdfCanvas canvas, PdfImageXObject img)
{
    // 转换图像尺寸为PDF点单位(适配96DPI)
    float imgWidth = (img.GetWidth() / 96f) * 72f;
    float imgHeight = (img.GetHeight() / 96f) * 72f;

    // 创建平铺图案,宽高与图像尺寸一致
    PdfPattern.Tiling tilingPattern = new PdfPattern.Tiling(imgWidth, imgHeight);
    // 获取图案专属画布,用于绘制图案内容
    PdfPatternCanvas patternCanvas = new PdfPatternCanvas(tilingPattern, canvas.GetDocument());

    // 在图案坐标系的(0,0)位置绘制图像
    patternCanvas.AddImage(img, imgWidth, 0, 0, imgHeight, 0, 0);

    // 将图案设置为画布填充色
    canvas.SetFillColor(new PatternColor(tilingPattern));
}

使用示例(绘制填充矩形)

// 假设已初始化PdfDocument和PdfCanvas对象
PdfImageXObject img = PdfImageXObject.CreateImageFromFile("your-image-file.png");
SetImageTilingFill(canvas, img);
// 绘制一个矩形并应用图案填充
canvas.Rectangle(100, 100, 400, 300);
canvas.Fill();

额外注意事项

  • 若需调整平铺间距、缩放或对齐方式,可修改PdfPattern.Tiling的构造参数,自定义xStep和yStep来控制平铺步长
  • 确保图像路径正确,且格式为iText7支持的类型(如PNG、JPG等)

内容的提问来源于stack exchange,提问作者FofX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:05:33