/// <summary>
        /// Определяет доступность класс, вставляющий в PDF-файл изображения штампов электронной подписи
        /// </summary>
        /// <param name="sessionContext">Контекст сессии</param>
        /// <param name="generatorType">Тип генератора изображений штампа электронной подписи</param>
        /// <param name="cardId">Идентификатор карточки</param>
        /// <param name="fileCardId">Идентификатор файла, для которого необходимо вставить изображения штампов электронной подписи</param>
        /// <param name="fileVersionId">Идентификатор версии файла, для которого необходимо вставить изображения штампов электронной подписи</param>
        /// <returns><see langword="true"/>, если класс удовлетворяет необходимым условиям. В противном случае возвращает <see langword="false"/></returns>
        public bool IsAllowed(SessionContext sessionContext, ImageGeneratorType generatorType, Guid cardId, Guid fileCardId, Guid?fileVersionId = null)
        {
            if (sessionContext is null)
            {
                throw new ArgumentNullException(nameof(sessionContext));
            }

            return(generatorType == ImageGeneratorType.ElectronicSignature &&
                   sessionContext.AdvancedCardManager.GetCardTypeId(cardId) == CardDocument.ID);
        }
Beispiel #2
0
        /// <summary>
        /// Создаёт массив изображений штампов электронной подписи
        /// </summary>
        /// <param name="sessionContext">Контекст сессии</param>
        /// <param name="generatorType">Тип генератора изображений штампов электронной подписи</param>
        /// <param name="cardId">Идентификатор карточки</param>
        /// <param name="fileCardId">Идентификатор файла, для которого необходимо вставить изображения штампов электронной подписи</param>
        /// <param name="fileVersionId">Идентификатор версии файла, для которого необходимо вставить изображения штампов электронной подписи</param>
        /// <returns>Массив изображений штампов электронной подписи, которые необходимо вставить в указанный файл</returns>
        public Image[] Generate(SessionContext sessionContext, ImageGeneratorType generatorType, Guid cardId, Guid fileCardId, Guid?fileVersionId = null)
        {
            var generatedImages = new List <Image>();

            // Получаем список моделей электронной подписи указанного файла
            var stampModels = serviceHelper.DocumentSignatureService.GetStampSignatureModel(sessionContext, cardId, fileCardId, fileVersionId);

            if (stampModels.Any()) // Если указанный файл содержит хотя бы одну электронную подпись
            {
                foreach (var stampModel in stampModels)
                {
                    if (stampModel.Certificate == null)
                    {
                        continue;                                 // Для простых электронных подписей изображения не создаём
                    }
                    // Получаем номер сертификата электронной подписи
                    var certificateNumber = stampModel.Certificate.GetSerialNumberString();

                    // Получаем имя владельца сертификата электронной подписи
                    var owner = stampModel.Certificate.GetNameInfo(X509NameType.SimpleName, false);

                    // Формируем изображение штампа электронной подписи в формате SVG на основе имени владельца, метки и номера сертификата электронной подписи,
                    // а также дат начала и окончания срока действия сертификата
                    var svg = GenerateSvg(owner, stampModel.LabelDisplayName, certificateNumber, stampModel.Certificate.NotBefore, stampModel.Certificate.NotAfter);

                    // Преобразуем сформированное изображение в формат PNG
                    var svgDocument = SvgDocument.FromSvg <SvgDocument>(svg);
                    using (var pngStream = new MemoryStream())
                    {
                        SvgToPngStream(svgDocument, pngStream);

                        // и добавляем его в результирующий массив
                        generatedImages.Add(Image.FromStream(pngStream));
                    }
                }
            }

            return(generatedImages.ToArray());
        }
