如何将表放在页面的中心?

Mar*_*ina 3 c# pdf-generation migradoc

使用MigraDoc我试图在页面的中心放一张桌子.我正在使用此代码(c#,VS).

Section secondPage = new Section(); 
Table table = new Table();
AddColumns(table);
AddFirstRow(table);
AddSecondRow(table);
table.Format.Alignment=ParagraphAlignment.Center;
secondPage.Add(table);
Run Code Online (Sandbox Code Playgroud)

我得到一个与页面右侧对齐的表格; 如何在页面中心获取表格?

Jas*_*noy 11

将一个表格置于一个区域的中心.

table.Rows.Alignment = RowAlignment.Center;
Run Code Online (Sandbox Code Playgroud)

  • 无需任何计算即可完美运行。 (5认同)
  • 比问题被接受更完美! (2认同)

Je *_*not 6

您可以设置table.Rows.LeftIndent来缩进表.要获得居中的表格,请根据纸张大小,页边距和表格宽度计算缩进.

示例:纸张尺寸为A4(21厘米宽),左右边距各为2.5厘米.因此,我们有一个16厘米的页面.
要使12厘米宽的桌子居中,table.Rows.LeftIndent必须设置为2厘米(16厘米的主体宽度减去12厘米的桌子宽度,留出4厘米的剩余空间 - 剩余空间的一半必须设置为LeftIndent).
从原始问题的代码段中删除table.Format.Alignment=ParagraphAlignment.Center;并替换它table.Rows.LeftIndent="2cm";.

请注意,如果表格略宽于正文,但仍在页面边缘内,这也可以使用.使用上一个示例中的页面设置,一个18厘米宽的表可以使用-1厘米的LeftIndent居中.

示例代码(该表只有一列):

var doc = new Document();
var sec = doc.AddSection();

// Magic: To read the default values for LeftMargin, RightMargin &c. 
// assign a clone of DefaultPageSetup.
// Do not assign DefaultPageSetup directly, never modify DefaultPageSetup.
sec.PageSetup = doc.DefaultPageSetup.Clone();

var table = sec.AddTable();
// For simplicity, a single column is used here. Column width == table width.
var tableWidth = Unit.FromCentimeter(8);
table.AddColumn(tableWidth);
var leftIndentToCenterTable = (sec.PageSetup.PageWidth.Centimeter - 
                               sec.PageSetup.LeftMargin.Centimeter - 
                               sec.PageSetup.RightMargin.Centimeter -
                               tableWidth.Centimeter) / 2;
table.Rows.LeftIndent = Unit.FromCentimeter(leftIndentToCenterTable);
table.Borders.Width = 0.5;
var row = table.AddRow();
row.Cells[0].AddParagraph("Hello, World!");
Run Code Online (Sandbox Code Playgroud)

示例代码使用厘米进行计算.您还可以使用英寸,毫米,皮卡或点.默认页面大小为A4,在样本中,LeftIndent为4厘米.