【问题标题】:How to put a table in the center of the page?如何将表格放在页面的中心?
【发布时间】:2014-11-18 15:52:55
【问题描述】:

使用 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);

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

【问题讨论】:

    标签: c# pdf-generation migradoc


    【解决方案1】:

    将表格置于部分的中心。

    table.Rows.Alignment = RowAlignment.Center;
    

    【讨论】:

    • 完全无需计算即可完美运行。
    • 完美比问题被接受了! ?
    【解决方案2】:

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

    示例:纸张尺寸为 A4(21 厘米宽),左右边距各 2.5 厘米。因此,我们有一个 16 厘米的页面正文。
    要将 12 厘米宽的表格居中,table.Rows.LeftIndent 必须设置为 2 厘米(16 厘米主体宽度减去 12 厘米表格宽度给出 4 厘米的剩余空间 - 剩余空间的一半必须设置为 LeftIndent)。
    从原始问题中的代码 sn-p 中,删除 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!");
    

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

    【讨论】:

    • 给出一个计算的例子,而不仅仅是描述
    • @PDFsharpExpert 如何使用 API 获得这些数字(纸张大小 = 21 厘米,左右边距 = 2.5 厘米)?我接受 (21-(2.5x2)-12)/2 = 4/2 = 2 的基本数学运算,但我想查看从 API 获取 21 和 2.5 的代码。谢谢。
    • @JJS 使用 MigraDoc,您只能在设置后查询这些值。如果您的代码没有设置它们,那么您知道将使用默认值(宽度 21 厘米,左右边距 2.5 厘米)。如果您的代码设置了它们,那么您可以查询它们 - 但您的代码已经知道它们而无需查询它们,因为您的代码设置了它们。我通过添加代码来解决这个问题。好处是可以在使用示例代码中的技巧时查询默认值。
    • @PDFsharpExpert 史诗。感谢您修改您的答案。关于克隆 DefaultPageSetup 的部分是一个很棒的补充。大多数人不会彻底阅读文档,因此这将有助于人们看到它。
    猜你喜欢
    • 2012-03-13
    • 2022-01-09
    • 1970-01-01
    • 2021-02-15
    • 2015-03-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 2020-07-12
    相关资源
    最近更新 更多