Beispiel #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TypeGenerator"/> class.
        /// </summary>
        public TypeGenerator()
        {
            Generators = new Dictionary <Type, IGeneratorType>();

            IGeneratorType textBlock = new TextBlockGeneratorType();

            Generators.Add(textBlock.XamlType, textBlock);

            IGeneratorType stackPanel = new StackPanelGeneratorType();

            Generators.Add(stackPanel.XamlType, stackPanel);

            IGeneratorType uiRoot = new UIRootGeneratorType();

            Generators.Add(uiRoot.XamlType, uiRoot);

            IGeneratorType border = new BorderGeneratorType();

            Generators.Add(border.XamlType, border);

            IGeneratorType button = new ButtonGeneratorType();

            Generators.Add(button.XamlType, button);

            IGeneratorType control = new ControlGeneratorType();

            Generators.Add(control.XamlType, control);

            IGeneratorType contentControl = new ContentControlGeneratorType();

            Generators.Add(contentControl.XamlType, contentControl);

            IGeneratorType presenter = new ContentPresenterGeneratorType();

            Generators.Add(presenter.XamlType, presenter);

            IGeneratorType toggle = new ToggleButtonGeneratorType();

            Generators.Add(toggle.XamlType, toggle);

            IGeneratorType checkBox = new CheckBoxGeneratorType();

            Generators.Add(checkBox.XamlType, checkBox);

            IGeneratorType itemsControl = new ItemsControlGeneratorType();

            Generators.Add(itemsControl.XamlType, itemsControl);

            IGeneratorType combo = new ComboBoxGeneratorType();

            Generators.Add(combo.XamlType, combo);

            IGeneratorType dataGrid = new DataGridGeneratorType();

            Generators.Add(dataGrid.XamlType, dataGrid);

            IGeneratorType dataGridColumn = new DataGridColumnGeneratorType();

            Generators.Add(dataGridColumn.XamlType, dataGridColumn);

            IGeneratorType dataGridBoundColumn = new DataGridBoundColumnGeneratorType();

            Generators.Add(dataGridBoundColumn.XamlType, dataGridBoundColumn);

            IGeneratorType dataGridTextColumn = new DataGridTextColumnGeneratorType();

            Generators.Add(dataGridTextColumn.XamlType, dataGridTextColumn);

            IGeneratorType dataGridCheckBoxColumn = new DataGridCheckBoxColumnGeneratorType();

            Generators.Add(dataGridCheckBoxColumn.XamlType, dataGridCheckBoxColumn);

            IGeneratorType dataGridTemplateColumn = new DataGridTemplateColumnGeneratorType();

            Generators.Add(dataGridTemplateColumn.XamlType, dataGridTemplateColumn);

            IGeneratorType expander = new ExpanderGeneratorType();

            Generators.Add(expander.XamlType, expander);

            IGeneratorType grid = new GridGeneratorType();

            Generators.Add(grid.XamlType, grid);

            IGeneratorType header = new HeaderedContentControlGeneratorType();

            Generators.Add(header.XamlType, header);

            IGeneratorType image = new ImageGeneratorType();

            Generators.Add(image.XamlType, image);

            IGeneratorType listBox = new ListBoxGeneratorType();

            Generators.Add(listBox.XamlType, listBox);

            IGeneratorType scrollViewer = new ScrollViewerGeneratorType();

            Generators.Add(scrollViewer.XamlType, scrollViewer);

            IGeneratorType tabControl = new TabControlGeneratorType();

            Generators.Add(tabControl.XamlType, tabControl);

            IGeneratorType textBox = new TextBoxGeneratorType();

            Generators.Add(textBox.XamlType, textBox);

            IGeneratorType progressBar = new ProgressBarGeneratorType();

            Generators.Add(progressBar.XamlType, progressBar);

            IGeneratorType scrollContentPresenter = new ScrollContentPresenterGeneratorType();

            Generators.Add(scrollContentPresenter.XamlType, scrollContentPresenter);

            IGeneratorType repeatButton = new RepeatButtonGeneratorType();

            Generators.Add(repeatButton.XamlType, repeatButton);

            IGeneratorType scrollBar = new ScrollBarGeneratorType();

            Generators.Add(scrollBar.XamlType, scrollBar);

            IGeneratorType listBoxItem = new ListBoxItemGeneratorType();

            Generators.Add(listBoxItem.XamlType, listBoxItem);

            IGeneratorType tabItem = new TabItemGeneratorType();

            Generators.Add(tabItem.XamlType, tabItem);

            IGeneratorType comboBoxItem = new ComboBoxItemGeneratorType();

            Generators.Add(comboBoxItem.XamlType, comboBoxItem);

            IGeneratorType userControl = new UserControlGeneratorType();

            Generators.Add(userControl.XamlType, userControl);

            IGeneratorType customUserControl = new CustomUserControlGeneratorType();

            Generators.Add(customUserControl.XamlType, customUserControl);

            IGeneratorType track = new TrackGeneratorType();

            Generators.Add(track.XamlType, track);

            IGeneratorType thumb = new ThumbGeneratorType();

            Generators.Add(thumb.XamlType, thumb);

            IGeneratorType slider = new SliderGeneratorType();

            Generators.Add(slider.XamlType, slider);

            IGeneratorType numeric = new NumericTextBoxGeneratorType();

            Generators.Add(numeric.XamlType, numeric);

            IGeneratorType pass = new PasswordBoxGeneratorType();

            Generators.Add(pass.XamlType, pass);

            IGeneratorType customPassword = new CustomPasswordBoxGeneratorType();

            Generators.Add(customPassword.XamlType, customPassword);

            IGeneratorType animImage = new AnimatedImageGeneratorType();

            Generators.Add(animImage.XamlType, animImage);

            IGeneratorType shape = new ShapeGeneratorType();

            Generators.Add(shape.XamlType, shape);

            IGeneratorType rectangle = new RectangleGeneratorType();

            Generators.Add(rectangle.XamlType, rectangle);

            IGeneratorType ellipse = new EllipseGeneratorType();

            Generators.Add(ellipse.XamlType, ellipse);

            IGeneratorType canvas = new CanvasGeneratorType();

            Generators.Add(canvas.XamlType, canvas);

            IGeneratorType path = new PathGeneratorType();

            Generators.Add(path.XamlType, path);

            IGeneratorType dockPanel = new DockPanelGeneratorType();

            Generators.Add(dockPanel.XamlType, dockPanel);

            IGeneratorType line = new LineGeneratorType();

            Generators.Add(line.XamlType, line);

            IGeneratorType treeView = new TreeViewGeneratorType();

            Generators.Add(treeView.XamlType, treeView);

            IGeneratorType headerItems = new HeaderedItemsControlGeneratorType();

            Generators.Add(headerItems.XamlType, headerItems);

            IGeneratorType treeViewItem = new TreeViewItemGeneratorType();

            Generators.Add(treeViewItem.XamlType, treeViewItem);

            IGeneratorType wrapPanel = new WrapPanelGeneratorType();

            Generators.Add(wrapPanel.XamlType, wrapPanel);

            IGeneratorType popup = new PopupGeneratorType();

            Generators.Add(popup.XamlType, popup);

            IGeneratorType tabPanel = new TabPanelGeneratorType();

            Generators.Add(tabPanel.XamlType, tabPanel);

            IGeneratorType radio = new RadioButtonGeneratorType();

            Generators.Add(radio.XamlType, radio);

            IGeneratorType groupBox = new GroupBoxGeneratorType();

            Generators.Add(groupBox.XamlType, groupBox);

            IGeneratorType chart = new ChartGeneratorType();

            Generators.Add(chart.XamlType, chart);

            IGeneratorType series = new LineSeries2DGeneratorType();

            Generators.Add(series.XamlType, series);

            IGeneratorType seriesPoint = new SeriesPointGeneratorType();

            Generators.Add(seriesPoint.XamlType, seriesPoint);
        }
        /// <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
                });
            }
        }
Beispiel #5
0
 /// <summary>
 /// Определяет доступность генератора изображений штампов электронной подписи
 /// </summary>
 /// <param name="sessionContext">Контекст сессии</param>
 /// <param name="generatorType">Тип генератора изображений штампа электронной подписи</param>
 /// <param name="cardId">Идентификатор карточки</param>
 /// <param name="fileCardId">Идентификатор файла, для которого необходимо вставить изображения штампов электронной подписи</param>
 /// <param name="fileVersionId">Идентификатор версии файла, для которого необходимо вставить изображения штампов электронной подписи</param>
 /// <returns><see langword="true"/>, если генератор удовлетворяет необходимым условиям. В противном случае возвращает <see langword="false"/></returns>
 public bool IsAllowed(SessionContext sessionContext, ImageGeneratorType generatorType, Guid cardId, Guid fileCardId, Guid?fileVersionId = null)
 {
     return(generatorType == ImageGeneratorType.ElectronicSignature);
 }