PDF липкие аннотации на C#

Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing.

Добавление аннотации с водяным знаком

Аннотация с водяным знаком должна использоваться для представления графики, которая должна печататься фиксированного размера и позиции на странице, независимо от размеров печатной страницы.

Вы можете добавить текст водяного знака, используя WatermarkAnnotation в определенной позиции страницы PDF. Прозрачность водяного знака также можно контролировать, используя свойство прозрачности.

Пожалуйста, проверьте следующий фрагмент кода для добавления WatermarkAnnotation.

 //Загрузить документ
Aspose.PDF.Document doc = new Aspose.PDF.Document("source.pdf");

//Загрузить объект страницы для добавления аннотации
Page page = doc.Pages[1];

//Создать аннотацию
WatermarkAnnotation wa = new WatermarkAnnotation(page, new Aspose.PDF.Rectangle(100, 500, 400, 600));

//Добавить аннотацию в коллекцию аннотаций страницы
page.Annotations.Add(wa);

//Создать TextState для настройки шрифта
Aspose.PDF.Text.TextState ts = new Aspose.PDF.Text.TextState();

ts.ForegroundColor = Aspose.PDF.Color.Blue;
ts.Font = FontRepository.FindFont("Times New Roman");

ts.FontSize = 32;

//Установить уровень прозрачности текста аннотации

wa.Opacity = 0.5;
//Добавить текст в аннотацию

wa.SetTextAndState(new string[] { "HELLO", "Line 1", "Line 2" }, ts);

//Сохранить документ
doc.Save("Output.pdf");

Добавление ссылки на одно и то же изображение несколько раз в документ PDF

Иногда возникает необходимость использовать одно и то же изображение несколько раз в документе PDF. Добавление нового экземпляра увеличивает итоговый размер документа PDF. Мы добавили новый метод XImageCollection.Add(XImage) в Aspose.PDF для .NET 17.1.0. Этот метод позволяет добавить ссылку на тот же объект PDF, что и исходное изображение, что оптимизирует размер документа PDF.

 Aspose.PDF.Rectangle imageRectangle = new Aspose.PDF.Rectangle(0, 0, 30, 15);

using (Aspose.PDF.Document document = new Aspose.PDF.Document("input.pdf"))
{
    using (var imageStream = File.Open("icon.png", FileMode.Open))
    {
        XImage image = null;
        foreach (Page page in document.Pages)
        {
            WatermarkAnnotation annotation = new WatermarkAnnotation(page, page.Rect);
            XForm form = annotation.Appearance["N"];
            form.BBox = page.Rect;
            string name;
            if (image == null)
            {
                name = form.Resources.Images.Add(imageStream);
                image = form.Resources.Images[name];
            }
            else
            {
                name = form.Resources.Images.Add(image);
            }
            form.Contents.Add(new Operator.GSave());
            form.Contents.Add(new Operator.ConcatenateMatrix(new Aspose.PDF.Matrix(imageRectangle.Width, 0, 0, imageRectangle.Height, 0, 0)));
            form.Contents.Add(new Operator.Do(name));
            form.Contents.Add(new Operator.GRestore());
            page.Annotations.Add(annotation, false);
            imageRectangle = new Aspose.PDF.Rectangle(0, 0, imageRectangle.Width * 1.01, imageRectangle.Height * 1.01);
        }
    }
    document.Save("output.pdf");
}