Aspose - Проблема с автоматическим изменением размера таблицы, по размеру страницы - PullRequest
0 голосов
/ 27 мая 2020

Мы столкнулись с проблемой изменения размера таблицы в нашем проекте.

Библиотека - aspose.words

Проблема: мы используем aspose для создания PDF-документа, в нашем PDF-файле есть несколько таблицы. В настоящее время, если таблица слишком велика для размещения на странице, она уйдет за пределы страницы. Мы хотим реализовать автоматическое c масштабирование для этих таблиц, автоматическое c масштабирование таким образом, чтобы, если таблица слишком велика, она могла автоматически регулировать ширину и шрифт внутри таблицы так, чтобы он всегда помещался на странице.

Также во время исследования я обнаружил одно свойство Autofit, но оно бесполезно для моего сценария, потому что оно не меняет размер шрифта.

1 Ответ

1 голос
/ 28 мая 2020

Думаю, в вашем случае вы можете попробовать использовать метод 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");

Вот как выглядит таблица без обновления ее содержимого enter image description here После обновления размера шрифта он выглядит так enter image description here

Надеюсь, это поможет.

Раскрытие информации: я работаю в команде Aspose.Words.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...