itextsharp设置背景不透明度不起作用

Posted

技术标签:

【中文标题】itextsharp设置背景不透明度不起作用【英文标题】:itextsharp setting background opacity not working 【发布时间】:2016-10-23 02:55:18 【问题描述】:

我有以下代码为我的一个字段设置背景颜色,但由于某种原因,我无法控制背景的透明度。有人可以看看它,让我知道我做错了什么。谢谢。

 using (var newFileStream = new FileStream(fileNameNew, FileMode.Create))
        
            // Open existing PDF
            var pdfReader = new PdfReader(existingFileStream);

            // PdfStamper, which will create
            var stamper = new PdfStamper(pdfReader, newFileStream);

            var form = stamper.AcroFields;
            var fieldKeys = form.Fields.Keys;


            foreach (string fieldKey in fieldKeys)
            
                if (fieldKey.Equals("Title"))
                
                    form.SetFieldProperty(fieldKey, "bgcolor", new BaseColor(System.Drawing.Color.FromArgb(20,225,160,0)),null);
                    form.SetField(fieldKey, "Test");

                
                else
                
                    form.SetField(fieldKey, "REPLACED!");
                
            
            stamper.FormFlattening = true;
            stamper.Close();
            pdfReader.Close();
        

【问题讨论】:

你是对的。这不受支持,将来也不会受支持(您尝试做的事情不应该工作)。您必须使用一种解决方法:获取字段的坐标并使用 PdfContentByte 添加透明背景。 即使源代码定义了alpha值? github.com/itext/itextsharp/blob/master/src/core/iTextSharp/… PDF 中的透明度与其他上下文中的透明度有很大不同。 感谢@BrunoLowagie 的回复 【参考方案1】:

以防万一其他人面临同样的问题

 var pdfReader = new PdfReader(existingFileStream);

            // PdfStamper, which will create
            var stamper = new PdfStamper(pdfReader, newFileStream);
            var form = stamper.AcroFields;
            var fieldKeys = form.Fields.Keys;
            PdfContentByte background;
            foreach (string fieldKey in fieldKeys)
            
                if (fieldKey.Equals("Title"))
                
                    //form.SetFieldProperty(fieldKey, "bgColor", new BaseColor(System.Drawing.Color.FromArgb(125,225,160,0)),null);
                    form.SetField(fieldKey, "Test");
                    IList<AcroFields.FieldPosition> pos = form.GetFieldPositions(fieldKey);
                    PdfContentByte contentBtye = stamper.GetOverContent(pos[0].page);
                    contentBtye.SetColorFill(new BaseColor(200, 50, 50));
                    contentBtye.Rectangle(pos.FirstOrDefault().position.Left, pos.FirstOrDefault().position.Bottom, pos.FirstOrDefault().position.Width, pos.FirstOrDefault().position.Height);
                    PdfGState state = new PdfGState();
                    state.FillOpacity = 0.5f;
                    contentBtye.SetGState(state);
                    contentBtye.Fill();                                   
                
                else
                
                    form.SetField(fieldKey, "REPLACED!");
                
         

【讨论】:

以上是关于itextsharp设置背景不透明度不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenGL 中设置透明背景颜色不起作用

带有rgba的CSS背景不透明度在IE 8中不起作用

three.js 透明背景根本不起作用

自定义 UIActivity ViewController 背景图像透明度不起作用

使 SKScene 的背景透明不起作用......这是一个错误吗?

具有背景颜色和透明前景图像的 UIButton 自定义类型不起作用