Создание индивидуального внешнего вида для поля подписи с помощью iText 9.0.5C#

Место общения программистов C#
Ответить
Anonymous
 Создание индивидуального внешнего вида для поля подписи с помощью iText 9.0.5

Сообщение Anonymous »

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

Код: Выделить всё

                   Rectangle rect = new Rectangle(x, y, width, height);

SignerProperties signerProperties = new SignerProperties()
.SetReason(reason)
.SetLocation(location)
.SetPageNumber(1)
.SetPageRect(rect);

// Create a signature field (visible signature)
var field = new SignatureFormFieldBuilder(signer.GetDocument(), "SignatureField")
.SetWidgetRectangle(rect)
.CreateSignature();

PdfAcroForm form = PdfFormCreator.GetAcroForm(signer.GetDocument(), true);
form.AddField(field);

Div appearanceContent = GenerateAppearanceContent(rect);

// Build signature appearance
SignatureFieldAppearance appearance =
new SignatureFieldAppearance("SignatureField")
.SetContent(appearanceContent);

// Attach to signer properties
signerProperties.SetSignatureAppearance(appearance);
signer.SetSignerProperties(signerProperties);
А затем я подписываю PDF-документ с помощью SignDetached (используя внешнюю подпись). У меня проблемы с генерацией внешнего вида (в методе GenerateAppearanceContent). Раньше я делал это с помощью PdfCanvas в iText7, но, насколько я понимаю, в iText9 это больше недоступно, так как многослойность удалена. Поэтому я попытался адаптировать Пример 1 отсюда https://kb.itextpdf.com/itext/itext-cor ... provements как

Код: Выделить всё

public Div GenerateAppearanceContent(Rectangle rect)
{
var div = new Div();

Image img = new Image(ImageDataFactory.Create(HostingEnvironment.MapPath(ConfigurationManager.AppSettings["ImagePath"])));
var signingText = "..."

var textRect = new Rectangle(MARGIN, MARGIN, 2 * rect.GetWidth() / 3 - 2 * MARGIN, rect.GetHeight() - 2 * MARGIN);
var imageRect = new Rectangle(rect.GetX() + 2 * rect.GetWidth() / 3 + MARGIN / 2, rect.GetY() + MARGIN, rect.GetWidth() / 3 - MARGIN, rect.GetHeight() - 2 * MARGIN);
var paragraph = new Paragraph(signingText).SetFont(font).SetMargin(paragraphMargin).SetMultipliedLeading(0.9f).SetFontSize(paragraphFontSize);

var textDiv = new Div();
textDiv.SetHeight(textRect.GetHeight());
textDiv.SetWidth(textRect.GetWidth());
textDiv.SetVerticalAlignment(VerticalAlignment.TOP);
textDiv.Add(paragraph).SetBorder(new SolidBorder(ColorConstants.YELLOW, 1));

var imageDiv = new Div();
imageDiv.SetHeight(imageRect.GetHeight());
imageDiv.SetWidth(imageRect.GetWidth());
imageDiv.SetVerticalAlignment(iText.Layout.Properties.VerticalAlignment.TOP);
imageDiv.SetHorizontalAlignment(iText.Layout.Properties.HorizontalAlignment.CENTER);
imageDiv.Add.SetBorder(new SolidBorder(ColorConstants.BLUE, 1));

var flexContainer = new Div();
flexContainer.SetProperty(Property.FLEX_WRAP, FlexWrapPropertyValue.WRAP);
flexContainer.SetProperty(Property.FLEX_DIRECTION, FlexDirectionPropertyValue.ROW);
flexContainer.SetProperty(Property.ALIGN_ITEMS, AlignmentPropertyValue.FLEX_START);
flexContainer.Add(textDiv.SetBorder(new SolidBorder(ColorConstants.BLUE, 1)))
.Add(imageDiv)
.SetBorder(new SolidBorder(ColorConstants.GREEN, 1));

flexContainer.SetNextRenderer(new FlexContainerRenderer(flexContainer));

div.SetPadding(0).SetMargin(0);
div.Add(flexContainer);
div.SetBorder(new SolidBorder(ColorConstants.RED, 1));

return div;
}
Первый div отображается правильно, он занимает две трети контейнера, однако второй не виден, что бы я ни делал. Я предполагаю, что он находится за пределами контейнера с правой стороны, так как я вижу, что граница div flexContainer занимает 100% ширины. Я не понимаю, как здесь работают свойства flex, изменение FLEX_WRAP или FLEX_DIRECTION не имеет никакого значения, и я не смог найти никакой документации о том, как flex работает с iText, только пример в ссылке.

Подробнее здесь: https://stackoverflow.com/questions/799 ... text-9-0-5
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»