2013-05-27 3 views
4

У меня есть таблица с ячейкой, где я хочу два текста, первый, выровненный по левому краю, а второй выровненный по правому краю в той же ячейке на той же линии.MigraDoc C# Выровнять влево и вправо на той же линии

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

Вот мой код:

Cell cellFooter1 = rowFooter.Cells[0]; 
Paragraph paraphTot = new Paragraph(); 
paraphTot.Format.Alignment = ParagraphAlignment.Left; 
paraphTot.AddText("Left text"); 
cellFooter1.Add(paraphTot); 
Paragraph paraphDetails = new Paragraph(); 
paraphDetails.Format.Alignment = ParagraphAlignment.Right; 
paraphDetails.AddText("Right text"); 
cellFooter1.Add(paraphDetails); 

Раствор здесь (http://forum.pdfsharp.net/viewtopic.php?f=2&t=2373) представил, но я не в состоянии сделать то же самое с моим столом. Я не понимаю, как это работает.

Edit: Частичное решение:

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

Table table = new Table(); 
table.Borders.Width = 0.75; 
Column myColumn = table.AddColumn(Unit.FromCentimeter(7)); 
Row myRow = table.AddRow(); 
Cell myCell = myRow.Cells[0]; 
Paragraph myParagraph = new Paragraph(); 
Style myStyle = doc.AddStyle("myStyle", "Normal"); 
myStyle.ParagraphFormat.Font.Size = 6.5; 
myStyle.ParagraphFormat.Font.Bold = true; 
myStyle.ParagraphFormat.TabStops.Clear(); 
myStyle.ParagraphFormat.AddTabStop(Unit.FromMillimeter(67), TabAlignment.Right); 
myParagraph.Style = "myStyle"; 
myParagraph.Format.Alignment = ParagraphAlignment.Left; 
myParagraph.AddFormattedText("left", "myStyle"); 
myParagraph.AddTab(); 
myParagraph.AddFormattedText("right", "myStyle"); 
myCell.Add(myParagraph); 

Это работает, но как найти хорошее значение для функции AddTab? Я положил потому что 68to70 не работает.

ответ

7

Уловка, показанная в связанном сообщении, довольно проста: вам нужен только один абзац, выровненный по левому краю.

Затем убедитесь, что имеется только один tabstop, выровненный по правому краю табло на правом краю ячейки.

В абзац добавьте текст, который вы хотите выровнять по левому краю, затем добавьте tabstop, а затем добавьте текст, который вы хотите выровнять по правому краю.

Пример кода:

var table = section.AddTable(); 
table.AddColumn("8cm"); 
table.AddColumn("8cm"); 

var row = table.AddRow(); 
var paragraph = row.Cells[0].AddParagraph("Left text"); 
paragraph.AddTab(); 
paragraph.AddText("Right text"); 
paragraph.Format.ClearAll(); 
// TabStop at column width minus inner margins and borders: 
paragraph.Format.AddTabStop("7.7cm", TabAlignment.Right); 
row.Cells[1].AddParagraph("Second column"); 
table.Borders.Width = 1; 
+0

Спасибо за пояснения. Я буду тестировать его завтра на работе, но, вот так, я не понимаю, как это сделать. Другие новости завтра. –

+0

Найдите частичное решение, см. Мое редактирование. –

+0

Просто добавленный образец кода. Столбец правой вкладки должен учитывать внутренние поля и границы ячейки таблицы. В настоящее время у меня нет лучшей идеи, кроме проб и ошибок для этого (3 мм работали для меня). Это можно сделать без стиля (как показывает мой пример кода), но если это происходит более одного раза в вашем документе, рекомендуется использовать стили. –

2

На одной строке можно «правильно» высота строки со свойством SpaceAfter равным отрицательному значению FontSize.

Образец RightAlignedTitle стиль:

// Define style: RightAlignedTitle 
    style = document.Styles.AddStyle(Styles.RightAlignedTitle, StyleNames.Normal); 
    style.Font.Size = new Unit(18, UnitType.Point); 
    style.ParagraphFormat.Alignment = ParagraphAlignment.Right; 
    style.ParagraphFormat.SpaceAfter = new Unit(-18, UnitType.Point); 

Пример кода:

// First right aligned paragraph 
    p = section.AddParagraph(); 
    p.Style = Styles.RightAlignedTitle; 
    p.AddText("Right aligned text"); 

    // Second left aligned paragraph 
    p = section.AddParagraph(); 
    p.Format.Alignment = ParagraphAlignment.Left; 
    p.AddText("Left aligned text"); 
-1
private void **PDF_DrawTextRight**(string text, PdfPage page, XGraphics gfx, XFont font, double x, double y, double x2, double y2) 
    { 
     var m = gfx.MeasureString(text, font); 

     // Draw the text 
     gfx.DrawString(text, font, XBrushes.Black, 
      new XRect(x+x2-m.Width, y, x2, y2), 
      XStringFormats.TopLeft); 
    } 

Это еще один способ ... Используется в приложении счета-фактуры, где числа выровнены по правому краю, и описание товара выравнивание по левому краю.

+0

Вопрос о MigraDoc, ваш ответ использует PDFsharp. Не полезно ИМХО. –

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