Думаю, в вашем случае вы можете попробовать использовать метод Document.Updatetablelayout , чтобы вычислить фактическую ширину таблицы, а затем проверить, соответствует ли таблица странице. В следующем примере я создал простую таблицу, которая выходит за границы страницы, а затем обновил таблицу, чтобы она соответствовала странице. В примере используется упрощенный метод масштабирования размера шрифта, для этого лучше использовать DocumentVisitor .
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Build a simple table that exits page bounds.
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 20; j++)
{
builder.InsertCell();
builder.Write("Test");
}
builder.EndRow();
}
Table t = builder.EndTable();
// If you check width of cells in the created table before calling this method, width will be zero,
// this means auto-width. After calling this method width of cells is updated and it is possible to calculate actual table width.
doc.UpdateTableLayout();
// Calculate width of the table.
double tableWidth = 0;
foreach (Cell c in t.FirstRow.Cells)
tableWidth += c.CellFormat.Width;
Section tableParentSection = (Section)t.GetAncestor(NodeType.Section);
if (tableWidth > tableParentSection.PageSetup.ContentWidth)
{
double fontRatio = tableParentSection.PageSetup.ContentWidth / tableWidth;
// Change font in the table.
// Note: this is rood mothod to change font size only for demonstration purposes.
// I would recommend you to use DocumentVisitor to change font size.
NodeCollection paragraphs = t.GetChildNodes(NodeType.Paragraph, true);
foreach (Paragraph p in paragraphs)
{
p.ParagraphBreakFont.Size *= fontRatio;
foreach (Run r in p.Runs)
r.Font.Size *= fontRatio;
}
}
doc.Save(@"C:\Temp\out.pdf");
Вот как выглядит таблица без обновления ее содержимого После обновления размера шрифта он выглядит так
Надеюсь, это поможет.
Раскрытие информации: я работаю в команде Aspose.Words.