ПРОДУКТЫСКАЧАТЬ  КУПИТЬ  ПОМОЩЬ БЛОГ   О КОМПАНИИ  
 
Визитная карточка
HTML в RTF
HTML в DOCX
HTML в Text
>>Объединение RTF
Скачать
Купить
Online-demo
Документация
Новости
Примеры кода

Объединение RTF-документов в консоли, WinForms и ASP.NET-приложения на C# и VB.NET.

Введение

«HTML to RTF .Net» предоставляет следующие возможности для объединения RTF-файлов:

Простое консольное приложение для объединения RTF-файлов.
WinForms и RichTextbox для слияния RTF в виде строк.
Приложение для объединения двух RTF-документов с помощью ASP.NET.

Но, в первую очередь, давайте разберём на простом примере, как работает механизм слияния RTF-документов.
Предположим, нам нужно объединить два RTF-файла: 1.rtf и 2.rtf.


1.rtf
{\rtf1
{\fonttbl{\f0 Calibri;}{\f1 Arial;}{\f2 Verdana;}}
{\colortbl;\red255\green255\blue255;\red255\green0\blue0;}
\paperw12240\paperh15840
\f0\cf2 This is red text marked by Calibri font.}
1.rtf
2.rtf:
{\rtf2
{\fonttbl{\f0 Times New Roman;}}
{\colortbl;\red255\green255\blue255;\red0\green0\blue255;}
\paperw24480\paperh15840
\f0\cf2 This is blue text marked by Times New Roman font.}
2.rtf

Чтобы объединить эти документы, мы должны:
- удалить последнюю скобку "}" в первом документе 1.rtf (строка 5),
- удалить первую скобку "{" во втором документе 2.rtf (строка 1),
- добавить новое ключевое слово '\ par' (single.rtf, строка 6) в качестве разделителя абзаца
- и, далее, объединить файлы в single.rtf:

{\rtf1
{\fonttbl{\f0 Calibri;}{\f1 Arial;}{\f2 Verdana;}}
{\colortbl;\red255\green255\blue255;\red255\green0\blue0;}
\paperw12240\paperh15840
\f0\cf2 This is red text marked by Calibri font.
\par
\rtf2
{\fonttbl{\f0 Times New Roman;}}
{\colortbl;\red255\green255\blue255;\red0\green0\blue255;}
\paperw24480\paperh15840
\f0\cf2 This is blue text marked by Times New Roman font.}

Отлично! Теперь любой RTF-ридер уже может открыть этот файл single.rtf без ошибок.

Но у него есть небольшая проблема, которую мы можем видеть на картинке:

This is merged RTF, note that 2nd line has a red color instead of blue and incorrect font.

Точнее, строка 2 на картинке стала красной, и шрифт был изменен на Calibri.

Вы задаетесь вопросом: "Я ожидал синий текст Times New Roman, почему получился другой шрифт и цвет?"

Смотрим строку 11 в single.rtf. Ключевые моменты: \f0 и \cf2. То есть, нужно взять имя шрифта с индексом 0 и цвет с индексом 2 из наших таблиц {\fonttbl...} и {\colortbl...}.

Но в объединенном RTF мы не объединяли таблицы шрифтов - {\fonttbl...} и таблицы цветов {\colortbl...}. И поэтому RTF-ридер видит только 1-ю таблицу шрифтов (single.rtf, строка 2) и первую таблицу цветов (single.rtf, строка 3). Проще говоря, \f0 теперь соответствует Calibri, а \cf2 - красному цвету.

Что же мы должны сделать во время слияния двух документов RTF?

- Объединить таблицы шрифтов, цветов и стилей из обоих файлов;
- Обновить индексы шрифтов, цветов и стилей в содержимом 2-го файла;
- При необходимости объединить размер страницы и данные полей;
- Удалить все повторяющиеся данные.

Подводя итог, взглянем на исправленный single.rtf с объединенными таблицами шрифтов и цветов:

{\rtf1
{\fonttbl{\f0 Calibri;}{\f1 Arial;}{\f2 Verdana;}{\f3 Times New Roman;}}
{\colortbl;\red255\green255\blue255;\red255\green0\blue0;\red0\green0\blue255;}
\paperw12240\paperh15840
\f0\cf2 This is red text marked by Calibri font.
\par
\f3\cf3 This is blue text marked by Times New Roman font.}
Чтобы увидеть правильный результат слияния, создайте пустой файл single.rtf и скопируйте содержимое из маркера кода с помощью кнопки Copy to clipboard.

Далее мы разберем три примера слияния RTF-файлов на C# и VB.NET:

Но чтобы продолжить, пожалуйста, загрузите «HTML to RTF .Net»-компонент (и добавьте ссылку на файл "SautinSoft.HtmlToRtf.dll" в Ваш проект) или установите пакет с NuGet. 

NuGet   Online Demo   Скачать, 7.4.4.30 (Апр 30, 2020)



Системные требования

Компонент совместим со всеми языками .NET и поддерживает основные операционные системы.

  • Windows
  • Linux
  • Mac OS

Обратите внимание, что «HTML to RTF .Net» полностью написан на управляемом C#. Это делает его абсолютно автономным и независимым.

.NET Framework 4.0 and higher and .Net Core 2.0 and higher

.NET Framework 4.0, 4.5, 4.6.1 и выше. Старую версию .NET 2.0 можно найти здесь.

.NET Core 2.0 и выше.

Консольное приложение.
Объединение нескольких RTF-файлов на C# и VB.NET.

