Обработка текста сложных скриптов на C# и .NET

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

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

  1. Добавить SautinSoft.PDF из NuGet.
  2. Создать новую страницу.
  3. Заполнить текстовый объект в формате Pdf многоязычным текстом.
  4. Нарисовать текст.
  5. Выполнить итерацию по оставшимся позициям.
  6. Сохранить PDF-документ.

Обратите внимание, что форматирование сложных языков, читаемых справа налево, таких как арабский или иврит, в настоящее время работает только через WPF (путем установки свойства PdfFormattedText.TextFormattingMode в значение PdfTextFormattingMode.WPF, которое устанавливается по умолчанию при работе в Windows).

Форматирование сложных сценариев, читаемых слева направо, таких как различные индийские сценарии, также работает с помощью механизма форматирования текста HarfBuzz (путем установки свойства PdfFormattedText.TextFormattingMode в значение PdfTextFormattingMode.HarfBuzz, которое устанавливается по умолчанию при работе в операционных системах, отличных от Windows, и при наличии в проекте ссылки на пакет HarfBuzzSharp).

Выходной результат:

Полный код

using System;
using SautinSoft.Pdf;
using System.IO;
using SautinSoft.Pdf.Content;

class Program
{
    /// <summary>
    /// How to set Font's settings and text formatting.
    /// </summary>
    /// <remarks>
    /// Details: https://sautinsoft.com/products/pdf/help/net/developer-guide/text-from-complex-scripts.php
    /// </remarks>
    static void Main()
    {
        // Before starting this example, please get a free trial key:
        // https://sautinsoft.com/start-for-free/

        // Apply the key here:
        // PdfDocument.SetLicense("...");

        using (var document = new PdfDocument())
        {
            // Create a new page.
            var page = document.Pages.Add();

            using (var formattedText = new PdfFormattedText())
            {
                // Set up and fill a PdfFormattedText object with multilingual text.
                formattedText.Language = new PdfLanguage("en-US");
                formattedText.Font = new PdfFont("Calibri", 12);

                formattedText.AppendLine("An example of a fully vocalised (vowelised or vowelled) Arabic ").
                Append("from the Basmala: ");

                formattedText.Language = new PdfLanguage("ar-SA");
                formattedText.Font = new PdfFont("Arial", 24);
                formattedText.Append("بِسْمِ ٱللَّٰهِ ٱلرَّحْمَٰنِ ٱلرَّحِيمِ");

                formattedText.Language = new PdfLanguage("en-US");
                formattedText.Font = new PdfFont("Calibri", 12);
                formattedText.AppendLine(", which means: ").
                Append("In the name of God, the All-Merciful, the Especially-Merciful.");

                // Draw this text.
                page.Content.DrawText(formattedText, new PdfPoint(50, 750));
                // Clear PdfFormattedText object.
                formattedText.Clear();
                // Set up and fill a PdfFormattedText object with multilingual text.
                formattedText.Append("An example of Hebrew: ");

                formattedText.Language = new PdfLanguage("he-IL");
                formattedText.Font = new PdfFont("Arial", 24);
                formattedText.Append("מה קורה");

                formattedText.Language = new PdfLanguage("en-US");
                formattedText.Font = new PdfFont("Calibri", 12);
                formattedText.AppendLine(", which means: What's going on, ").
                Append("and ");

                formattedText.Language = new PdfLanguage("he-IL");
                formattedText.Font = new PdfFont("Arial", 24);
                formattedText.Append("תודה לכולם");

                formattedText.Language = new PdfLanguage("en-US");
                formattedText.Font = new PdfFont("Calibri", 12);
                formattedText.Append(", which means: Thank you all.");
                // Draw this text.
                page.Content.DrawText(formattedText, new PdfPoint(50, 650));
                // Clear PdfFormattedText object.
                formattedText.Clear();
                // Set up and fill a PdfFormattedText object with multilingual text.
                formattedText.LineHeight = 50;

                formattedText.Append("An example of Thai: ");
                formattedText.Language = new PdfLanguage("th-TH");
                formattedText.Font = new PdfFont("Leelawadee UI", 16);
                formattedText.AppendLine("ภัำ");

                formattedText.Language = new PdfLanguage("en-US");
                formattedText.Font = new PdfFont("Calibri", 12);
                formattedText.Append("An example of Tamil: ");
                formattedText.Language = new PdfLanguage("ta-IN");
                formattedText.Font = new PdfFont("Nirmala UI", 16);
                formattedText.AppendLine("போது");

                formattedText.Language = new PdfLanguage("en-US");
                formattedText.Font = new PdfFont("Calibri", 12);
                formattedText.Append("An example of Bengali: ");
                formattedText.Language = new PdfLanguage("be-IN");
                formattedText.Font = new PdfFont("Nirmala UI", 16);
                formattedText.AppendLine("আবেদনকারীর মাতার পিতার বর্তমান স্থায়ী ঠিকানা নমিনি নাম");

                formattedText.Language = new PdfLanguage("en-US");
                formattedText.Font = new PdfFont("Calibri", 12);
                formattedText.Append("An example of Gujarati: ");
                formattedText.Language = new PdfLanguage("gu-IN");
                formattedText.Font = new PdfFont("Nirmala UI", 16);
                formattedText.AppendLine("કાર્બન કેમેસ્ટ્રી");

                formattedText.Language = new PdfLanguage("en-US");
                formattedText.Font = new PdfFont("Calibri", 12);
                formattedText.Append("An example of Osage: ");
                formattedText.Language = new PdfLanguage("osa");
                formattedText.Font = new PdfFont("Gadugi", 16);
                formattedText.Append("𐓏𐓘𐓻𐓘𐓻𐓟 𐒻𐓟");
                // Draw this text.
                page.Content.DrawText(formattedText, new PdfPoint(50, 350));
            }
            // Save PDF Document.
            document.Save("Complex scripts.pdf");
        }
    }
}

