2015-04-22 2 views
0

Я пытаюсь создать pdf-файл при нажатии кнопки. У меня возникли проблемы с дизайном страницы. Если кто-то может помочь, как разместить текст в определенном положении.позиционирование текста с использованием itextSharp в C3

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

Вот код, я работаю над:

private void pdf_btn_Click(object sender, EventArgs e) 
{ 
    SaveFileDialog svg = new SaveFileDialog(); 
    svg.ShowDialog(); 
    using (FileStream stream = new FileStream(svg.FileName + ".pdf", FileMode.Create)) 
    { 
     // Create a Document object 
     var document = new Document(PageSize.A4, 50, 50, 25, 25); 
     // Create a new PdfWrite object, writing the output to a MemoryStream 
     // var output = new MemoryStream(); 
     var writer = PdfWriter.GetInstance(document, stream);    
     document.Open(); 
     // First, create our fonts... (For more on working w/fonts in iTextSharp, see: http://www.mikesdotnetting.com/Article/81/iTextSharp-Working-with-Fonts 
     var titleFont = FontFactory.GetFont("Arial", 18, Convert.ToInt32(Font.Bold)); 
     var AddressFont = FontFactory.GetFont("Arial", 7, Convert.ToInt32(Font.Bold)); 
     var boldTableFont = FontFactory.GetFont("Arial", 12, Convert.ToInt32(Font.Bold)); 
     var endingMessageFont = FontFactory.GetFont("Arial", 10, Convert.ToInt32(Font.Italic)); 
     var bodyFont = FontFactory.GetFont("Arial", 12); 
     // Add the "" title 
     document.Add(new Paragraph("Certificate of Analysis", titleFont)); 
     // Add Address 
     var text = document.Add(new Paragraph("Abc Company", AddressFont)); 
     document.Add(new Paragraph("Tel:(xx) xxx-xxxx, (xxx) xxx-xxx", AddressFont)); 
     document.Add(new Paragraph("Fax: (xxx) xxx-xxx, , AddressFont)); 
     document.Close(); 
     stream.Close(); 
    }    
} 

ответ

0

Существуют различные способы, чтобы достичь того, что вы хотите.

В настоящее время вы указываете iText, чтобы сделать макет. Если вы хотите, чтобы центрировать текст "Certificate of Analysis", то вы можете изменить выравнивание Paragraph, как это:

Paragraph header = new Paragraph("Certificate of Analysis", titleFont); 
header.Alignment = Element.ALIGN_CENTER; 
document.Add(header); 

Если вы хотите, чтобы текст "Abc Company" быть выровнен по правому краю, вы можете изменить он выравнивание, как это:

Paragraph company = new Paragraph("Abc Company", AddressFont); 
company.Alignment = Element.ALIGN_RIGHT; 
document.Add(company); 

Конечно: когда мы добавим company, оно начнется с новой строки под header. Возможно, вы хотите, чтобы текст находился на одной линии.

В таком случае, почему бы не использовать PdfPTable?

PdfPTable myTable = new PdfPTable(3); 
myTable.WidthPercentage = 100; 
PdfPCell mydate = new PdfPCell(new Phrase("April 22, 2015", myfont)); 
mydate.Border = Rectangle.NO_BORDER; 
myTable.AddCell(mydate); 
PdfPCell header = new PdfPCell(new Phrase("Certificate of Analysis", titleFont)); 
header.Border = Rectangle.NO_BORDER; 
header.HorizontalAlignment = Element.ALIGN_CENTER; 
myTable.AddCell(header); 
PdfPCell address = new PdfPCell(new Phrase("Company Address", AddressFont)); 
address.Border = Rectangle.NO_BORDER; 
address.HorizontalAlignment = Element.ALIGN_RIGHT; 
myTable.AddCell(address); 
doc.Add(myTable); 

Теперь, когда имеющаяся ширина вашей страницы будет разделена на три, дата будет выровнена по левому краю, то заголовок будет в центре, а также адрес будет выровнен вправо. Очевидно, вы можете добавить больше данных в PdfPCell и больше строк на PdfPTable. Это просто доказательство концепции.

Другим вариантом является добавление текста в абсолютное положение (с использованием координат). Это можно сделать, используя объект ColumnText. На этом примере есть много примеров: The Best iText Questions on StackOverflow

+0

Спасибо, что дал мне направление Бруно. Это очень помогает. –

+0

Это только начало. Если вы заходите на 'PdfPTable', вы, вероятно, также захотите определить разные размеры для столбцов, добавив больше, чем просто текст (поиск * текстового режима * vs * композитный режим *) и т. Д. Документация поможет вам, а если нет, не стесняйтесь публиковать еще один вопрос. –