Конвертирование байтов RTF в файл PDF с форматированием с использованием C# и .NET.


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

Замените весь текст "formatting" на "FORMATTING!!!".

Полный код

using System;
using System.IO;
using SautinSoft.Document;
using SautinSoft.Document.Tables;
using System.Linq;
using System.Text.RegularExpressions;

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            ConvertRtfBytesToPdfFile();
        }
		/// <summary>
        /// Convert RTF bytes to PDF file with formatting.
        /// </summary>
        /// <remarks>
        /// Details: https://www.sautinsoft.com/products/document/help/net/developer-guide/from-customers-convert-rtf-bytes-to-pdf-with-formatting-in-csharp-vb-net.php
        /// </remarks>
        public static void ConvertRtfBytesToPdfFile()
        {
            // Get document bytes.
            byte[] fileBytes = File.ReadAllBytes(@"..\..\..\example.rtf");
            
            string PdfPath = @"result.pdf";
            
            DocumentCore dc = null;
            Regex regex = new Regex(@"formatting", RegexOptions.IgnoreCase);
            
            // Create a MemoryStream.
            using (MemoryStream ms = new MemoryStream(fileBytes))
            {
                // Load a document from the MemoryStream.
                // Specifying RtfLoadOptions we explicitly set that a loadable document is RTF.
                dc = DocumentCore.Load(ms, new RtfLoadOptions());
            }

            // Add a new section in the document.
            Section s = new Section(dc);
            dc.Sections.Add(s);

            // Create a new table with two rows and three columns inside.
            Table table = new Table(dc);
            double width = LengthUnitConverter.Convert(100, LengthUnit.Millimeter, LengthUnit.Point);
            table.TableFormat.PreferredWidth = new TableWidth(width, TableWidthUnit.Point);
            table.TableFormat.Alignment = HorizontalAlignment.Center;

            int counter = 0;

            // Add rows.
            int rows = 2;
            int columns = 3;
            for (int r = 0; r < rows; r++)
            {
                TableRow row = new TableRow(dc);

                // Add columns.
                for (int c = 0; c < columns; c++)
                {
                    TableCell cell = new TableCell(dc);

                    // Set cell formatting and width.
                    cell.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Dashed, Color.Brown, 2.0);

                    // Set the same width for each column.
                    cell.CellFormat.PreferredWidth = new TableWidth(width / columns, TableWidthUnit.Point);

                    if (counter % 2 == 1)
                        cell.CellFormat.BackgroundColor = new Color("#FF0000");

                    row.Cells.Add(cell);

                    // Let's add a paragraph with text into the each column.
                    Paragraph pa = new Paragraph(dc);
                    pa.ParagraphFormat.Alignment = HorizontalAlignment.Center;
                    pa.ParagraphFormat.SpaceBefore = LengthUnitConverter.Convert(3, LengthUnit.Millimeter, LengthUnit.Point);
                    pa.ParagraphFormat.SpaceAfter = LengthUnitConverter.Convert(3, LengthUnit.Millimeter, LengthUnit.Point);

                    pa.Content.Start.Insert(String.Format("{0}", (char)(counter + 'A')), new CharacterFormat() { FontName = "Arial", FontColor = new Color("#000000"), Size = 12.0 });
                    cell.Blocks.Add(pa);
                    counter++;
                }
                table.Rows.Add(row);

            }
                // Create a new header with formatted text.
                HeaderFooter header = new HeaderFooter(dc, HeaderFooterType.HeaderDefault);
                header.Content.Start.Insert(table.Content);
                foreach (Section s1 in dc.Sections)
                {
                    s1.HeadersFooters.Add(header.Clone(true));
                }

                // Add the header into HeadersFooters collection of the 1st section.
                //s1.HeadersFooters.Add(header);

                // Create a new footer with formatted text.
                HeaderFooter footer = new HeaderFooter(dc, HeaderFooterType.FooterDefault);
                footer.Content.Start.Insert(table.Content);
                foreach (Section s1 in dc.Sections)
                {
                    s1.HeadersFooters.Add(footer.Clone(true));
                }

                // Add the footer into HeadersFooters collection of the 1st section.
                //s1.HeadersFooters.Add(footer);

                foreach (ContentRange item in dc.Content.Find(regex).Reverse())
                {
                // Replace all text "formatting" on "FORMATTING!!!".
                item.Replace("FORMATTING!!!", new CharacterFormat() { BackgroundColor = Color.Yellow, FontName = "Arial", Size = 16.0 });
                }

                // Save our result as a PDF file.
            dc.Save(PdfPath);

            // Open the result for demonstration purposes.
            System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(PdfPath) { UseShellExecute = true });
        }
    }
}  