Download

Option Infer On

Imports System
Imports SautinSoft.Pdf
Imports System.IO
Imports SautinSoft.Pdf.Content

Friend Class Program
	''' <summary>
	''' How to set Font's settings and text formatting.
	''' </summary>
	''' <remarks>
	''' Details: https://sautinsoft.com/products/pdf/help/net/developer-guide/text-from-complex-scripts.php
	''' </remarks>
	Shared Sub Main()
		' Before starting this example, please get a free trial key:
		' https://sautinsoft.com/start-for-free/

		' Apply the key here:
		' PdfDocument.SetLicense("...");

		Using document = New PdfDocument()
			' Create a new page.
			Dim page = document.Pages.Add()

			Using formattedText = New PdfFormattedText()
				' Set up and fill a PdfFormattedText object with multilingual text.
				formattedText.Language = New PdfLanguage("en-US")
				formattedText.Font = New PdfFont("Calibri", 12)

				formattedText.AppendLine("An example of a fully vocalised (vowelised or vowelled) Arabic ").Append("from the Basmala: ")

				formattedText.Language = New PdfLanguage("ar-SA")
				formattedText.Font = New PdfFont("Arial", 24)
				formattedText.Append("بِسْمِ ٱللَّٰهِ ٱلرَّحْمَٰنِ ٱلرَّحِيمِ")

				formattedText.Language = New PdfLanguage("en-US")
				formattedText.Font = New PdfFont("Calibri", 12)
				formattedText.AppendLine(", which means: ").Append("In the name of God, the All-Merciful, the Especially-Merciful.")

				' Draw this text.
				page.Content.DrawText(formattedText, New PdfPoint(50, 750))
				' Clear PdfFormattedText object.
				formattedText.Clear()
				' Set up and fill a PdfFormattedText object with multilingual text.
				formattedText.Append("An example of Hebrew: ")

				formattedText.Language = New PdfLanguage("he-IL")
				formattedText.Font = New PdfFont("Arial", 24)
				formattedText.Append("מה קורה")

				formattedText.Language = New PdfLanguage("en-US")
				formattedText.Font = New PdfFont("Calibri", 12)
				formattedText.AppendLine(", which means: What's going on, ").Append("and ")

				formattedText.Language = New PdfLanguage("he-IL")
				formattedText.Font = New PdfFont("Arial", 24)
				formattedText.Append("תודה לכולם")

				formattedText.Language = New PdfLanguage("en-US")
				formattedText.Font = New PdfFont("Calibri", 12)
				formattedText.Append(", which means: Thank you all.")
				' Draw this text.
				page.Content.DrawText(formattedText, New PdfPoint(50, 650))
				' Clear PdfFormattedText object.
				formattedText.Clear()
				' Set up and fill a PdfFormattedText object with multilingual text.
				formattedText.LineHeight = 50

				formattedText.Append("An example of Thai: ")
				formattedText.Language = New PdfLanguage("th-TH")
				formattedText.Font = New PdfFont("Leelawadee UI", 16)
				formattedText.AppendLine("ภัำ")

				formattedText.Language = New PdfLanguage("en-US")
				formattedText.Font = New PdfFont("Calibri", 12)
				formattedText.Append("An example of Tamil: ")
				formattedText.Language = New PdfLanguage("ta-IN")
				formattedText.Font = New PdfFont("Nirmala UI", 16)
				formattedText.AppendLine("போது")

				formattedText.Language = New PdfLanguage("en-US")
				formattedText.Font = New PdfFont("Calibri", 12)
				formattedText.Append("An example of Bengali: ")
				formattedText.Language = New PdfLanguage("be-IN")
				formattedText.Font = New PdfFont("Nirmala UI", 16)
				formattedText.AppendLine("আবেদনকারীর মাতার পিতার বর্তমান স্থায়ী ঠিকানা নমিনি নাম")

				formattedText.Language = New PdfLanguage("en-US")
				formattedText.Font = New PdfFont("Calibri", 12)
				formattedText.Append("An example of Gujarati: ")
				formattedText.Language = New PdfLanguage("gu-IN")
				formattedText.Font = New PdfFont("Nirmala UI", 16)
				formattedText.AppendLine("કાર્બન કેમેસ્ટ્રી")

				formattedText.Language = New PdfLanguage("en-US")
				formattedText.Font = New PdfFont("Calibri", 12)
				formattedText.Append("An example of Osage: ")
				formattedText.Language = New PdfLanguage("osa")
				formattedText.Font = New PdfFont("Gadugi", 16)
				formattedText.Append("𐓏𐓘𐓻𐓘𐓻𐓟 𐒻𐓟")
				' Draw this text.
				page.Content.DrawText(formattedText, New PdfPoint(50, 350))
			End Using
			' Save PDF Document.
			document.Save("Complex scripts.pdf")
			System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo("Complex scripts.pdf") With {.UseShellExecute = True})
		End Using
	End Sub
End Class

Download


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



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

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