Интеграция графических элементов в PDF-файлы на C# и .NET

Создание и настройка PDF-файлов является распространённой задачей во многих приложениях, и добавление фигур в PDF-файлы может значительно улучшить их визуальную привлекательность и функциональность. Используя C# и .NET, вы можете легко интегрировать различные фигуры в свои PDF-документы. В этой статье вы узнаете, как настраивать PDF-файлы с помощью фигур, используя библиотеку Sautinsoft.Pdf.

Фигуры могут использоваться в PDF-файлах для различных целей, таких как:

  • Выделение важных разделов.
  • Создание диаграмм и наметок.
  • Добавление визуальных элементов для повышения удобочитаемости.
  • Разработка пользовательских форм и шаблонов.

Фигура в PDF, также называемая контуром, — это геометрическое содержимое, состоящее из одного или нескольких подконтуров, состоящих из линий и кривых. С помощью SautinSoft.Pdf, вы можете получать, создавать или редактировать фигуры (контуры) в приложении на C# или VB.NET. Поддерживаются часто используемые фигуры в PDF: прямоугольник, линия, круг, эллипс, дуга и кривая Безье. При рисовании фигуры в PDF создается экземпляр класса PdfPathContent. Затем вы можете управлять подпутями, форматами, и преобразованиями созданного пути. В приведенном ниже примере фрагмента кода вы можете увидеть, как добавить различные фигуры на страницу PDF и как их отформатировать.

Пошаговое руководство:

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

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

Полный код

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

namespace Sample
{
    class Sample
    {
        /// <summary>
        /// Add shapes to PDF files.
        /// </summary>
        /// <remarks>
        /// Details: https://sautinsoft.com/products/pdf/help/net/developer-guide/add-shapes-to-pdf.php
        /// </remarks>
        static void Main(string[] args)
        {
            // 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())
            {
                // Add a page.
                var page = document.Pages.Add();

                // NOTE: In PDF, location (0, 0) is at the bottom-left corner of the page
                // and the positive y axis extends vertically upward.
                var pageBounds = page.CropBox;

                // Add a thick red line at the top of the page.
                var line = page.Content.Elements.AddPath();
                line.BeginSubpath(new PdfPoint(100, pageBounds.Top - 100)).
                    LineTo(new PdfPoint(pageBounds.Right - 100, pageBounds.Top - 200));
                var lineFormat = line.Format;
                lineFormat.Stroke.IsApplied = true;
                lineFormat.Stroke.Width = 5;
                lineFormat.Stroke.Color = PdfColor.FromRgb(1, 0, 0);

                // Add a filled and stroked rectangle in the middle of the page.
                var rectangle = page.Content.Elements.AddPath();
                // NOTE: The start point of the rectangle is the bottom left corner of the rectangle.
                rectangle.AddRectangle(new PdfPoint(100, pageBounds.Top - 400),
                    new PdfSize(pageBounds.Width - 200, 100));
                var rectangleFormat = rectangle.Format;
                rectangleFormat.Fill.IsApplied = true;
                rectangleFormat.Fill.Color = PdfColor.FromRgb(0, 1, 0);
                rectangleFormat.Stroke.IsApplied = true;
                rectangleFormat.Stroke.Width = 10;
                rectangleFormat.Stroke.Color = PdfColor.FromRgb(0, 0, 1);

                // Add a more complex semi-transparent filled and stroked path at the bottom of the page.
                var shape = page.Content.Elements.AddPath();
                shape.BeginSubpath(new PdfPoint(100, 100)).
                    BezierTo(new PdfPoint(100 + pageBounds.Width / 4, 200),
                        new PdfPoint(pageBounds.Right - 100 - pageBounds.Width / 4, 0),
                        new PdfPoint(pageBounds.Right - 100, 100)).
                    LineTo(new PdfPoint(pageBounds.Right - 100, 300)).
                    BezierTo(new PdfPoint(pageBounds.Right - 100 - pageBounds.Width / 4, 200),
                        new PdfPoint(100 + pageBounds.Width / 4, 400),
                        new PdfPoint(100, 300)).
                    CloseSubpath();
                var shapeFormat = shape.Format;
                shapeFormat.Fill.IsApplied = true;
                shapeFormat.Fill.Color = PdfColor.FromRgb(0, 1, 0);
                shapeFormat.Fill.Opacity = 0.5;
                shapeFormat.Stroke.IsApplied = true;
                shapeFormat.Stroke.Width = 4;
                shapeFormat.Stroke.Color = PdfColor.FromRgb(0, 0, 1);
                shapeFormat.Stroke.Opacity = 0.5;
                shapeFormat.Stroke.DashPattern = PdfLineDashPatterns.DashDot;

                // Add a grid to visualize the bounds of each drawn shape.
                var grid = page.Content.Elements.AddPath();
                grid.AddRectangle(new PdfPoint(100, 100),
                    new PdfSize(pageBounds.Width - 200, pageBounds.Height - 200));
                grid.BeginSubpath(new PdfPoint(100, pageBounds.Top - 200)).
                    LineTo(new PdfPoint(pageBounds.Right - 100, pageBounds.Top - 200)).
                    BeginSubpath(new PdfPoint(100, pageBounds.Top - 300)).
                    LineTo(new PdfPoint(pageBounds.Right - 100, pageBounds.Top - 300)).
                    BeginSubpath(new PdfPoint(100, pageBounds.Top - 400)).
                    LineTo(new PdfPoint(pageBounds.Right - 100, pageBounds.Top - 400)).
                    BeginSubpath(new PdfPoint(100, 300)).
                    LineTo(new PdfPoint(pageBounds.Right - 100, 300));
                grid.Format.Stroke.IsApplied = true;
                // A line width of 0 denotes the thinnest line that can be rendered at device resolution: 1 device pixel wide.
                grid.Format.Stroke.Width = 0;

                document.Save("Paths.pdf");
            }

            System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("Paths.pdf") { UseShellExecute = true });
        }
    }
}

