在iTextSharp 4.1.6.0中使用半透明填充绘制形状

本文关键字:半透明 填充 绘制 iTextSharp | 更新日期: 2023-09-27 17:51:08

我使用一个过时的版本iTextSharp(4.1.6.0)来生成我的MVC3应用程序的pdf,并且真的需要能够在其他形状和图像的顶部放置半透明形状,目标是淡化它下面的图像的颜色,或者使其变灰。我本以为这就像在为形状填充选择颜色时设置alpha通道一样简单,所以我尝试了这个:

Document doc = new Document();
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(@"C:/Filepath/doc.pdf", FileMode.Create))
doc.Open();
PdfContentByte over = writer.DirectContent;
// draw shape to be faded out
over.Rectangle(10, 10, 50, 50);
over.SetColorFill(Color.BLUE);
over.Fill();
// draw shape over the top to do the fading (red so i can easily see where it is)
over.Rectangle(0, 0, 60, 60);
over.SetColorFill(new Color(255,0,0,150)); // rgba
over.Fill();
doc.Close();

我希望在页面左下角附近画两个矩形,一个蓝色的小矩形覆盖着一个较大的红色半透明矩形,但红色矩形不是半透明的!

所以我做了一些谷歌搜索,发现这个页面,这实际上是关于iText不是iTextSharp,他们建议使用PdfGstate设置填充不透明度,像这样:

PdfGState gstate = new PdfGState();
gstate.setFillOpacity(0.3);

但是当我尝试gstate对象没有方法是像.setFillOpacity()一样!如果有人能给我指指方向,我将不胜感激。

在iTextSharp 4.1.6.0中使用半透明填充绘制形状

将Java库转换为c#库的规则之一是,所有的getXYZ和setXYZ方法都应该转换为简单的c#属性。所以gstate.setFillOpacity(0.3);会变成gstate.FillOpacity = 0.3f;

    using (Document doc = new Document())
    {
        PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(@"mod.pdf", FileMode.Create));
        doc.Open();
        PdfContentByte over = writer.DirectContent;
        over.SaveState();
        over.Rectangle(10, 10, 50, 50);
        over.SetColorFill(BaseColor.BLUE);
        over.Fill();

        PdfGState gs1 = new PdfGState(); 
        gs1.FillOpacity = 0.5f;
        over.SetGState(gs1);
        over.Rectangle(0, 0, 60, 60);
        over.SetColorFill(new BaseColor(255, 0, 0, 150));
        over.Fill();
        over.RestoreState();
        doc.Close();
    }