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

В современном мире работа с документами занимает важное место. Особенно часто возникает необходимость обработки документов с содержимым, ориентированным по RTL (Right-To-Left), таким как арабский, иврит или персидский текст. Решение этой задачи с помощью стандартных инструментов может быть сложным, особенно если точность и качество имеют решающее значение.

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

Right-to-left (RTL) — это свойство языка, определяющее направление написания текста справа налево. Некоторые языки, использующие RTL, включают арабский, иврит, персидский, урду и др. Большинство RTL-языков, таких как арабский и иврит, являются двунаправленными: в одном предложении могут чередоваться направления текста — как справа налево, так и слева направо. Эти языки требуют особого подхода, так как их чтение и отображение имеют специфические особенности:

  • Направление текста (справа-налево).
  • Особенности форматирования и выравнивания.
  • Специфичные символы и шрифты.

Обработка таких документов требует не только корректного отображения, но и возможности их конвертации (например, в PDF, DOCX, HTML) для дальнейшего использования или публикации.

Обратите внимание, что для корректной обработки RTL-текста важно, чтобы исходный файл имел правильное форматирование, а также чтобы библиотека поддерживала необходимые языковые особенности.

Input file:

table of content input

Output result:

table of content output

Полный код

using SautinSoft.Document;
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/

            ConvertRTLcontent();
        }

        /// <summary>
        /// How to convert documents with Right-To-Left content.
        /// </summary>
        /// <remarks>
        /// Details: https://sautinsoft.com/products/document/help/net/developer-guide/convert-documents-with-right-to-left-content.php
        /// </remarks>
        public static void ConvertRTLcontent()
        {
            string sourcePath = @"..\..\..\RTL.docx";
            string destPath = "RTL.pdf";
            
            // Load document with arabic, hindi, hebrew content.
            DocumentCore dc = DocumentCore.Load(sourcePath);
           
            // 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

Imports SautinSoft.Document
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/

			ConvertRTLcontent()
		End Sub

		''' <summary>
		''' How to convert documents with Right-To-Left content.
		''' </summary>
		''' <remarks>
		''' Details: https://sautinsoft.com/products/document/help/net/developer-guide/convert-documents-with-right-to-left-content.php
		''' </remarks>
		Public Shared Sub ConvertRTLcontent()
			Dim sourcePath As String = "..\..\..\RTL.docx"
			Dim destPath As String = "RTL.pdf"

			' Load document with arabic, hindi, hebrew content.
			Dim dc As DocumentCore = DocumentCore.Load(sourcePath)

			' 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. Если вам нужна помощь в создании, изменении или преобразовании документов в различных форматах, мы можем вам помочь. Мы напишем для вас любой пример кода абсолютно бесплатно.