Správa ink objektů prezentace v C++

Úvod

PowerPoint poskytuje funkci ink, která umožňuje kreslit volné tahy. Ink lze použít k zvýraznění dalších objektů, zobrazení spojení a procesů a upoutání pozornosti na konkrétní položky na snímku.

Namespace Aspose.Slides.Ink obsahuje třídy a rozhraní potřebná pro práci s objekty ink. Například rozhraní IInk představuje objekt ink na snímku.

Rozdíly mezi běžnými objekty a objekty ink

Objekty na snímku PowerPointu jsou obvykle reprezentovány objekty tvaru. V nejjednodušší formě je tvar kontejner, který definuje oblast samotného objektu (jeho rámec) spolu s vlastnostmi, jako je velikost kontejneru, tvar a pozadí. Další informace naleznete v Shape Layout Format.

Avšak když PowerPoint zpracovává objekt ink, ignoruje všechny vlastnosti rámce objektu (kontejneru) kromě jeho velikosti. Velikost oblasti kontejneru je určena standardními metodami IShape::get_Width a IShape::get_Height metodami:

ink_powerpoint1

Stopy Ink

Stopa ink je základní prvek používaný k zaznamenání trajektorie pera, když uživatel píše digitální ink. Stopa ukládá sekvenci propojených bodů.

Nejjednodušší forma kódování určuje souřadnice X a Y každého vzorkovacího bodu. Když jsou všechny propojené body vykresleny, vytvoří obraz jako tento:

ink_powerpoint2

Vlastnosti štětce pro kreslení

Štětec se používá k vykreslení čar, které spojují body stopy ink. Štětec má svou vlastní barvu a velikost, reprezentované metodami IInkBrush::get_Color a IInkBrush::get_Size metodami.

Nastavení barvy štětce ink

Tento kód C++ ukazuje, jak nastavit barvu štětce ink:

#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();

Nastavení velikosti štětce ink

Tento kód C++ ukazuje, jak nastavit velikost štětce ink:

#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();

Obecně šířka a výška štětce nejsou stejné, takže PowerPoint nezobrazuje velikost štětce (odpovídající sekce dat je šedá). Když se šířka a výška štětce shodují, PowerPoint zobrazí jeho velikost takto:

ink_powerpoint3

Pro přehlednost zvýšíme výšku objektu ink a přezkoumáme důležité rozměry:

ink_powerpoint4

Kontejner (rámec) nebere v úvahu velikost štětců — vždy předpokládá, že tloušťka čáry je nula (viz předchozí obrázek).

Proto pro určení viditelné oblasti celého objektu ink je třeba zohlednit velikost štětce jeho stop. Zde byl cílový objekt (stopa ručně psaného textu) škálován na velikost kontejneru (rámce). Když se velikost kontejneru změní, velikost štětce zůstane konstantní a naopak.

ink_powerpoint5

PowerPoint používá podobné chování pro textové objekty:

ink_powerpoint6

Řízení vzhledu Ink při exportu a vykreslování

Aspose.Slides poskytuje rozhraní IInkOptions pro kontrolu toho, jak mají být objekty ink zobrazeny v exportovaném nebo vykresleném výstupu. Můžete použít jeho metody k úplnému skrytí ink nebo ke změně způsobu interpretrace operací masky štětce ink.

Možnosti ink jsou k dispozici prostřednictvím možností exportu nebo vykreslování pro několik typů výstupu:

Výstup Metoda možností Ink
PDF PdfOptions::get_InkOptions
HTML HtmlOptions::get_InkOptions
SVG SVGOptions::get_InkOptions
TIFF TiffOptions::get_InkOptions
Slide image RenderingOptions::get_InkOptions

Stejné dvě nastavení jsou k dispozici prostřednictvím těchto metod:

  • IInkOptions::set_HideInk určuje, zda jsou objekty ink zahrnuty ve výstupu. Výchozí hodnota je false.
  • IInkOptions::set_InterpretMaskOpAsOpacity určuje, zda je operace masky interpretována jako neprůhlednost při vykreslování štětce ink. Výchozí hodnota je true; nastavte na false pro použití operace ROP místo ní.

Skrytí objektů Ink ve výstupu PDF

Ve výchozím nastavení zůstávají objekty ink během exportu viditelné. Zavolejte IInkOptions::set_HideInk s hodnotou true, když potřebujete čistý výstup bez ručně psaných anotací nebo jiného obsahu ink.

Následující příklad C++ exportuje prezentaci do PDF při skrytí všech objektů ink:

#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();

Skrytí objektů Ink při vykreslování snímku jako obrázku

Pro skrytí objektů ink při vykreslování snímků jako bitmapové obrázky nakonfigurujte RenderingOptions::get_InkOptions a předávejte možnosti vykreslování metodě ISlide::GetImage.

Následující příklad C++ vykreslí první snímek jako PNG obrázek bez objektů ink:

#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();

Řízení vykreslování masky Ink

Metoda IInkOptions::set_InterpretMaskOpAsOpacity řídí, jak jsou operace masky interpretovány při vykreslování štětců ink. Výchozí hodnota je true, což používá neprůhlednost. Zavolejte metodu s false pro použití operace ROP místo ní.

Následující příklad C++ exportuje snímek do SVG a používá vykreslování založené na ROP pro operace masky ink:

#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();

Stejné nastavení lze použít prostřednictvím TiffOptions::get_InkOptions při exportu prezentace nebo při vykreslování snímku do TIFF.

Zvolte, zda skrýt nebo zachovat Ink

Použijte IInkOptions::set_HideInk s hodnotou true, když má být exportovaný soubor čistou verzí anotované prezentace, například finální kopií určenou k distribuci bez revizních značek.

Nechte ink viditelný (výchozí nastavení false), když jsou ink anotace součástí zamýšleného obsahu, jako jsou revizní komentáře, ručně psané poznámky, zvýraznění nebo kresby, které mají zůstat viditelné ve výstupním výsledku. To umožňuje aplikacím generovat samostatné revizní a finální výstupy ze stejné prezentace bez úpravy zdrojových objektů ink.

Často kladené otázky

Mohu změnit barvu nebo velikost existujícího tahu ink?

Ano. Získáte stopu pomocí IInk::get_Traces, poté změníte její IInkTrace::get_Brush. Můžete zavolat IInkBrush::set_Color a IInkBrush::set_Size na štětec.

Mění skrytí ink zdrojovou prezentaci?

Ne. IInkOptions::set_HideInk ovlivňuje pouze vykreslený nebo exportovaný výsledek; neodstraňuje ani nemodifikuje objekty ink ve zdrojové prezentaci.

Které exportní formáty podporují možnosti ink?

Možnosti ink můžete konfigurovat pro PDF, HTML, SVG, TIFF a bitmapové snímky snímků prostřednictvím příslušných možností exportu nebo vykreslování uvedených výše.

Další čtení