В современно развитой информационной экосистеме работа с документами занимает важное место. Особенно актуальной является необходимость редактирования таблиц, содержащих текст с направлением справа налево (RTL). В этом контексте мы рассмотрим, как программно работать с такими таблицами, используя C# и .NET, а также библиотеку SautinSoft.Document. Эта статья поможет понять преимущества выбранного подхода, практическую пользу и области применения.
Большинство современных приложений предполагают работу с многоязычными текстами, среди которых значительную часть составляют языки с направлением справа налево — арабский, иврит, персидский, урду и другие. В финальных документах, отчетах, презентациях или шаблонах встречаются таблицы, содержащие такие языки. Ручное редактирование или автоматически выполненное программное изменение таблиц с RTL-текстом без правильной настройки может привести к некорректному отображению, нарушению структуры или читаемости документа. Поэтому важно использовать инструменты, которые учитывают специфику этих языков, помимо простого изменения текста.
На практике сценарии использования разнообразны:
Практическая польза описанного подхода огромна. Код позволяет автоматизировать обработку многоязычных документов, сохранять их структурированность и читаемость при различном формате, масштабировать работу с большими объемами данных. Будучи частью автоматизированной системы, подобный код повышает скорость обработки документов, снижая вероятность ошибок, связанных с ручной редактурой. Он особенно актуален для международных проектов, где необходимо генерировать и редактировать однородные многоязычные таблицы в документах.
Полный код
using SautinSoft.Document;
using SautinSoft.Document.Tables;
using System;
using System.IO;
using System.Linq;
using System.Reflection.Metadata;
namespace Sample
{
class Sample
{
static void Main(string[] args)
{
// Get your free trial key here:
// https://sautinsoft.com/start-for-free/
RTLTable();
}
/// <summary>
/// How to add Rigth-to-Left text in a table.
/// </summary>
/// <remarks>
/// Details: https://sautinsoft.com/products/document/help/net/developer-guide/right-to-left-table.php
/// </remarks>
public static void RTLTable()
{
string sourcePath = @"..\..\..\RTL.docx";
string destPath = "RTL.pdf";
DocumentCore dc = DocumentCore.Load(sourcePath);
// Show line numbers on the right side of the page
var pageSetup = dc.Sections[0].PageSetup;
pageSetup.LineNumberRestartSetting = LineNumberRestartSetting.Continuous;
// Create a new right-to-left paragraph
var paragraph = new Paragraph(dc);
paragraph.ParagraphFormat.RightToLeft = true;
paragraph.Inlines.Add(new Run(dc, "أخذ عن موالية الإمتعاض"));
dc.Sections[0].Blocks.Add(paragraph);
// Create a right-to-left table with some data inside.
var table = new Table(dc);
table.TableFormat.PreferredWidth = new TableWidth(100, TableWidthUnit.Percentage);
var row = new TableRow(dc);
table.TableFormat.Borders.SetBorders(MultipleBorderTypes.Inside | MultipleBorderTypes.Outside, BorderStyle.Single, Color.Black, 1);
table.Rows.Add(row);
var firstCellPara = new Paragraph(dc, "של תיבת תרומה מלא");
firstCellPara.ParagraphFormat.RightToLeft = true;
row.Cells.Add(new TableCell(dc, firstCellPara));
var secondCellPara = new Paragraph(dc, "200");
row.Cells.Add(new TableCell(dc, secondCellPara));
dc.Sections[0].Blocks.Add(table);
// Save the document as PDF.
dc.Save(destPath, new PdfSaveOptions());
// Show the source and the dest documents.
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(sourcePath) { UseShellExecute = true });
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(destPath) { UseShellExecute = true });
}
}
}Option Infer On
Imports SautinSoft.Document
Imports SautinSoft.Document.Tables
Imports System
Imports System.IO
Imports System.Linq
Imports System.Reflection.Metadata
Namespace Sample
Friend Class Sample
Shared Sub Main(ByVal args() As String)
' Get your free trial key here:
' https://sautinsoft.com/start-for-free/
RTLTable()
End Sub
''' <summary>
''' How to add Rigth-to-Left text in a table.
''' </summary>
''' <remarks>
''' Details: https://sautinsoft.com/products/document/help/net/developer-guide/right-to-left-table.php
''' </remarks>
Public Shared Sub RTLTable()
Dim sourcePath As String = "..\..\..\RTL.docx"
Dim destPath As String = "RTL.pdf"
Dim dc As DocumentCore = DocumentCore.Load(sourcePath)
' Show line numbers on the right side of the page
Dim pageSetup = dc.Sections(0).PageSetup
pageSetup.LineNumberRestartSetting = LineNumberRestartSetting.Continuous
' Create a new right-to-left paragraph
Dim paragraph As New Paragraph(dc)
paragraph.ParagraphFormat.RightToLeft = True
paragraph.Inlines.Add(New Run(dc, "أخذ عن موالية الإمتعاض"))
dc.Sections(0).Blocks.Add(paragraph)
' Create a right-to-left table with some data inside.
Dim table As New Table(dc)
table.TableFormat.PreferredWidth = New TableWidth(100, TableWidthUnit.Percentage)
Dim row = New TableRow(dc)
table.TableFormat.Borders.SetBorders(MultipleBorderTypes.Inside Or MultipleBorderTypes.Outside, BorderStyle.Single, Color.Black, 1)
table.Rows.Add(row)
Dim firstCellPara = New Paragraph(dc, "של תיבת תרומה מלא")
firstCellPara.ParagraphFormat.RightToLeft = True
row.Cells.Add(New TableCell(dc, firstCellPara))
Dim secondCellPara = New Paragraph(dc, "200")
row.Cells.Add(New TableCell(dc, secondCellPara))
dc.Sections(0).Blocks.Add(table)
' Save the document as PDF.
dc.Save(destPath, New PdfSaveOptions())
' Show the source and the dest documents.
System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(sourcePath) With {.UseShellExecute = True})
System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(destPath) With {.UseShellExecute = True})
End Sub
End Class
End Namespace
Если вам нужен пример кода или у вас есть вопрос: напишите нам по адресу support@sautinsoft.ru или спросите в онлайн-чате (правый нижний угол этой страницы) или используйте форму ниже: