【问题标题】:Drawing shapes with a translucent fill in iTextSharp 4.1.6.0在 iTextSharp 4.1.6.0 中使用半透明填充绘制形状
【发布时间】:2013-01-10 09:20:48
【问题描述】:

我正在使用已弃用的 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() 的方法时!如果有人能指出我正确的方向,我将不胜感激。

【问题讨论】:

    标签: c# pdf-generation itextsharp itext


    【解决方案1】:

    将 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();
        }
    

    【讨论】:

    • 哦,我明白了,我不知道。虽然它不会引发任何错误,但也不会导致任何透明度。我在 adobe reader 11 和 windows 8 的 pdf 阅读器中打开它,两者的结果相同。
    • 我已修改答案以应用 PdfGState。它对我有用,红色矩形现在是透明的。
    • 太棒了!非常有效,谢谢。然而值得注意的是,设置 alpha 在这里没有任何区别,透明度水平完全取决于 FillOpacity。
    猜你喜欢
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2012-06-20
    • 2012-01-16
    • 1970-01-01
    相关资源
    最近更新 更多