2015-12-27 2 views
2

Я знаю, что этот вопрос задан тысячу раз, но я еще не нашел прямой ответ. Я относительно новичок в ITextSharp, поэтому, пожалуйста, объясните, как будто вы разговаривали с малышом. Как я могу добавить простой текстовый заголовок и нижний колонтитул к документу, который я создаю?Верхний колонтитул в ITextSharp

Я создаю простой PDF-документ со следующим кодом:

void Button1Click(object sender, EventArgs e) 
    { 

      Document doc = new Document(iTextSharp.text.PageSize.LEDGER, 10, 10, 42, 35); 
      PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(@"File Path", FileMode.Create)); 

      doc.Open(); 
      Paragraph par1 = new Paragraph("Hello World!"); 
      doc.Add(par1); 

      //Code to add header/footer 

      doc.Close(); 

      MessageBox.Show("Your PDF has been created!"); 
    } 

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

+0

Вы должны использовать события страницы. Но они не сложны. – mkl

+0

Можете ли вы быстро пройти меня по этому процессу? – 1Programming1

+0

Отвечает ли вам ответ Бруно? Я не знаю, как лучше объяснить это. – mkl

ответ

4

Вы создаете ваш Document как это:

Document doc = new Document(iTextSharp.text.PageSize.LEDGER, 10, 10, 42, 35); 

Это означает, что у вас есть верхний край 42 пользовательских единиц и нижний край 35 пользовательских единиц. Вы можете использовать этот запас, чтобы добавить дополнительный контент в событие страницы.

На официальном веб-сайте представлено множество примеров и исчерпывающий раздел Q &. Все примеры и ответы отмечены. Если вы нажмете на тег header, вы можете найти множество примеров.

Как уже указывалось другими в комментариях, вам необходимо создать реализацию PdfPageEvent. Самый простой способ сделать это - расширить класс PdfPageEventHelper.

class MyHeaderFooterEvent : PdfPageEventHelper { 
    Font FONT = new Font(Font.FontFamily.HELVETICA, 18, Font.BOLD); 

    public override void OnEndPage(PdfWriter writer, Document document) { 
    PdfContentByte canvas = writer.DirectContent; 
    ColumnText.ShowTextAligned(
     canvas, Element.ALIGN_LEFT, 
     new Phrase("Header", FONT), 10, 810, 0 
    ); 
    ColumnText.ShowTextAligned(
     canvas, Element.ALIGN_LEFT, 
     new Phrase("Footer", FONT), 10, 10, 0 
    ); 
    } 
} 

Важно знать:

  • запрещено добавлять содержимое в OnStartPage() случае. Добавьте свой верхний и нижний колонтитул, когда все содержимое было добавлено на страницу перед тем, как iTextSharp переместится на новую страницу. В частности: добавьте контент в событие OnEndPage().
  • Запрещается добавлять контент в объект Document, который передается событию. Этот объект может использоваться только для чтения.

Если изучить метод OnEndPage() в MyHeaderFooterEvent классе, вы видите, что мы получаем DirectContent от писателя, и мы добавим контент к этому canvas с помощью ShowTextAligned методов. Есть много других способов добавить контент, но вы явно попросили простейший способ. У этого есть свои ограничения, но это легко.

Я использовал пару жестко заданных значений: я использовал 10 как значение x для заголовка и нижнего колонтитула. Это потому, что вы определили левый край в 10 пользовательских единиц. Верхний и нижний колонтитулы выравниваются по левому краю с фактическим содержимым, которое вы добавляете на страницу. Я использовал 810 для значения y заголовка, потому что вы создаете страницу формата А4 с верхним краем 42. Верхняя координата y вашей страницы - 842. Верхняя граница верхней границы y составляет 842 - 42 = 800. Я добавил 10 пользовательских единиц, чтобы ваш заголовок не был приклеен к фактическому содержимому. Нижняя y координата страницы - 0 в вашем корпусе, а нижняя y - координата поля в 35. Я использовал 10 для базовой линии нижнего колонтитула.

Вы создали wri и сразу после создания этого примера PdfWriter вы открываете экземпляр Document. Для события страницы вступила в силу, необходимо добавить ссылку, прямо перед открытием Document:

wri.PageEvent = new MyHeaderFooterEvent(); 

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

Внимание: вы добавили //Code to add header/footer в неправильном месте. iTextSharp попытается как можно скорее сбросить содержимое страницы. Если вы добавите код для добавления заголовка/нижнего колонтитула после, вы добавили контент, вы не сможете вернуться назад, чтобы добавить верхний и нижний колонтитулы на страницы, которые уже были сброшены в выходной поток.

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