public static void Run()
        {
            // ExStart:RotatingStamp
            // The path to the documents directory.
            string dataDir = RunExamples.GetDataDir_AsposePdfFacades_TechnicalArticles();

            // Set path of the image to be set as watermark
            string imageFile = dataDir + "aspose-logo.jpg";

            // Set input file path
            string inFile = dataDir + "inFile.pdf";

            // Set output file path
            string outFile = dataDir + "RotatingStamp_out.pdf";

            // Create PdfFileInfo object to get height and width of the pages
            PdfFileInfo fileInfo = new PdfFileInfo(inFile);

            // Create Stamp object
            Aspose.Pdf.Facades.Stamp aStamp = new Aspose.Pdf.Facades.Stamp();

            // Bind image file with the Stamp object
            aStamp.BindImage(imageFile);

            // Specify whether the stamp will be added as a background or not
            aStamp.IsBackground = false;

            // Specifies at which pages to add the watermark
            aStamp.Pages = new int[] { 1 };

            // Specifies the watermark rotation - rotate at 90 degrees the stamp is rotated about the center point of the stamp object
            aStamp.Rotation = 90;

            // Specifies the position of stamp - lower left corner of the stamp
            aStamp.SetOrigin(fileInfo.GetPageWidth(1) / 2, fileInfo.GetPageHeight(1) / 2);

            // Set the size of the watermark
            aStamp.SetImageSize(100, 100);

            Document doc = new Document(inFile);
            // Create PdfFileStamp class to bind input and output files
            PdfFileStamp stamper = new PdfFileStamp(doc);

            // Add the stamp in the PDF file
            stamper.AddStamp(aStamp);

            // Close the PdfFileStamp object
            stamper.Close();
            // ExEnd:RotatingStamp                      
        }
        public static void Run()
        {
            // ExStart:RotatingStamp
            // The path to the documents directory.
            string dataDir = RunExamples.GetDataDir_AsposePdfFacades_TechnicalArticles();

            // Set path of the image to be set as watermark
            string imageFile = dataDir + "aspose-logo.jpg";

            // Set input file path
            string inFile = dataDir + "inFile.pdf";

            // Set output file path
            string outFile = dataDir + "RotatingStamp_out.pdf";

            // Create PdfFileInfo object to get height and width of the pages
            PdfFileInfo fileInfo = new PdfFileInfo(inFile);

            // Create Stamp object
            Aspose.Pdf.Facades.Stamp aStamp = new Aspose.Pdf.Facades.Stamp();

            // Bind image file with the Stamp object
            aStamp.BindImage(imageFile);

            // Specify whether the stamp will be added as a background or not
            aStamp.IsBackground = false;

            // Specifies at which pages to add the watermark
            aStamp.Pages = new int[] { 1 };

            // Specifies the watermark rotation - rotate at 90 degrees the stamp is rotated about the center point of the stamp object
            aStamp.Rotation = 90;

            // Specifies the position of stamp - lower left corner of the stamp
            aStamp.SetOrigin(fileInfo.GetPageWidth(1) / 2, fileInfo.GetPageHeight(1) / 2);

            // Set the size of the watermark
            aStamp.SetImageSize(100, 100);

            Document doc = new Document(inFile);
            // Create PdfFileStamp class to bind input and output files
            PdfFileStamp stamper = new PdfFileStamp(doc);

            // Add the stamp in the PDF file
            stamper.AddStamp(aStamp);

            // Close the PdfFileStamp object
            stamper.Close();
            // ExEnd:RotatingStamp
        }
        /// <summary>
        /// Вставляет изображения штампов электронной подписи на первую страницу указанного PDF-файла
        /// </summary>
        /// <param name="sessionContext">Контекст сессии</param>
        /// <param name="generatorType">Тип генератора изображений штампов электронной подписи</param>
        /// <param name="images">Массив изображений штампов электронной подписи</param>
        /// <param name="fileStream">Поток, содержащий PDF-файл, в который необходимо вставить указанные изображения</param>
        /// <returns>Модель файла со вставленными изображениями</returns>
        public GeneratedFileInfo Generate(SessionContext sessionContext, ImageGeneratorType generatorType, System.Drawing.Image[] images, Stream fileStream)
        {
            if (images is null)
            {
                throw new ArgumentNullException(nameof(images));
            }
            if (fileStream is null)
            {
                throw new ArgumentNullException(nameof(fileStream));
            }

            using (var pdfDocument = new Document(fileStream))
            {
                var page        = pdfDocument.Pages[1];
                var pdfFileInfo = new PdfFileInfo(pdfDocument);

                double pageWidth  = page.Rect.Width;
                double pageHeight = page.Rect.Height;

                // Вычисляем координаты первого изображения штампов электронной подписи
                var xIndent = pdfFileInfo.GetPageWidth(1) / pageWidth * PagePadding;
                var yIndent = pdfFileInfo.GetPageHeight(1) / pageHeight * PagePadding;

                // Максимальная высота изображения штампа в текущей строке (нужна для выравнивания изображений в строке)
                double maxImageHeight = 0;

                foreach (var imageHelper in images.Select(x => new ImageHelper(x)))
                {
                    // Если верхняя левая координата текущего изображения больше высоты страницы PDF-документа,
                    // то прекращаем вставку изображений
                    if (yIndent + imageHelper.Height > pageHeight)
                    {
                        break;
                    }

                    // Если ширина строки вставленных изображений превышает ширину страницы,
                    // то переходим на следующую строку
                    if (xIndent + imageHelper.Width > pageWidth)
                    {
                        yIndent       += maxImageHeight + ImageMargin;
                        xIndent        = PagePadding;
                        maxImageHeight = imageHelper.Height;
                    }
                    // В противном случае вычисляем максимальную высоту изображения штампа в текущей строке
                    else if (imageHelper.Height > maxImageHeight)
                    {
                        maxImageHeight = imageHelper.Height;
                    }

                    // Вставляем текущее изображение по указанным координатам
                    InsertImage(page, imageHelper, xIndent, yIndent);

                    // Вычисляем горизонтальную координату следующего изображения
                    xIndent += imageHelper.Width + ImageMargin;
                }

                // Копируем в поток сформированный PDF-файл со вставленными изображениями штампов электронной подписи
                var outputStream = new MemoryStream();
                pdfDocument.Save(outputStream);
                outputStream.Seek(0, SeekOrigin.Begin);

                return(new GeneratedFileInfo {
                    Stream = outputStream
                });
            }
        }