2016-06-21 16 views
0

Ich habe den folgenden Code, um Hintergrundfarbe zu einem meiner Felder zu setzen, aber aus irgendeinem Grund kann ich nicht die Transparenz des Hintergrunds kontrollieren. Kann mir bitte jemand einen Blick darauf werfen und mich wissen lassen, was ich falsch mache. Vielen Dank.itextsharp Einstellung Hintergrund Opazität funktioniert nicht

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

Du hast Recht. Das wird nicht unterstützt und es wird auch in Zukunft nicht unterstützt (was du versuchst zu tun, sollte nicht funktionieren). Sie müssen einen Workaround verwenden: Holen Sie sich die Koordinaten des Feldes und fügen Sie den transparenten Hintergrund mit 'PdfContentByte' hinzu. –

+0

Auch wenn der Quellcode Alpha-Wert definiert? https://github.com/itext/itextsharp/blob/master/src/core/iTextSharp/text/BaseColor.cs – nishantvodoo

+0

Transparenz in PDF unterscheidet sich sehr von Transparenz in anderen Kontexten. –

Antwort

2

Für den Fall, jemand anderes steht das gleiche Problem

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