2013-05-27 62 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)提出了,但我不能夠做同樣的我的表。我不明白它是如何工作的。

編輯:部分解決方案:

一個艱苦的工作,以瞭解它是如何工作後,我的代碼部分工作。部分是因爲我發現正確對齊的唯一方法是創建一個具有近似值的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毫米爲我工作)。它可以在沒有Style的情況下完成(如我的示例代碼所示),但如果它在文檔中多次出現,則推薦使用樣式。 –

2

在單行中,你可以「正確」的行高與SpaceAfter屬性等於字號的負值。

樣品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。恕我直言,恕我直言。 –