Управление объектами чернил презентации в C++
Введение
PowerPoint предоставляет функцию чернил, позволяющую рисовать произвольные штрихи. Чернила могут использоваться для выделения других объектов, отображения связей и процессов, а также привлечения внимания к определённым элементам на слайде.
Пространство имён Aspose.Slides.Ink содержит классы и интерфейсы, необходимые для работы с объектами чернил. Например, интерфейс IInk представляет объект чернил на слайде.
Различия между обычными объектами и объектами чернил
Объекты на слайде PowerPoint обычно представлены объектами формы. В своей простейшей форме форма представляет собой контейнер, определяющий область самого объекта (его рамку), а также свойства, такие как размер контейнера, форма и фон. Для получения дополнительной информации см. Shape Layout Format.
Однако когда PowerPoint обрабатывает объект чернил, он игнорирует все свойства рамки объекта (контейнера), кроме его размеров. Размер области контейнера определяется стандартными методами IShape::get_Width и IShape::get_Height:

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

Свойства кисти для рисования
Кисть используется для рисования линий, соединяющих точки отпечатка чернил. Кисть имеет собственный цвет и размер, представленные методами 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 отображает её размер следующим образом:

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

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

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

Управление отображением чернил при экспорте и рендеринге
Aspose.Slides предоставляет интерфейс IInkOptions, позволяющий управлять тем, как объекты чернил выглядят в экспортированных или отрисованных выводах. Вы можете использовать его методы, чтобы полностью скрыть чернила или изменить способ интерпретации операций маски кисти чернил.
Параметры чернил доступны через параметры экспорта или рендеринга для нескольких форматов вывода:
| Вывод | Метод параметров чернил |
|---|---|
| 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 и растровых изображений слайдов через соответствующие параметры экспорта или рендеринга, указанные выше.
Дополнительные материалы
- Для общего ознакомления с формами см. раздел PowerPoint Shapes.
- Для получения дополнительной информации о эффективных значениях см. Shape Effective Properties.
- Подробности экспорта PDF см. в Convert PPT and PPTX to PDF.
- Подробности экспорта HTML см. в Convert PowerPoint Presentations to HTML.
- Подробности экспорта SVG см. в Render Presentation Slides as SVG Images.
- Подробности экспорта TIFF см. в Convert PowerPoint Presentations to TIFF.
- Подробности рендеринга слайд‑в‑изображение см. в Convert Presentation Slides to Images.