Управление объектами чернил презентации в C++

Введение

PowerPoint предоставляет функцию чернил, позволяющую рисовать произвольные штрихи. Чернила могут использоваться для выделения других объектов, отображения связей и процессов, а также привлечения внимания к определённым элементам на слайде.

Пространство имён Aspose.Slides.Ink содержит классы и интерфейсы, необходимые для работы с объектами чернил. Например, интерфейс IInk представляет объект чернил на слайде.

Различия между обычными объектами и объектами чернил

Объекты на слайде PowerPoint обычно представлены объектами формы. В своей простейшей форме форма представляет собой контейнер, определяющий область самого объекта (его рамку), а также свойства, такие как размер контейнера, форма и фон. Для получения дополнительной информации см. Shape Layout Format.

Однако когда PowerPoint обрабатывает объект чернил, он игнорирует все свойства рамки объекта (контейнера), кроме его размеров. Размер области контейнера определяется стандартными методами IShape::get_Width и IShape::get_Height:

ink_powerpoint1

Отпечатки чернил

Отпечаток чернил — основной элемент, используемый для записи траектории пера, когда пользователь пишет цифровые чернила. Отпечаток хранит последовательность связанных точек.

Самая простая форма кодирования указывает координаты X и Y каждой выборочной точки. Когда все связанные точки отрисовываются, они создают изображение, подобное этому:

ink_powerpoint2

Свойства кисти для рисования

Кисть используется для рисования линий, соединяющих точки отпечатка чернил. Кисть имеет собственный цвет и размер, представленные методами IInkBrush::get_Color и IInkBrush::get_Size.

Установить цвет кисти чернил

Этот код C++ демонстрирует, как установить цвет кисти чернил:

#include <DOM/Ink/IInk.h>
#include <DOM/Ink/IInkBrush.h>
#include <DOM/Ink/IInkTrace.h>
#include <DOM/Presentation.h>
#include <drawing/color.h>
#include <system/smart_ptr.h>

using Aspose::Slides::Ink::IInk;
using Aspose::Slides::Presentation;
using System::ExplicitCast;
using System::MakeObject;

auto presentation = MakeObject<Presentation>(u"pres.pptx");
auto ink = ExplicitCast<IInk>(presentation->get_Slide(0)->get_Shape(0));
auto inkTrace = ink->get_Traces()[0];
auto brush = inkTrace->get_Brush();
brush->set_Color(System::Drawing::Color::get_Red());

presentation->Dispose();

Установить размер кисти чернил

Этот код C++ демонстрирует, как установить размер кисти чернил:

#include <DOM/Ink/IInk.h>
#include <DOM/Ink/IInkBrush.h>
#include <DOM/Ink/IInkTrace.h>
#include <DOM/Presentation.h>
#include <drawing/size_f.h>
#include <system/smart_ptr.h>

using Aspose::Slides::Ink::IInk;
using Aspose::Slides::Presentation;
using System::ExplicitCast;
using System::MakeObject;

auto presentation = MakeObject<Presentation>(u"pres.pptx");
auto ink = ExplicitCast<IInk>(presentation->get_Slide(0)->get_Shape(0));
auto inkTrace = ink->get_Traces()[0];
auto brush = inkTrace->get_Brush();
brush->set_Size(System::Drawing::SizeF(5.0f, 10.0f));

presentation->Dispose();

Как правило, ширина и высота кисти не совпадают, поэтому PowerPoint не отображает размер кисти (соответствующая секция данных закрашена серым). Когда ширина и высота кисти совпадают, PowerPoint отображает её размер следующим образом:

ink_powerpoint3

Для наглядности увеличим высоту объекта чернил и рассмотрим важные размеры:

ink_powerpoint4

Контейнер (рамка) не учитывает размер кистей — он всегда предполагает, что толщина линии равна нулю (см. предыдущее изображение).

Следовательно, чтобы определить видимую область всего объекта чернил, необходимо учитывать размер кисти его отпечатков. Здесь целевой объект (отпечаток рукописного текста) масштабирован до размеров контейнера (рамки). При изменении размера контейнера размер кисти остаётся постоянным и наоборот.

ink_powerpoint5

PowerPoint использует аналогичное поведение для текстовых объектов:

ink_powerpoint6

Управление отображением чернил при экспорте и рендеринге

Aspose.Slides предоставляет интерфейс IInkOptions, позволяющий управлять тем, как объекты чернил выглядят в экспортированных или отрисованных выводах. Вы можете использовать его методы, чтобы полностью скрыть чернила или изменить способ интерпретации операций маски кисти чернил.

Параметры чернил доступны через параметры экспорта или рендеринга для нескольких форматов вывода:

Вывод Метод параметров чернил
PDF PdfOptions::get_InkOptions
HTML HtmlOptions::get_InkOptions
SVG SVGOptions::get_InkOptions
TIFF TiffOptions::get_InkOptions
Slide image RenderingOptions::get_InkOptions

