2012-01-12 1 views
0

У меня есть три статических метода PdfPTable, которые вызывается из основного метода, используемого для создания PDF-документа.Проблемы с созданием заголовка в itextsharp с многократными вызовами в таблицу

В каждом методе я использую PdfPCells для добавления данных и структуры в таблицы, поэтому первым методом PdfPTable будет создание заголовка для каждой страницы, вторая - для создания тела этой страницы, а третья - создайте нижний колонтитул для каждой страницы. Затем таблица добавляется в PdfPDocument после их вызова в основном методе

Я попытался использовать table.HeaderRows = 1, чтобы добавить заголовок на каждую страницу, но когда он добавлен в метод PdfPTable для заголовка, он удаляет все в этой таблице. Когда я добавляю его в PdfPTable для тела, он перемещает содержимое на вторую страницу в нижней части первой страницы и копирует содержимое первой страницы во вторую.

//table method for call header 
PdfPTable table = CreateTable(textUpperData/*, document, writer*/); 
document.Add(table); 

//table method call for body 
table = CreateTable1(imgInfoData, posData, sizeData, document); 
document.Add(table); 

//table method call for footer 
table = CreateTable2(textLowerData); 
document.Add(table); 

document.Close(); 



//header table static method     
    private static PdfPTable CreateTable(List<KeyValuePair<string, string>> textUpper/*, Document document, PdfWriter writer*/) 
    { 
     //SiteDB sitedb = new SiteDB(); 
     //sitedb.GetEmailText(); 

     iTextSharp.text.Font headerFont = FontFactory.GetFont("Time New Roman", 14, iTextSharp.text.Font.BOLD, BaseColor.BLACK); 
     iTextSharp.text.Font bodyFont = FontFactory.GetFont("Time New Roman", 10, iTextSharp.text.Font.NORMAL, BaseColor.BLACK); 

     PdfPTable table = new PdfPTable(3); 
     table.HorizontalAlignment = Element.ALIGN_CENTER; 
     table.WidthPercentage = 100; 
     table.TotalWidth = 597.6f; 
     table.LockedWidth = true; 
     table.SetWidths(new float[] { 1, 2, 1 }); 

     iTextSharp.text.Image logo = iTextSharp.text.Image.GetInstance("C:\\Users\\User\\Documents\\Images\\image0.tiff"); 
     logo.ScaleToFit(150, 235); 
     logo.SetAbsolutePosition(595.2f - 150f, 0); 


     PdfPCell logoCell = new PdfPCell(logo); 
     logoCell.HorizontalAlignment = Element.ALIGN_JUSTIFIED; 
     logoCell.Border = iTextSharp.text.Rectangle.NO_BORDER; 
     table.AddCell(logoCell); 

     Chunk logoChunk = new Chunk(System.Environment.NewLine); 
     Phrase logoPhrase = new Phrase(logoChunk); 

     //Chunk headerChunk = new Chunk(sitedb.header_lit.ToString() + System.Environment.NewLine, headerFont); 
     //Phrase headerPhrase = new Phrase(headerChunk); 
     Chunk headerChunk = new Chunk(textUpper[0].Key.ToString() + System.Environment.NewLine, headerFont); 
     Phrase headerPhrase = new Phrase(headerChunk); 

     //Chunk bodyChunk = new Chunk(sitedb.body_lit.ToString() + System.Environment.NewLine, bodyFont); 
     //Phrase bodyPhrase = new Phrase(bodyChunk); 
     Chunk bodyChunk = new Chunk(textUpper[0].Value.ToString() + System.Environment.NewLine, bodyFont); 
     Phrase bodyPhrase = new Phrase(bodyChunk); 


     Paragraph paragraph = new Paragraph(); 
     paragraph.Alignment = Element.ALIGN_MIDDLE; 
     paragraph.Alignment = Element.ALIGN_TOP; 
     paragraph.Add(headerPhrase); 
     paragraph.Add(bodyPhrase); 


     PdfPCell headerBodyCell = new PdfPCell(paragraph); 
     headerBodyCell.HorizontalAlignment = Element.ALIGN_JUSTIFIED; 
     headerBodyCell.VerticalAlignment = Element.ALIGN_TOP; 
     headerBodyCell.Colspan = 2; 
     headerBodyCell.PaddingLeft = 5f; 
     headerBodyCell.PaddingRight = 5f; 
     headerBodyCell.PaddingTop = 8f; 
     headerBodyCell.Border = iTextSharp.text.Rectangle.NO_BORDER; 
     table.AddCell(headerBodyCell); 

     return table; 
    } 

ответ

0

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

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

+0

Какие типы заголовков вы пытаетесь отобразить: [1] ** page **; общие для каждой страницы документа, или [2] ** таблица **; уникально для таблицы и отображается, когда содержимое таблицы охватывает более одной страницы. – kuujinbo

+0

Я пытаюсь отобразить заголовки страниц, я понимаю, что вышеприведенный пост содержит сведения – DaNet

+1

Вы должны использовать [PdfPageEventHelper] (http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfPageEventHelper.html). Вот некоторые [пример кода] (http://kuujinbo.info/cs/itext_img_hdr.aspx). – kuujinbo