PDFsharp & MigraDoc Foundation
https://forum.pdfsharp.net/

First page is blackened after adding watermark
https://forum.pdfsharp.net/viewtopic.php?f=2&t=4260
Page 1 of 1

Author:  sjsyk123456 [ Thu Jun 10, 2021 9:12 am ]
Post subject:  First page is blackened after adding watermark

Page is blackened after adding watermark in case of some pdf files . Please see attached image.
What could be the reason , and possible fix.

Here is code

Page is blackened after adding watermark in case of some pdf files . Please see attached image.
What could be the reason , and possible fix.

[see the blacked out page image][1]


[1]: https://i.stack.imgur.com/vPw4u.png


It does not happen for all the files but for some files only.
Code:
    var _pdfInBytes = File.ReadAllBytes("c:\\test\\test123.pdf");
                    string watermarkText = "This watermark text on left side";
                    var coordinates = new Point(25, 200);
                    using (var pdfNewDoc = new PdfDocument())
                    {
                        using (var pdfImport = PdfReader.Open(new MemoryStream(_pdfInBytes, true), PdfDocumentOpenMode.Import))
                        {
                            if (pdfImport.PageCount == 0)
                            {
                                return;
                            }
                            foreach (var pg in pdfImport.Pages)
                            {
                                pdfNewDoc.AddPage(pg);
                            }
                            var page = pdfNewDoc.Pages[0];
                            // overlapping trick #165910
                            var xOffset = 100.0;
                           for (var index = 0; index < page.Contents.Elements.Count; index++)
                            {
                                var stream = page.Contents.Elements.GetDictionary(index).Stream;
                                var x = GetMinXOffsetDraft(stream.ToString());   
                                if (xOffset > x){                            {
                                    xOffset = x;
                                }
                            }
                            xOffset *= 0.6; // magic number :)
                            // blank page trick #165910
                            if (page.CropBox.IsEmpty && !page.MediaBox.IsEmpty){
                              page.CropBox = page.MediaBox;
                            }
                            // Get an XGraphics object for drawing beneath the existing content
                            var gfx = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Prepend);                   
                            var tf = new XTextFormatter(gfx);                       
                            var xFont = new XFont("Arial", 10, XFontStyle.Regular);   
                            // Get watermark text size
                            var wmSize = gfx.MeasureString(watermarkText, xFont);   
                            // Middle Y coordinate
                            var wmY = (gfx.PageSize.Height - wmSize.Width) / 2;   
                            var coords = new XPoint(page.CropBox.Location.X + (xOffset < coordinates.X ? xOffset : coordinates.X),
                                page.CropBox.Location.Y + (coordinates.Y > wmY ? coordinates.Y :wmY));   
                            // Define a rotation transformation at the center of the page
                            gfx.TranslateTransform(coordinates.X, coordinates.Y);
                            gfx.RotateTransform(90);
                            gfx.TranslateTransform(-coordinates.X, -coordinates.Y);   
                            // Create brush
                            var brushColor = Color.Red;
                            var brush1= new XSolidBrush(XColor.FromArgb(brushColor.A, brushColor.R, brushColor.G, brushColor.B));
                            brush1.Overprint = false;
                            XBrush brush =
                                new XSolidBrush(XColor.FromArgb(brushColor.A, brushColor.R, brushColor.G, brushColor.B));                       
                            var rect = new XRect(coordinates.X, coordinates.Y, gfx.PageSize.Height -coordinates.Y,
                                coordinates.X);   
                            tf.DrawString(watermarkText, xFont, brush, rect);
                            byte[] outputBytes = null;
                            using (var outStream = new MemoryStream())
                            {
                                pdfNewDoc.Save(outStream, false);
                                outputBytes = outStream.ToArray();
                            }
                            File.WriteAllBytes("c:\\test\\test-"+DateTime.Now.ToString("ddmmyyyyhhmmss") +".pdf", outputBytes);
                        }
                }


Attachments:
black-bkg-watermark.PNG
black-bkg-watermark.PNG [ 206.71 KiB | Viewed 2896 times ]

Author:  TH-Soft [ Thu Jun 10, 2021 11:57 am ]
Post subject:  Re: First page is blackened after adding watermark

Hi!

Which version of PDFsharp do you use?
Why don't you use the Issue Submission Template?

Maybe it makes a difference to wrap the watermark code with "gfx.Save()" and "gfx.Restore()".

P.S.: Also discussed on SO:
https://stackoverflow.com/q/67919243/162529

Page 1 of 1 All times are UTC
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/