如何使用iText7在PDF中实现图像平铺填充?
使用iText7实现图片平铺填充图形
你的代码问题在于只给平铺图案添加了图像资源,但没有在图案画布上实际绘制图像,导致图案内容为空,最终填充显示为默认的黑色。以下是修正后的完整实现方案:
关键步骤说明
- 正确转换图像尺寸:将图像的像素尺寸转换为PDF的点单位(1英寸=72点,96DPI下像素转点公式:
像素值 / 96 * 72) - 创建并配置平铺图案:指定图案的宽高,确保图案的坐标系和绘制逻辑正确
- 在图案画布上绘制图像:必须通过
PdfPatternCanvas将图像绘制到图案内部,而非仅添加资源 - 应用图案填充:将配置好的图案作为填充色应用到目标画布
修正后的代码示例
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
相关产品推荐
相关产品推荐

