2017-01-04 6 views
0

У меня есть 2 кода. Первый работает, второй - внутри цикла, и он не отображает значение.iTextSharp не работает в цикле

У кого-нибудь есть идеи? Может быть, это слишком быстрый цикл для чтения memorystream?

Я пишу все до memorystream и ответ, чтобы загрузить файл. Если я делаю это один за другим, как показано ниже, все работает нормально.

 var phraseinvoice = new Phrase(); 
     phraseinvoice.Add(new Chunk("Invoice to:", FontFactory.GetFont(FontFactory.TIMES, 12)));    

     Invoicetable.AddCell(phraseinvoice); 
     phraseinvoice = new Phrase(); 
     phraseinvoice.Add(new Chunk("BCD Meetings & Events Asia Pacific", FontFactory.GetFont(FontFactory.TIMES_BOLD, 12))); 
     PdfPCell inheader = new PdfPCell(phraseinvoice); 
     inheader.PaddingBottom = 4; 
     inheader.Border = Rectangle.NO_BORDER; 
     inheader.FixedHeight=20f; 
     Invoicetable.AddCell(inheader); 

Если я поместил их внутри массива и прочитал из цикла цикла, в PDF-формате не будет отображаться текст.

string[] tbText = {" ","Pte.Ltd"," ", "20 Anson Road, #06-01"," ", "Twenty Anson 079912","", 
       "Singapore"," "," ","Tel", "1234567", "Fax","123"," "," ","Delivery to:", "BCD Meetings & Events Asia Pacific"," ", 
      "Pte,Ltd"," ","20 Anson Road, #06-01"," ", "Twenty Anson 079912"," ","Singapore"}; 

    Invoicetable.AddCell(inheader); 
    for (int i = 0; i < 25; i++) 
    { 
     var inputstring = tbText[i]; 
     phraseinvoice = new Phrase(); 
     phraseinvoice.Add(new Chunk(inputstring, FontFactory.GetFont(FontFactory.TIMES_BOLD, 12))); 
     PdfPCell cellbox = new PdfPCell(phraseinvoice); 
     cellbox = new PdfPCell(phraseinvoice); 
     cellbox.Border = Rectangle.NO_BORDER; 
     cellbox.Padding= -4; 
     Invoicetable.AddCell(cellbox); 
    } 

Вы можете увидеть различие между первым изображением после -4 отступов и второго изображения без дополнения before padding

after padding

+0

какая ошибка вы получаете? – vipin

+0

Нет ошибки. Просто пустой output.if я использую loop.If я жесткий код, используя тот же код. он будет работать –

+0

может быть, что вы получаете ячейки друг на друга? – Reniuz

ответ

2

Вы создаете Phrase с текстом в 12pt шрифта, но вы ограничивая высоту ячейки до 10pt. Это объясняет, почему ничего не показано.

Изменить код так:

for (int i = 0; i < 25; i++) 
{ 
    var inputstring = tbText[i]; 
    phraseinvoice = new Phrase(inputstring, 
     FontFactory.GetFont(FontFactory.TIMES_BOLD, 12))); 
    PdfPCell cellbox = new PdfPCell(phraseinvoice); 
    cellbox.Border = Rectangle.NO_BORDER; 
    cellbox.FixedHeight = 20f; 
    Invoicetable.AddCell(cellbox); 
} 

20 пользовательских единиц должно быть достаточно, чтобы показать текст в 12pt шрифт.

Update:

Другим вариантом было бы уменьшить размер шрифта, например:

for (int i = 0; i < 25; i++) 
{ 
    var inputstring = tbText[i]; 
    phraseinvoice = new Phrase(inputstring, 
     FontFactory.GetFont(FontFactory.TIMES_BOLD, 8))); 
    PdfPCell cellbox = new PdfPCell(phraseinvoice); 
    cellbox.Border = Rectangle.NO_BORDER; 
    cellbox.FixedHeight = 15f; 
    Invoicetable.AddCell(cellbox); 
} 

Но есть больше: высота, необходимый Phrase в PdfPCell зависит от:

  • Размер шрифта,
  • l eading,
  • Подъемник и спусковой механизм шрифта.

Например:

for (int i = 0; i < 25; i++) 
{ 
    var inputstring = tbText[i]; 
    phraseinvoice = new Phrase(inputstring, 
     FontFactory.GetFont(FontFactory.TIMES_BOLD, 12))); 
    PdfPCell cellbox = new PdfPCell(phraseinvoice); 
    cellbox.Leading = 14; 
    cellbox.UseAscender = true; 
    cellbox.UseDescender = true; 
    cellbox.Border = Rectangle.NO_BORDER; 
    cellbox.FixedHeight = 18f; 
    Invoicetable.AddCell(cellbox); 
} 

Обратите внимание, как мы уменьшили Leading от значения по умолчанию (в 1,5 раза больше размера шрифта) для 14, и как мы сказали cellBox взять зажим и спусковое.

+0

HI, вы правы. Если высота слишком мала. текст не будет отображаться. Набор из 10-18 всех не отображается. 20f - это минимиз, который я предполагаю. и 20 слишком большой для меня. я думаю, мне нужно жестко кодировать каждое предложение для оси Y. –

0

Похоже, вы пытаетесь добавить строку как pdfpcell

вар inputstring = tbText [я];

Invoicetable.AddCell (inputstring);

tbText - это строковый массив

+0

tbText - это массив, а tbText [index] - элемент массива. – Reniuz

+0

Есть ли конкретная причина для этого цикла? Если текст исправлен, вы можете использовать элемент абзаца с несколькими новыми строками (\ n) – user7373379

+0

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

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