iTextSharp Overlay Image - PullRequest
       5

iTextSharp Overlay Image

2 голосов
/ 16 марта 2011

Привет, ребята. У меня есть случай, когда у меня есть изображение логотипа как часть какой-то иллюстрации ..

Если пользователь загружает новый логотип, у меня есть поле формы, которое больше, чем логотип по умолчанию.

Затем я использую это поле формы для позиционирования нового изображения.

Проблема в том, что мне нужно установить цвет фона этого поля формы на белый, чтобы он покрывал старый логотип, если новое изображение меньше старого логотипа.

Я сделал следующее:

foreach (var imageField in imageReplacements)
            {
                fields.SetFieldProperty(imageField.Key, "bgcolor", iTextSharp.text.Color.WHITE, null);
                fields.RegenerateField(imageField.Key);

                PdfContentByte overContent = stamper.GetOverContent(imageField.Value.PageNumber);
                float[] logoArea = fields.GetFieldPositions(imageField.Key);
                if (logoArea != null)
                {
                    iTextSharp.text.Rectangle logoRect = new iTextSharp.text.Rectangle(logoArea[1], logoArea[2], logoArea[3], logoArea[4]);

                    var logo = iTextSharp.text.Image.GetInstance(imageField.Value.Location);
                    if (logo.Width >= logoRect.Width || logo.Height >= logoRect.Height)
                    {
                        logo.ScaleToFit(logoRect.Width, logoRect.Height);
                    }
                    logo.Alignment = iTextSharp.text.Image.ALIGN_LEFT;
                    logo.SetAbsolutePosition(logoRect.Left, logoArea[2] + (logoRect.Height - logo.ScaledHeight) / 2);
                    // left:  logoArea[3] - logo.ScaledWidth + (logoRect.Width - logo.ScaledWidth) / 2

                    overContent.AddImage(logo);
                }
            }

Проблема заключается в том, что цвет фона поля установлен в белый цвет, а затем изображение не отображается.

Есть ли способ установить порядок наложения на слоях?

1 Ответ

0 голосов
/ 16 марта 2011

Аннотации (такие как поля формы) всегда находятся сверху содержимого страницы.Z-порядок аннотаций - это просто порядок массива аннотаций на данной странице.

Содержание страницы. Z-порядок - это просто порядок, в котором все отображается в потоке контента.Новые операторы рисования идут поверх действующих операторов.

Если вы хотите закрыть старое изображение, нарисуйте над ним белую рамку, а затем нарисуйте новый логотип поверх , что .Не нужно беспокоиться о аннотациях.


На самом деле все, что вам действительно нужно сделать, - это не устанавливать цвет фона для imageField.Вы уже масштабируете новый логотип, чтобы он соответствовал размеру старого.

Однако, если вам действительно нужно нарисовать этот белый прямоугольник, это довольно просто:

overContent.setColorFill(iTextSharp.text.Color.WHITE);
overContent.rectangle( logoRect );
overcontent.fill();
...