Предположим, у нас есть папка с файлами RTF с именами: 1.rtf, 2.rtf, 3.rtf и так далее. Давайте создадим консольное приложение C#, которое объединит все эти файлы в один - Single.rtf.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace FunWithMergeRtf
{
    class Program
    {
        static void Main(string[] args)
        {
            string dirWithRtfs = @"c:\Rtf files\";
            string pathToSingleRtf = @"c:\Single.rtf";
            List<string> rtfFiles = new List<string>(Directory.GetFiles(dirWithRtfs, "*.rtf"));
            if (rtfFiles.Count < 1)
                return;                
            // 1.rtf, 10.rtf, 2.rtf => 1.rtf, 2.rtf, 10.rtf
            rtfFiles.Sort(new MyFileComparer());
            // 1. Возьмем 1-й файл из коллекции,
            // Создадим из него объединенный документ - Single.rtf.
            File.Copy(rtfFiles[0], pathToSingleRtf, true);
            // 2. Объединим все файлы, начиная со 2-го.
            SautinSoft.HtmlToRtf h = new SautinSoft.HtmlToRtf();
            for (int i = 1; i < rtfFiles.Count; i++)
            {
                h.MergeRtfFile(pathToSingleRtf, rtfFiles[i], pathToSingleRtf);
            }
        }
    }
    // Упорядочиваем имена файлов: 1.rtf, 2.rtf, 10.rtf 
    public class MyFileComparer : IComparer<string>
    {
        public int Compare(string path1, string path2)
        {
            string name1 = Path.GetFileNameWithoutExtension(path1);
            string name2 = Path.GetFileNameWithoutExtension(path2);
            return int.Parse(name1) - int.Parse(name2);
        }
    }
}

Приложение Winforms. Объединение содержимого двух элементов управления RichTextBox с помощью C# и VB.NET

Скажем, у нас есть WinForms с двумя элементами управления RichTextBox и кнопкой "Merge".


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace MergeRichTextBoxes
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void btnMerge_Click(object sender, EventArgs e)
        {
            SautinSoft.HtmlToRtf h = new SautinSoft.HtmlToRtf();
            string pathToSingleRtf = @"c:\Single.rtf";
            // Задать разделение документов по разрыву страницы
            h.MergeOptions.PageBreakBetweenDocuments = true;
            // Объединить две строки rtf в памяти
            string singleRtf = h.MergeRtfString(richTextBox1.Rtf, richTextBox2.Rtf);
            // Открыть результат в программе RTF-reader по умолчанию
            if (singleRtf != null)
            {
                File.WriteAllText(pathToSingleRtf, singleRtf);
                System.Diagnostics.Process.Start(pathToSingleRtf);
            }
        }
    }
}

Чтобы получить это приложение WinForms на C# или VB.NET, выполните следующие действия:The folder structure of HTML to RTF .Net component
Затем перейдите в папку "WinForms-merge RTF from RichTextBox controls".

Приложение ASP.NET: объединить два RTF-файла
и показать результат в браузере на C# и VB.NET.

Создайте новое ASP.NET-приложение и добавьте два элемента управления загрузкой файлов, а так же кнопку для слияния RTF-файлов и метку для отображения сообщений. Затем скопируйте файл 'SautinSoft.HtmlToRtf.dll' в каталог Вашего проекта '\Bin'. Эта сборка .NET предоставит методы для объединения RTF-документов для нашего приложения.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
namespace FunWithRtfMerging
{
    public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            lblMessage.Text="";
        }
        protected void btnMerge_Click(object sender, EventArgs e)
        {
            if (FileUpload1.FileBytes == null || FileUpload2.FileBytes == null)
            {
                lblMessage.Text = "Error! Please select two RTF files!";
                return;
            }
            // Объединить наши RTF-файлы
            SautinSoft.HtmlToRtf h = new SautinSoft.HtmlToRtf();
            string singleRtf = h.MergeRtfString(BytesToString(FileUpload1.FileBytes),
                BytesToString(FileUpload2.FileBytes));
            // Показать результат пользователю
            if (singleRtf != null)
            {
                Response.Buffer = true;
                Response.Clear();
                Response.ContentType = "application/rtf";
                Response.AddHeader("content-disposition", "inline; filename=\"Single.Rtf\"");
                byte[] data = System.Text.Encoding.UTF8.GetBytes(singleRtf);
                Response.BinaryWrite(data);
                Response.Flush();
                Response.End();
            }
        }
        static string BytesToString(byte[] b)
        {
            return System.Text.Encoding.UTF8.GetString(b);
        }
    }
}

Чтобы получить этот ASP.NET-проект, загрузите «HTML to RTF .Net»-компонент. Затем распакуйте его:

The folder structure of HTML to RTF .Net component

Дальше выбираем папку "ASP.Net - Merge RTF documents on fly".



Есть вопрос?

  • Если у Вас есть вопросы,
  • нужна помощь
  • или пример кода как конвертировать на C#, VB.NET, ASP.NET,
обращайтесь в нашу службу поддержки по адресу support@sautinsoft.com или спросите в онлайн-чате (правый нижний угол этой страницы). Мы Вам обязательно поможем!

Если Вас заинтересовал наш продукт, Вы можете скачать демо-версию тут или посмотреть цены на «HTML to RTF .Net».

 
 
Программы Скачать Помощь О компании
SautinSoft on Facebook SautinSoft on Twitter SautinSoft on Youtube Our Blog
Авторское право © 2002 - 2020 SautinSoft (начало с сайта sautin.com). Все права защищены.