У меня есть три статических метода 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;
}
Какие типы заголовков вы пытаетесь отобразить: [1] ** page **; общие для каждой страницы документа, или [2] ** таблица **; уникально для таблицы и отображается, когда содержимое таблицы охватывает более одной страницы. – kuujinbo
Я пытаюсь отобразить заголовки страниц, я понимаю, что вышеприведенный пост содержит сведения – DaNet
Вы должны использовать [PdfPageEventHelper] (http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfPageEventHelper.html). Вот некоторые [пример кода] (http://kuujinbo.info/cs/itext_img_hdr.aspx). – kuujinbo