我正在使用一个弃用的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();
我希望这会在页面的左下角附近绘制两个矩形,一个小的蓝色覆盖着一个更大的红色,半透明的,但红色的不是半透明的!
所以我做了一些谷歌搜索并找到了这个page,这实际上是关于iText而不是iTextSharp,他们建议使用PdfGstate
设置填充不透明度,如下所示:
PdfGState gstate = new PdfGState();
gstate.setFillOpacity(0.3);
但是当我尝试gstate
对象没有像.setFillOpacity()
这样的方法时!如果有人能指出我正确的方向,我将非常感激。
答案 0 :(得分:3)
将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();
}