Как мне перенести текст в следующее акрополь в iTextSharp?

#c# #pdf-generation #itextsharp

#c# #генерация pdf #itextsharp

Вопрос:

как мне перенести текст из одного акрополя в следующее? У меня есть документ Adobe pdf, который дал нам наш клиент. В нем есть поля acro одно поверх другого (все с одинаковым именем). Они хотят, чтобы текст переносился из одного в другой, когда он достигает конца строки. Все другие примеры, которые я вижу там, не касаются заполнения полей acro, которые переносятся. Пожалуйста, помогите!

                 // loop through disabilities and display them
                foreach (var disability in formNature.Disabilities)
                {
                    fields.SetField("EVALUATION", disability.PrimaryDisabilityName   "; ");
                }
 

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

Ответ №1:

К сожалению, это не полный ответ.

Во-первых, при вызове SetField() вы стираете текущее содержимое поля и заменяете его своим новым значением. При выполнении в цикле будет сохранено только последнее значение. Что вам нужно сделать, это перебирать каждое значение и объединять их в одну большую строку.

 string buf = '';
foreach (var disability in formNature.Disabilities)
{
    buf  = disability.PrimaryDisabilityName   "; ";
}
buf = buf.Trim();
 

Во-вторых, стандарт PDF, насколько мне известно, не поддерживает цепочку полей для переполнения, что является тем, что вы ищете. Единственный известный мне способ выполнить то, что вы пытаетесь, — это фактически измерить строки и сравнить их с шириной полей и обрезать их по мере необходимости. Для этого вам нужно будет найти шрифт, используемый для данного поля, создать BaseFont из него и использовать его для измерения строки. Затем сравните это с прямоугольником поля и используйте только те символы, которые «вписываются» в это поле. Повторяйте по мере необходимости.

Тем не менее, я бы действительно рекомендовал вам просто отредактировать PDF-файл и заменить несколько полей одним большим полем, поддерживающим несколько строк. Ваша жизнь станет намного, намного проще.

Комментарии:

1. Да, PDF не предназначен для публикации в Word, но оптимизирован для окончательной доставки / переносимости. Вы, будучи программистом, являетесь имитируемым программным обеспечением для публикации word. У меня у самого такая же проблема: использование SetField, и поэтому мне нужно будет использовать PdfCell для измерения строки (без добавления в документ), чтобы определить, когда происходит перелив.