2016-10-11 3 views
0

Это заголовок я вижу:Itextsharp Заголовок HTML только показать одну строку

enter image description here

Это мой фактический заголовок:

enter image description here

Это мой код:

public override void OnStartPage(PdfWriter writer, Document document) 
    { 
     base.OnStartPage(writer, document); 
     ColumnText ct = new ColumnText(writer.DirectContent); 
     XMLWorkerHelper.GetInstance().ParseXHtml(new ColumnTextElementHandler(ct), new StringReader((string)System.Web.HttpContext.Current.Session["encabezado"])); 
     int? columnas = ct.LinesWritten; 
     int? columnas2 = ct.LinesWritten; 

     ct.SetSimpleColumn(document.Left, document.Top, document.Right, document.GetTop(-20), 10, Element.ALIGN_MIDDLE); 
     ct.Go(); 
    } 

ответ

1

Когда вы определяете прямоугольник для ColumnText объект, вы не обеспечивают достаточного пространства:

document.Left, document.Top, document.Right, document.GetTop(-20) 

У вас есть два пункта:

<p style="text-align: center;">header Ants Nit: [Nit organizacion]</p> 
<p style="text-align: center;">secon line: [Nombre organizacion]</p> 

Вы не определить шрифт, размер шрифта или ведущий, поэтому по умолчанию используется:

Helvetica 
12pt 
18pt 

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

Вы определяете прямоугольник, который охватывает всю ширину страницы, но это всего лишь 20 пользовательских единиц. 20 пользовательских единиц достаточно только для одной строки, что согласуется с тем, что вы видите: только одна строка.

Если вы хотите две строки появляются, необходимо определить больший прямоугольник, например:

ct.SetSimpleColumn(
    document.Left, document.Top, 
    document.Right, document.GetTop(-40)); 

Сейчас настало время для вас, чтобы сказать: Подождите! У меня есть еще два вопроса!

  1. Я утра определения водительства, вы не видите параметр 10 в методе SetSimpleColumn()? Да, я вижу этот параметр, но [1] ваш шрифт имеет размер 12, а ведущий, размер которого меньше размера шрифта, приведет к уродливому тексту, а [2] я подозреваю, что XML Worker добавляет абзацы в композитном режиме, в в этом случае ведущее столбец игнорируется в пользу ведущего абзаца. То же самое касается выравнивания (вы использовали text:align: center в своем HTML для этого), поэтому я удалил два неиспользуемых параметра из вашего метода setSimpleColumn().

  2. Если я следую вашим советам, мой заголовок перекрывается с фактическим содержимым. Это верно, потому что верхний край по умолчанию составляет 36 пользовательских единиц, и вы определяете прямоугольник заголовка, который имеет 40 пользовательских единиц. Вам нужно будет увеличить верхнюю маржу, если вы хотите избежать того, что ваш верхний маржи перекрывается с фактическим контентом.

У меня есть один встречный вопрос: почему вы используете XML Worker для создания заголовка. Ваш заголовок предельно прост. Я не понимаю, почему вы хотите определить свой заголовок, используя два тега <p>. Просто определите два объекта Paragraph, и вы избавите свой CPU от необходимости разбора HTML.

И наконец: я должен указать на ошибку, которую вы делаете.Вы никогда не должны добавлять контент в метод OnStartPage(), только в методе OnEndPage().

В документации, мы сделали это совершенно ясно, что это было запрещено добавить содержимое в методе onStartPage(); контент может быть только , добавленный в методе onEndPage(). Мы также ясно дали понять, что объект Document, переданный методам событий страницы, был передан для только для чтения. Было запрещено использовать document.add() даже в методе onEndPage().

К сожалению, многие разработчики полностью игнорируют документацию, , которая привела к таким проблемам, как:

Кроме того, вы можете удалить странные строки о LinesWritten. Я не понимаю, почему они были бы полезны.

+0

: DD Спасибо другу, содержимое заголовка - пример, содержимое будет отредактировано клиентом с помощью Rich Text Editor, ваш ответ решит мою проблему, спасибо вам большое. –

+0

ОК, в этом случае имеет смысл использовать HTML. Пожалуйста, примите ответ, если он решит вашу проблему. (См. Галочку под партитурой.) –

 Смежные вопросы

  • Нет связанных вопросов^_^