Как конвертировать документы с содержимым справо-налево на C# и .NET

В современно развитой информационной экосистеме работа с документами занимает важное место. Особенно актуальной является необходимость редактирования таблиц, содержащих текст с направлением справа налево (RTL). В этом контексте мы рассмотрим, как программно работать с такими таблицами, используя C# и .NET, а также библиотеку SautinSoft.Document. Эта статья поможет понять преимущества выбранного подхода, практическую пользу и области применения.

Большинство современных приложений предполагают работу с многоязычными текстами, среди которых значительную часть составляют языки с направлением справа налево — арабский, иврит, персидский, урду и другие. В финальных документах, отчетах, презентациях или шаблонах встречаются таблицы, содержащие такие языки. Ручное редактирование или автоматически выполненное программное изменение таблиц с RTL-текстом без правильной настройки может привести к некорректному отображению, нарушению структуры или читаемости документа. Поэтому важно использовать инструменты, которые учитывают специфику этих языков, помимо простого изменения текста.

На практике сценарии использования разнообразны:

  • Автоматизация формирования отчетов для международных компаний, использующих арабский или иврит.
  • Создание многоязычных шаблонов документов с таблицами, где нужно динамически заполнять или обновлять содержимое.
  • Обработка клиентских данных и генерация документов с многоязычным интерфейсом.
  • Интеграция в системы электронного документооборота, требующие автоматического редактирования и форматирования.

Практическая польза описанного подхода огромна. Код позволяет автоматизировать обработку многоязычных документов, сохранять их структурированность и читаемость при различном формате, масштабировать работу с большими объемами данных. Будучи частью автоматизированной системы, подобный код повышает скорость обработки документов, снижая вероятность ошибок, связанных с ручной редактурой. Он особенно актуален для международных проектов, где необходимо генерировать и редактировать однородные многоязычные таблицы в документах.

Input file:

table of content input

Output result:

table of content output

Полный код

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 });
        }
    }
}

Download

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

Download


Если вам нужен пример кода или у вас есть вопрос: напишите нам по адресу support@sautinsoft.ru или спросите в онлайн-чате (правый нижний угол этой страницы) или используйте форму ниже:



Вопросы и предложения всегда приветствуются!

Мы разрабатываем компоненты .Net с 2002 года. Мы знаем форматы PDF, DOCX, RTF, HTML, XLSX и Images. Если вам нужна помощь в создании, изменении или преобразовании документов в различных форматах, мы можем вам помочь. Мы напишем для вас любой пример кода абсолютно бесплатно.