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

标签 c# pdf-generation itext

我正在使用已弃用的 iTextSharp (4.1.6.0) 版本从我的 MVC3 应用程序生成 PDF,并且确实需要能够将半透明形状放置在其他形状和图像之上,目标是淡化颜色它下方的图像,或将其变灰。我原以为这会像在为形状填充选择颜色时设置 alpha channel 一样简单,所以我尝试了这个:

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

最佳答案

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

关于c# - 在 iTextSharp 4.1.6.0 中使用半透明填充绘制形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14254410/

相关文章:

c# - 自定义过滤器属性注入(inject)依赖

c# - 将 ObservableCollection<XElement> 数据绑定(bind)到 ListBox?

ruby-on-rails - Gem wicked pdf - CSS 不适用于 Rails 5

c# - iTextSharp : Split pages size equals file size

java - 如何使用 iText List 将具有不同权重的文本添加到单个 ListItem

c# - 如何在 C# .NET 核心控制台程序中指定 AWS 凭据

c# - 将大量 ASCII 值(以字符串形式)转换为可读文本 C#

css - Laravel snappy(^0.3.3) - 无法包含 css 样式、图像

javascript - 将字符串内容写入 PDF

pdf - 如何使用 iText 将 XHTML 嵌套列表转换为 pdf?