Скачать

Imports System
Imports System.IO
Imports SautinSoft.Document
Imports SautinSoft.Document.Tables
Imports System.Linq
Imports System.Text.RegularExpressions

Namespace Example
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			ConvertRtfBytesToPdfFile()
		End Sub
		''' <summary>
		''' Convert RTF bytes to PDF file with formatting.
		''' </summary>
		''' <remarks>
		''' Details: https://www.sautinsoft.com/products/document/help/net/developer-guide/from-customers-convert-rtf-bytes-to-pdf-with-formatting-in-csharp-vb-net.php
		''' </remarks>
		Public Shared Sub ConvertRtfBytesToPdfFile()
			' Get document bytes.
			Dim fileBytes() As Byte = File.ReadAllBytes("..\..\..\example.rtf")

			Dim PdfPath As String = "result.pdf"

			Dim dc As DocumentCore = Nothing
			Dim regex As New Regex("formatting", RegexOptions.IgnoreCase)

			' Create a MemoryStream.
			Using ms As New MemoryStream(fileBytes)
				' Load a document from the MemoryStream.
				' Specifying RtfLoadOptions we explicitly set that a loadable document is RTF.
				dc = DocumentCore.Load(ms, New RtfLoadOptions())
			End Using

			' Add a new section in the document.
			Dim s As New Section(dc)
			dc.Sections.Add(s)

			' Create a new table with two rows and three columns inside.
			Dim table As New Table(dc)
			Dim width As Double = LengthUnitConverter.Convert(100, LengthUnit.Millimeter, LengthUnit.Point)
			table.TableFormat.PreferredWidth = New TableWidth(width, TableWidthUnit.Point)
			table.TableFormat.Alignment = HorizontalAlignment.Center

			Dim counter As Integer = 0

			' Add rows.
			Dim rows As Integer = 2
			Dim columns As Integer = 3
			For r As Integer = 0 To rows - 1
				Dim row As New TableRow(dc)

				' Add columns.
				For c As Integer = 0 To columns - 1
					Dim cell As New TableCell(dc)

					' Set cell formatting and width.
					cell.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Dashed, Color.Brown, 2.0)

					' Set the same width for each column.
					cell.CellFormat.PreferredWidth = New TableWidth(width / columns, TableWidthUnit.Point)

					If counter Mod 2 = 1 Then
						cell.CellFormat.BackgroundColor = New Color("#FF0000")
					End If

					row.Cells.Add(cell)

					' Let's add a paragraph with text into the each column.
					Dim pa As New Paragraph(dc)
					pa.ParagraphFormat.Alignment = HorizontalAlignment.Center
					pa.ParagraphFormat.SpaceBefore = LengthUnitConverter.Convert(3, LengthUnit.Millimeter, LengthUnit.Point)
					pa.ParagraphFormat.SpaceAfter = LengthUnitConverter.Convert(3, LengthUnit.Millimeter, LengthUnit.Point)

					pa.Content.Start.Insert(String.Format("{0}", ChrW(counter + AscW("A"c))), New CharacterFormat() With {
						.FontName = "Arial",
						.FontColor = New Color("#000000"),
						.Size = 12.0
					})
					cell.Blocks.Add(pa)
					counter += 1
				Next c
				table.Rows.Add(row)

			Next r
				' Create a new header with formatted text.
				Dim header As New HeaderFooter(dc, HeaderFooterType.HeaderDefault)
				header.Content.Start.Insert(table.Content)
				For Each s1 As Section In dc.Sections
					s1.HeadersFooters.Add(header.Clone(True))
				Next s1

				' Add the header into HeadersFooters collection of the 1st section.
				's1.HeadersFooters.Add(header);

				' Create a new footer with formatted text.
				Dim footer As New HeaderFooter(dc, HeaderFooterType.FooterDefault)
				footer.Content.Start.Insert(table.Content)
				For Each s1 As Section In dc.Sections
					s1.HeadersFooters.Add(footer.Clone(True))
				Next s1

				' Add the footer into HeadersFooters collection of the 1st section.
				's1.HeadersFooters.Add(footer);

				For Each item As ContentRange In dc.Content.Find(regex).Reverse()
				' Replace all text "formatting" on "FORMATTING!!!".
				item.Replace("FORMATTING!!!", New CharacterFormat() With {
					.BackgroundColor = Color.Yellow,
					.FontName = "Arial",
					.Size = 16.0
				})
				Next item

				' Save our result as a PDF file.
			dc.Save(PdfPath)

			' Open the result for demonstration purposes.
			System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(PdfPath) With {.UseShellExecute = True})
		End Sub
	End Class
End Namespace

Скачать


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



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

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