2015-06-26 7 views
1

Есть ли у кого-нибудь идеи о том, как установить цвет фона в прямоугольнике PdfSignatureAppearance в iTextSharp? Я создаю объект PdfSignatureAppearance и могу установить его позиционирование на странице, но прямоугольник имеет только прозрачный фон. Я пытаюсь применить цвет (на самом деле).не удалось установить цвет фона на внешний вид iTextSharp

Я попытался создать новый iTextSharp.text.Rectangle, а затем установить rect.BackgroundColor = new BaseColor(System.Drawing.Color.Yellow);. Это не работает. Я видел, как кто-то другой пытался что-то подобное, применяя стили к слою2 объекта внешнего вида подписи. Я пробовал их без везения.

PdfTemplate sigAppLayer2 = appearance.GetLayer(2); 
sigAppLayer2.SetRGBColorFill(255, 0, 0); 
sigAppLayer2.SetGrayFill(2); 
sigAppLayer2.BoundingBox.BackgroundColor = new BaseColor(System.Drawing.Color.Yellow); 

В любое время, когда я пытаюсь изменить один из вышеуказанных изменений стиля на слой2, видимая подпись исчезает в PDF. Если я попробую применить его к слою 0 или слою 1, ничего не произойдет. Я предполагаю, что я касаюсь правильного слоя (2).

Любые идеи? Цель состоит в том, чтобы просто получить фон в ящике подписи, если бы он был прозрачным.

См. Комментарий ниже. Я попробовал это, а также установил против слоя 2 и слоя 0. Оба они приводят к красному ящику, но текст подписи отсутствует.

PdfTemplate sigAppLayer2 = appearance.GetLayer(2); 
Rectangle rect = sigAppLayer2.BoundingBox; 
PdfTemplate sigAppLayer0 = appearance.GetLayer(0); 
sigAppLayer0.SetRGBColorFill(255, 0, 0); 
sigAppLayer0.Rectangle(rect.Left, rect.Bottom, rect.Width, rect.Height); 
sigAppLayer0.Fill(); 
+0

* но текст подписи отсутствует * - Вы знаете, что после выполнения 'appearance.GetLayer (2)' Вы должны добавить писать себя, не так ли? Либо вы оставите рисование слоя в iText, либо сделаете все сами. – mkl

+0

Я не знал, что вы не можете манипулировать слоем2, не разрушая его. См. Комментарий ниже. Любые идеи, если есть способ сохранить текст при настройке фона прямоугольника подписи? Я попытался манипулировать параметром прямоугольника, прежде чем он будет установлен в метод SetVisibleSignature, но, похоже, он не форматирует процесс создания блока подписи. – gilm0079

+0

* Я не знал, что вы не можете манипулировать слоем2, не уничтожая его. * - В большей степени iText (во время preClose) проверяет, есть ли уже какой-то материал уровня 2. Если это так, это берет (например, ваш прямоугольник) как есть. Если этого не происходит, создается внешний вид слоя 2 по умолчанию. – mkl

ответ

1

Необходимо нарисовать прямоугольник и заполнить этот прямоугольник цветом заливки.

Из памяти (непроверенных), вам нужно что-то вроде этого:

PdfTemplate sigAppLayer2 = appearance.GetLayer(2); 
Rectangle rect = sigAppLayer2.BoundingBox; 
sigAppLayer2.SetRGBColorFill(255, 0, 0); 
sigAppLayer2.Rectangle(rect.Left, rect.Bottom, rect.Width, rect.Height); 
sigAppLayer2.Fill(); 
+0

Спасибо. Это поставило меня ближе к решению. Если я сделаю этот метод, я получаю красную рамку, в которой находится подпись, но теперь отсутствует весь текст подписи. Я также попытался получить размер прямоугольника прямоугольной рамки из слоя 2, а затем построил прямоугольник с заполненным слоем 0 с теми же размерами. Это также создает красный прямоугольник, но текст подписи здесь также отсутствует. Есть идеи? – gilm0079

+0

Если вы сначала добавите текст, а затем добавьте прямоугольник, прямоугольник покроет текст. Текст будет там, но вы не увидите его по причинам, которые должны быть очевидными. –

+0

спасибо. в этом есть смысл. Любые предложения о том, как выполнить эту передовую практику? Я использую метод 'appearance.SetVisibleSignature()' для создания прямоугольника подписи. Это то, что создает текст.Проблема в том, что кажется, что он layer2 и его ограничивающий бокс еще не существуют, если я попытаюсь сначала создать прямоугольник с цветом – gilm0079