2017-12-01 6 views
0

Ich habe eine eingehende jpg-Datei, die ich eine Farbe auf transparent setzen kann. Wenn ich das Bild zu einem anderen Bild hinzufüge, funktioniert das perfekt.Bildtransparenz in PDF mit iTextSharp

Ich versuche, das gleiche Bild in eine PDF mit iTextSharp hinzufügen, aber ich kann die Transparenz nicht zur Arbeit kommen.

Ich habe zwei Möglichkeiten ausprobiert, aber weder funktioniert. Der erste Weg bestand darin, das Bild in einer Bitmap zu öffnen, Transparenz festzulegen und dieses Bitmap-Objekt dann in der PDF-Datei zu verwenden. Der zweite Weg (hier gezeigt) war das Speichern der Bitmap auf der Festplatte und das Öffnen der Datei in das iTextSharp-Image.

    using (Bitmap b = new Bitmap(Image.FromFile(System.Web.HttpContext.Current.Server.MapPath("~/IncomingData/" + ImageFileName)))) 
        { 
         b.MakeTransparent(Color.White); 
         b.Save(System.Web.HttpContext.Current.Server.MapPath("~/IncomingData/" + GuidFileName), System.Drawing.Imaging.ImageFormat.Png); 
         ImageFileName = GuidFileName; 

         iTextSharp.text.Image savedImage = iTextSharp.text.Image.GetInstance(Image.FromFile(System.Web.HttpContext.Current.Server.MapPath("~/IncomingData/" + GuidFileName)), iTextSharp.text.Color.WHITE); 

         savedImage.SetAbsolutePosition(Convert.ToSingle(x + 1.0), Convert.ToSingle(imageY + 12) - Convert.ToSingle(h)); 
         savedImage.ScaleToFit(Convert.ToSingle(w), Convert.ToSingle(h)); 
         contentByte.AddImage(savedImage, true); 
        } 

ich gesehen habe, dass es eine Option Transparenz ist ...

savedImage.Transparency = ??? 

aber ich weiß nicht, was in den Werten zu setzen. Ich kann bei meinen Suchen nichts finden.

+1

Etwas hier macht keinen Sinn, da JPEG keine Transparenz unterstützt. Wie fügen Sie das Bild zu einem anderen Bild hinzu? –

+0

JPEG unterstützt keine Transparenz, aber versuchen Sie es. Es wird transparent, was Sie dann als .png speichern können. Das macht MakeTransparent. In dieser Frage, die ich nicht zu einem anderen Bild hinzufüge, füge ich ein PDF hinzu. Um den transparent "jpg" auf ein anderes Bild hinzufügen ... Bitmap b = (Bitmap) Image.FromFile (System.Web.HttpContext.Current.Server.MapPath ("~/IncomingData /" + GuidFileName)); b.MakeTransparent (Farbe.Weiß); graphics.DrawImage (b, x, y - 10, neue Breite, neue Höhe); – David

+0

Wie haben Sie überprüft, ob einer Ihrer beiden Versuche funktioniert hat oder nicht? – mkl

Antwort

1

Die Antwort gefunden, schließlich.

sah ich dieses ... und ursprünglich für .Transparency ich suchte die Transparenzeinstellungen zu finden. Ich habe es nicht gesehen. c# .NET CORE adding image with transparency to existing PDF using ITextSharp

Mein Code jetzt ist ...

    using (Bitmap b = new Bitmap(Image.FromFile(System.Web.HttpContext.Current.Server.MapPath("~/IncomingData/" + ImageFileName)))) 
        { 
         b.MakeTransparent(Color.White); 

         iTextSharp.text.Image savedImage = iTextSharp.text.Image.GetInstance(b, System.Drawing.Imaging.ImageFormat.Png); 

         savedImage.SetAbsolutePosition(Convert.ToSingle(x + 1.0), Convert.ToSingle(imageY + 12) - Convert.ToSingle(h)); 
         savedImage.ScaleToFit(Convert.ToSingle(w), Convert.ToSingle(h)); 

         contentByte.AddImage(savedImage); 
        } 

Beachten Sie, dass die contentByte.AddImage die boolean entfernt hat.

+1

Ah, dieser Boolean hat mir in deiner Frage nicht auffallen können. Wenn Sie sich fragen, was es ist: Wenn "wahr", wird das Bild inline in den Content-Stream eingebettet. Andernfalls wird es als Ressource hinzugefügt und nur aus dem Contentstream referenziert. Transparenz erfordert, dass eine Transparenzmaske als separate Ressource generiert wird. Aus diesem Grund ging die Transparenz in Ihren Tests wahrscheinlich verloren. – mkl