Posicionar uma tabela

Existem mesas flutuantes e Mesas embutidas:

  • Inline tables são colocados na mesma camada que o texto e são colocados em um fluxo de texto que envolve apenas a tabela acima e abaixo. As tabelas em linha aparecerão sempre entre os parágrafos onde as colocou.
  • Floating tables estão em camadas sobre o texto e a posição da tabela em relação ao parágrafo é determinada pela âncora da tabela. Devido a isso, a posição da mesa flutuante no documento é afetada pelas configurações de posicionamento vertical e horizontal.

Às vezes, você precisa posicionar uma tabela em um documento de uma determinada maneira. Para fazer isso, você precisa usar as ferramentas de alinhamento e definir os recuos entre a tabela e o texto circundante.

Neste artigo, discutiremos quais opções Aspose.Words fornecem para o posicionamento.

Especificar A Posição Da Tabela Em Linha

Você pode definir a posição de uma tabela embutida usando as propriedades Aspose.Words API e Alignment. Assim, você pode ajustar o alinhamento da tabela em relação à página do documento.

O exemplo de código a seguir mostra como definir a posição de uma tabela embutida:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
// Align the table to the center of the page.
table->set_Alignment(TableAlignment::Center);

Obter Alinhamento Da Mesa Flutuante

Se a quebra de texto da tabela estiver definida como Around, pode obter o alinhamento horizontal e vertical da tabela utilizando as propriedades RelativeHorizontalAlignment e RelativeVerticalAlignment.

Com other types of text wrapping, você pode obter o alinhamento da tabela embutida usando a propriedade Alignment.

O exemplo de código a seguir mostra como obter o alinhamento da tabela:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
if (table->get_TextWrapping() == TextWrapping::Around)
{
std::cout << System::EnumGetName(table->get_RelativeHorizontalAlignment()) << std::endl;
std::cout << System::EnumGetName(table->get_RelativeVerticalAlignment()) << std::endl;
}
else
{
std::cout << System::EnumGetName(table->get_Alignment()) << std::endl;
}

Obter Posição Da Mesa Flutuante

A posição de uma mesa flutuante é determinada utilizando as seguintes propriedades:

O exemplo de código a seguir mostra como obter a posição de uma tabela flutuante:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Table wrapped by text.docx");
for (const auto& table : System::IterateOver<Table>(doc->get_FirstSection()->get_Body()->get_Tables()))
{
// If the table is floating type, then print its positioning properties.
if (table->get_TextWrapping() == TextWrapping::Around)
{
std::cout << System::EnumGetName(table->get_HorizontalAnchor()) << std::endl;
std::cout << System::EnumGetName(table->get_VerticalAnchor()) << std::endl;
std::cout << table->get_AbsoluteHorizontalDistance() << std::endl;
std::cout << table->get_AbsoluteVerticalDistance() << std::endl;
std::cout << System::Convert::ToString(table->get_AllowOverlap()) << std::endl;
std::cout << table->get_AbsoluteHorizontalDistance() << std::endl;
std::cout << System::EnumGetName(table->get_RelativeVerticalAlignment()) << std::endl;
std::cout << ".............................." << std::endl;
}
}

Definir A Posição Da Mesa Flutuante

Assim como obter, você pode definir a posição de uma tabela flutuante usando o mesmo Aspose.Words API.

É importante saber que o alinhamento e a distância horizontal e vertical são propriedades combinadas e uma pode repor a outra. Por exemplo, definir RelativeHorizontalAlignment redefinirá o AbsoluteHorizontalDistance para seu valor padrão e vice-versa. O mesmo se aplica à disposição vertical.

O exemplo de código a seguir mostra como definir a posição de uma tabela flutuante:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Table wrapped by text.docx");
SharedPtr<Table> table = doc->get_FirstSection()->get_Body()->get_Tables()->idx_get(0);
table->set_AbsoluteHorizontalDistance(10);
table->set_RelativeVerticalAlignment(VerticalAlignment::Center);
doc->Save(ArtifactsDir + u"WorkingWithTables.FloatingTablePosition.docx");

Obter distância entre a tabela e o texto circundante

Aspose.Words também oferece uma oportunidade para descobrir as distâncias entre as tabelas e os textos circundantes:

O exemplo de código a seguir mostra como obter a distância entre uma tabela e seu texto ao redor:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
std::cout << "\nGet distance between table left, right, bottom, top and the surrounding text." << std::endl;
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
std::cout << table->get_DistanceTop() << std::endl;
std::cout << table->get_DistanceBottom() << std::endl;
std::cout << table->get_DistanceRight() << std::endl;
std::cout << table->get_DistanceLeft() << std::endl;