C# iTextsharp是否支持多色对角渐变?

C# iTextsharp是否支持多色对角渐变?,c#,itextsharp,linear-gradients,C#,Itextsharp,Linear Gradients,我的目标是创建一个以多种颜色作为椭圆背景的对角线渐变。水平或垂直渐变可以用下面的代码完成。我基本上是用渐变阴影画矩形,然后从中剪出一个椭圆 这是我的水平梯度: var cb = writer.DirectContent; var boundingBox = new Rectangle(200, 200, 700, 350); //draw a path, for example an ellipse cb.Ellipse(boundingBox.Left, boundingBox.Botto

我的目标是创建一个以多种颜色作为椭圆背景的对角线渐变。水平或垂直渐变可以用下面的代码完成。我基本上是用渐变阴影画矩形,然后从中剪出一个椭圆

这是我的水平梯度:

var cb = writer.DirectContent;

var boundingBox = new Rectangle(200, 200, 700, 350);

//draw a path, for example an ellipse
cb.Ellipse(boundingBox.Left, boundingBox.Bottom, boundingBox.Right, boundingBox.Top);
cb.Clip();//set clipping mask
cb.NewPath();

//gradient 1:  yellow to gray
var gradientRect1 = new Rectangle(200, 200, 400, 350);
PdfShading shading = PdfShading.SimpleAxial(writer, gradientRect1.Left, gradientRect1.Bottom + (gradientRect1.Height / 2), gradientRect1.Right, gradientRect1.Bottom + (gradientRect1.Height / 2), BaseColor.YELLOW, BaseColor.DARK_GRAY);
var pattern = new PdfShadingPattern(shading);
gradientRect1.BackgroundColor = new ShadingColor(pattern);
cb.Rectangle(gradientRect1);
cb.Fill();

//gradient  2, gray to red
var gradientRect2 = new Rectangle(400, 200, 700, 350);
PdfShading shading2 = PdfShading.SimpleAxial(writer, gradientRect2.Left, gradientRect2.Bottom + (gradientRect2.Height / 2), gradientRect2.Right, gradientRect2.Bottom + (gradientRect2.Height / 2), BaseColor.DARK_GRAY, BaseColor.RED);
var pattern2 = new PdfShadingPattern(shading2);
gradientRect2.BackgroundColor = new ShadingColor(pattern2);
cb.Rectangle(gradientRect2);
cb.Fill();

水平渐变的代码:

var cb = writer.DirectContent;

var boundingBox = new Rectangle(200, 200, 700, 350);

//draw a path, for example an ellipse
cb.Ellipse(boundingBox.Left, boundingBox.Bottom, boundingBox.Right, boundingBox.Top);
cb.Clip();//set clipping mask
cb.NewPath();

//gradient 1:  yellow to gray
var gradientRect1 = new Rectangle(200, 200, 400, 350);
PdfShading shading = PdfShading.SimpleAxial(writer, gradientRect1.Left, gradientRect1.Bottom + (gradientRect1.Height / 2), gradientRect1.Right, gradientRect1.Bottom + (gradientRect1.Height / 2), BaseColor.YELLOW, BaseColor.DARK_GRAY);
var pattern = new PdfShadingPattern(shading);
gradientRect1.BackgroundColor = new ShadingColor(pattern);
cb.Rectangle(gradientRect1);
cb.Fill();

//gradient  2, gray to red
var gradientRect2 = new Rectangle(400, 200, 700, 350);
PdfShading shading2 = PdfShading.SimpleAxial(writer, gradientRect2.Left, gradientRect2.Bottom + (gradientRect2.Height / 2), gradientRect2.Right, gradientRect2.Bottom + (gradientRect2.Height / 2), BaseColor.DARK_GRAY, BaseColor.RED);
var pattern2 = new PdfShadingPattern(shading2);
gradientRect2.BackgroundColor = new ShadingColor(pattern2);
cb.Rectangle(gradientRect2);
cb.Fill();

有人知道是否可以旋转渐变,使其显示对角线渐变吗?谢谢你的帮助

我首先简化了你的代码。。。根本不需要绘制矩形:

//draw a path, for example an ellipse
cb.Ellipse(boundingBox.Left, boundingBox.Bottom, boundingBox.Right, boundingBox.Top);
cb.Clip();//set clipping mask
cb.NewPath();

//gradient 1:  yellow to gray
PdfShading shading = PdfShading.SimpleAxial(writer, 200, 275, 400, 275, BaseColor.YELLOW, BaseColor.DARK_GRAY, true, false);
cb.PaintShading(shading);

//gradient  2, gray to red
PdfShading shading2 = PdfShading.SimpleAxial(writer, 400, 275, 700, 275, BaseColor.DARK_GRAY, BaseColor.RED, false, true);
cb.PaintShading(shading2);
这也会导致

基于此代码,我稍微更改了着色坐标:

//gradient 1:  yellow to gray
PdfShading shading = PdfShading.SimpleAxial(writer, 300, 175, 400, 275, BaseColor.YELLOW, BaseColor.DARK_GRAY, true, false);
cb.PaintShading(shading);

//gradient  2, gray to red
PdfShading shading2 = PdfShading.SimpleAxial(writer, 400, 275, 600, 475, BaseColor.DARK_GRAY, BaseColor.RED, false, true);
cb.PaintShading(shading2);
结果是:


这应该是所需的对角线渐变。

使用的着色轴坐标表示水平轴。你试过使用非水平轴吗?是的,可以对角指定坐标,但这只适用于一种颜色转换。非常感谢!我认为矩形(或任何其他路径)是必需的。PDF有一个着色操作符sh来绘制由着色字典描述的形状和颜色着色,以这里使用的当前剪辑路径为准;