Download

Option Infer On

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

Namespace Sample
	Friend Class Sample
		''' <summary>
		''' Add shapes to PDF files.
		''' </summary>
		''' <remarks>
		''' Details: https://sautinsoft.com/products/pdf/help/net/developer-guide/add-shapes-to-pdf.php
		''' </remarks>
		Shared Sub Main(ByVal args() As String)
			' 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()
				' Add a page.
				Dim page = document.Pages.Add()

				' NOTE: In PDF, location (0, 0) is at the bottom-left corner of the page
				' and the positive y axis extends vertically upward.
				Dim pageBounds = page.CropBox

				' Add a thick red line at the top of the page.
				Dim line = page.Content.Elements.AddPath()
				line.BeginSubpath(New PdfPoint(100, pageBounds.Top - 100)).LineTo(New PdfPoint(pageBounds.Right - 100, pageBounds.Top - 200))
				Dim lineFormat = line.Format
				lineFormat.Stroke.IsApplied = True
				lineFormat.Stroke.Width = 5
				lineFormat.Stroke.Color = PdfColor.FromRgb(1, 0, 0)

				' Add a filled and stroked rectangle in the middle of the page.
				Dim rectangle = page.Content.Elements.AddPath()
				' NOTE: The start point of the rectangle is the bottom left corner of the rectangle.
				rectangle.AddRectangle(New PdfPoint(100, pageBounds.Top - 400), New PdfSize(pageBounds.Width - 200, 100))
				Dim rectangleFormat = rectangle.Format
				rectangleFormat.Fill.IsApplied = True
				rectangleFormat.Fill.Color = PdfColor.FromRgb(0, 1, 0)
				rectangleFormat.Stroke.IsApplied = True
				rectangleFormat.Stroke.Width = 10
				rectangleFormat.Stroke.Color = PdfColor.FromRgb(0, 0, 1)

				' Add a more complex semi-transparent filled and stroked path at the bottom of the page.
				Dim shape = page.Content.Elements.AddPath()
				shape.BeginSubpath(New PdfPoint(100, 100)).BezierTo(New PdfPoint(100 + pageBounds.Width \ 4, 200), New PdfPoint(pageBounds.Right - 100 - pageBounds.Width \ 4, 0), New PdfPoint(pageBounds.Right - 100, 100)).LineTo(New PdfPoint(pageBounds.Right - 100, 300)).BezierTo(New PdfPoint(pageBounds.Right - 100 - pageBounds.Width \ 4, 200), New PdfPoint(100 + pageBounds.Width \ 4, 400), New PdfPoint(100, 300)).CloseSubpath()
				Dim shapeFormat = shape.Format
				shapeFormat.Fill.IsApplied = True
				shapeFormat.Fill.Color = PdfColor.FromRgb(0, 1, 0)
				shapeFormat.Fill.Opacity = 0.5
				shapeFormat.Stroke.IsApplied = True
				shapeFormat.Stroke.Width = 4
				shapeFormat.Stroke.Color = PdfColor.FromRgb(0, 0, 1)
				shapeFormat.Stroke.Opacity = 0.5
				shapeFormat.Stroke.DashPattern = PdfLineDashPatterns.DashDot

				' Add a grid to visualize the bounds of each drawn shape.
				Dim grid = page.Content.Elements.AddPath()
				grid.AddRectangle(New PdfPoint(100, 100), New PdfSize(pageBounds.Width - 200, pageBounds.Height - 200))
				grid.BeginSubpath(New PdfPoint(100, pageBounds.Top - 200)).LineTo(New PdfPoint(pageBounds.Right - 100, pageBounds.Top - 200)).BeginSubpath(New PdfPoint(100, pageBounds.Top - 300)).LineTo(New PdfPoint(pageBounds.Right - 100, pageBounds.Top - 300)).BeginSubpath(New PdfPoint(100, pageBounds.Top - 400)).LineTo(New PdfPoint(pageBounds.Right - 100, pageBounds.Top - 400)).BeginSubpath(New PdfPoint(100, 300)).LineTo(New PdfPoint(pageBounds.Right - 100, 300))
				grid.Format.Stroke.IsApplied = True
				' A line width of 0 denotes the thinnest line that can be rendered at device resolution: 1 device pixel wide.
				grid.Format.Stroke.Width = 0

				document.Save("Paths.pdf")
			End Using

			System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo("Paths.pdf") With {.UseShellExecute = True})
		End Sub
	End Class
End Namespace

Download


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



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

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