2016-06-21 85 views
0

我有下面的代码来设置我的领域之一的背景颜色,但由于某种原因,我无法控制背景的透明度。有人可以看看它,让我知道我做错了什么。谢谢。itextsharp设置背景不透明不工作

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

你说得对。这是不支持的,它将来也不会被支持(你试图做的事不应该工作)。您必须使用一种解决方法:获取字段的坐标并使用“PdfContentByte”添加透明背景。 –

+0

即使源代码定义了alpha值? https://github.com/itext/itextsharp/blob/master/src/core/iTextSharp/text/BaseColor.cs – nishantvodoo

+0

PDF中的透明度与其他上下文中的透明度非常不同。 –

回答

2

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

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!"); 
       } 
     }