Перейти к содержанию

Выбор преднастроенных способов размещения штампа в PDF

Выбор преднастроенных способов размещения штампа в PDF

Добавим в выпадающий список с типами документов (PDF без штампа, PDF со штампом, TIFF) дополнительный тип “PDF штамп справа”, который пользователь может выбрать, чтобы расположить штамп ближе к правой границе страницы.

Note

Для работы указанных расширений требуется версия платформы 2.7.2 или старше.

Напишем расширение, которое замещает стандартный список типов документов (выпадающий список в диалоге), добавляя в него помимо стандартных типов дополнительный тип “формат документа PDF (штамп справа)”. Этот тип выполняет формирование документа PDF со штампом, но добавляет параметр "RightAlignment": true. Этот параметр ниже используется в расширении на формирование штампа.

using System.Collections.Generic; using Tessa.Extensions.Platform.Client.Scanning; using Tessa.Platform.Collections;

namespace Tessa.Extensions.Client.Scanning { public sealed class AbScanDialogExtension : ScanDialogExtension { public override void InitializeSettings(ScanFileDialogSettings settings) { if (settings.DocumentTypesOverride == null) { settings.DocumentTypesOverride = new List<ScanDocumentType>(); settings.DocumentTypesOverride.AddRange(ScanDocumentType.DefaultTypes); }

int index = settings.DocumentTypesOverride.LastIndexOf(t => t.Name == "PDF");

settings.DocumentTypesOverride.Insert( index + 1, new ScanDocumentType( "PDF", c => new PdfScanDocumentGenerator(c, true, new Dictionary<string, object> { { "RightAlignment", true } }), ScanDocumentTag.WithStamp, string.Format( Localize("$UI_Controls_Scan_DocumentFormatCaption"), "PDF") + " (штамп справа)")); } } }

Теперь напишем расширение на формирование штампа, которое проверяет, что если оно выполняется для типа документа с параметром RightAlignment, то разместим штамп со смещением ближе к правой границе страницы. Размер указывается в т.н. “точках PDF” (points), которые являются независимыми от DPI единицами измерения, используемые в PDF.

Tip

Для следующего расширения подключите к сборке Tessa.Extensions.Client ссылку на библиотеку PdfSharp-WPF или на соответствующий NuGet-пакет.

using Tessa.Extensions.Default.Client.Pdf; using Tessa.Platform.Storage;

namespace Tessa.Extensions.Client.Scanning { public sealed class AbPdfStampExtension : PdfStampExtension { public override void GenerateForPage(IPdfStampExtensionContext context) { if (context.GeneratorInfo.TryGet<bool>("RightAlignment")) { context.StampWriter.Left = context.Page.Width.Point - 150; } } } }

Регистрация расширений выполняется в классе Registrator. К моменту выполнения расширения AbPdfStampExtension уже сработает типовое расширение DefaultPdfStampExtension, которое добавит содержимое штампа в context.StampWriter.Lines, которое можно проверить в расширении выше, чтобы, например, вычислить их размер.

using Tessa.Extensions.Default.Client.Pdf; using Tessa.Extensions.Platform.Client.Scanning;

namespace Tessa.Extensions.Client.Scanning { [Registrator] public sealed class Registrator : RegistratorBase { public override void RegisterExtensions(IExtensionContainer extensionContainer) { extensionContainer .RegisterExtension<IScanDialogExtension, AbScanDialogExtension>(x => x .WithOrder(ExtensionStage.AfterPlatform, 1) .WithSingleton())

.RegisterExtension<IPdfStampExtension, AbPdfStampExtension>(x => x .WithOrder(ExtensionStage.AfterPlatform, 1) .WithSingleton()) ; } } }

Back to top