Те же два параметра доступны через эти методы:

  • IInkOptions::set_HideInk определяет, включаются ли объекты чернил в вывод. Его значение по умолчанию — false.
  • IInkOptions::set_InterpretMaskOpAsOpacity определяет, интерпретируется ли операция маски как непрозрачность при рендеринге кисти чернил. Значение по умолчанию — true; установите false, чтобы использовать операцию ROP вместо этого.

Скрыть объекты чернил в PDF‑выводе

По умолчанию объекты чернил остаются видимыми при экспорте. Вызовите IInkOptions::set_HideInk с параметром true, когда требуется чистый вывод без рукописных аннотаций или другого содержимого чернил.

Следующий пример C++ экспортирует презентацию в PDF, скрывая все объекты чернил:

#include <DOM/Presentation.h>
#include <Export/IInkOptions.h>
#include <Export/PdfOptions.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>

using Aspose::Slides::Presentation;
using Aspose::Slides::Export::PdfOptions;
using Aspose::Slides::Export::SaveFormat;
using System::MakeObject;

auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto pdfOptions = MakeObject<PdfOptions>();
pdfOptions->get_InkOptions()->set_HideInk(true);

presentation->Save(u"presentation_without_ink.pdf", SaveFormat::Pdf, pdfOptions);
presentation->Dispose();

Скрыть объекты чернил при рендеринге слайда как изображения

Чтобы скрыть объекты чернил при рендеринге слайдов в битовые изображения, настройте RenderingOptions::get_InkOptions и передайте параметры рендеринга методу ISlide::GetImage.

Следующий пример C++ рендерит первый слайд как PNG‑изображение без объектов чернил:

#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/IInkOptions.h>
#include <Export/RenderingOptions.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <system/smart_ptr.h>

using Aspose::Slides::ImageFormat;
using Aspose::Slides::Presentation;
using Aspose::Slides::Export::RenderingOptions;
using System::MakeObject;

auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto renderingOptions = MakeObject<RenderingOptions>();
renderingOptions->get_InkOptions()->set_HideInk(true);

auto image = presentation->get_Slide(0)->GetImage(renderingOptions);
image->Save(u"slide_without_ink.png", ImageFormat::Png);

image->Dispose();
presentation->Dispose();

Управление рендерингом маски чернил

Метод IInkOptions::set_InterpretMaskOpAsOpacity управляет тем, как операции маски интерпретируются при рендеринге кистей чернил. Значение по умолчанию — true, что использует непрозрачность. Вызовите метод с false, чтобы вместо этого использовать операцию ROP.

Следующий пример C++ экспортирует слайд в SVG и использует рендеринг на основе ROP для операций маски чернил:

#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/IInkOptions.h>
#include <Export/SVGOptions.h>
#include <system/io/file.h>
#include <system/smart_ptr.h>

using Aspose::Slides::Presentation;
using Aspose::Slides::Export::SVGOptions;
using System::MakeObject;
using System::IO::File;

auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto svgOptions = MakeObject<SVGOptions>();
svgOptions->get_InkOptions()->set_InterpretMaskOpAsOpacity(false);

auto stream = File::Create(u"slide.svg");
presentation->get_Slide(0)->WriteAsSvg(stream, svgOptions);

stream->Dispose();
presentation->Dispose();

То же самое параметр можно применить через TiffOptions::get_InkOptions, когда экспортируется презентация или рендерится слайд в TIFF.

Выбор: скрыть или сохранить чернила

Используйте IInkOptions::set_HideInk с true, когда экспортируемый файл должен быть чистой версией аннотированной презентации, например, финальной копией, предназначенной для распространения без отметок ревью.

Оставьте чернила видимыми (настройка по умолчанию false), когда аннотации чернил являются частью предполагаемого содержимого, например, комментарии ревью, рукописные заметки, выделения или рисунки, которые должны оставаться видимыми в экспортированном результате. Это позволяет приложениям генерировать отдельные ревью‑и финальные версии из одной презентации без изменения исходных объектов чернил.

FAQ

Могу ли я изменить цвет или размер существующего штриха чернил?

Да. Получите отпечаток с помощью IInk::get_Traces, затем измените его IInkTrace::get_Brush. Вы можете вызвать IInkBrush::set_Color и IInkBrush::set_Size для кисти.

Скрытие чернил изменяет исходную презентацию?

Нет. IInkOptions::set_HideInk влияет только на отрисованный или экспортированный результат; он не удаляет и не изменяет объекты чернил в исходной презентации.

Какие форматы экспорта поддерживают параметры чернил?

Вы можете настроить параметры чернил для PDF, HTML, SVG, TIFF и растровых изображений слайдов через соответствующие параметры экспорта или рендеринга, указанные выше.

Дополнительные материалы