Správa objektů ink v PowerPointu v PHP

Úvod

PowerPoint poskytuje funkci ink, která umožňuje kreslit volně tvarované tahy. Ink lze použít k zvýraznění dalších objektů, zobrazení spojení a procesů a přitáhnout pozornost k určitým položkám na snímku.

Aspose.Slides poskytuje typy potřebné pro práci s objekty ink. Například třída Ink představuje objekt ink na snímku.

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

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

Nicméně když PowerPoint pracuje s objektem ink, ignoruje všechny vlastnosti rámce objektu (kontejneru) kromě jeho velikosti. Velikost oblasti kontejneru je určena standardními metodami Shape.getWidth a Shape.getHeight:

ink_powerpoint1

Ink Stopy

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

Nejjednodušší forma kódování určuje souřadnice X a Y každého vzorkovacího bodu. Po vykreslení všech spojených bodů vznikne obraz jako tento:

ink_powerpoint2

Vlastnosti štětce pro kreslení

Štětec se používá k vykreslování čar, které spojují body ink stopy. Štětec má vlastní barvu a velikost, reprezentované metodami InkBrush.getColor a InkBrush.getSize.

Nastavit barvu štětce ink

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

$presentation = new Presentation("pres.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $ink = $slide->getShapes()->get_Item(0);
    $brush = $ink->getTraces()[0]->getBrush();
    $brush->setColor(java("java.awt.Color")->RED);
} finally {
    $presentation->dispose();
}

Nastavit velikost štětce ink

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

$presentation = new Presentation("pres.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $ink = $slide->getShapes()->get_Item(0);
    $brush = $ink->getTraces()[0]->getBrush();
    $brushSize = new Java("java.awt.Dimension", 5, 10);
    $brush->setSize($brushSize);
} finally {
    $presentation->dispose();
}

Obecně šířka a výška štětce neodpovídají, takže PowerPoint nezobrazuje velikost štětce (příslušná část dat je šedá). Když šířka a výška štětce odpovídají, PowerPoint zobrazí jeho velikost takto:

ink_powerpoint3

Pro přehlednost zvýšíme výšku objektu ink a podíváme se na 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 je třeba při určení viditelné oblasti celého objektu ink zohlednit velikost štětce jeho stop. Zde byl cílový objekt (stopa ručně psaného textu) přizpůsoben velikosti 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 během exportu a renderování

Aspose.Slides poskytuje třídu InkOptions, která umožňuje řídit, jak objekty ink vypadají v exportovaném nebo renderovaném výstupu. Můžete použít její vlastnosti k úplnému skrytí ink nebo ke změně interpretace operací masky štětce ink.

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

Výstup Vlastnost InkOptions
PDF PdfOptions.getInkOptions
HTML HtmlOptions.getInkOptions
SVG SVGOptions.getInkOptions
TIFF TiffOptions.getInkOptions
Slide image RenderingOptions.getInkOptions

Následující metody InkOptions zveřejňují stejná dvě nastavení:

  • [InkOptions.getHideInk] určuje, zda jsou objekty ink zahrnuty do výstupu. Jeho výchozí hodnota je false.
  • [InkOptions.getInterpretMaskOpAsOpacity] určuje, zda je operace masky interpretována jako neprůhlednost při renderování štětce ink. Jeho výchozí hodnota je true; zavolejte [InkOptions.setInterpretMaskOpAsOpacity] s false pro použití operace ROP místo toho.

Skrýt objekty ink v PDF výstupu

Ve výchozím nastavení zůstávají objekty ink během exportu viditelné. Pro vytvoření čistého výstupu bez ručně psaných anotací nebo jiného obsahu ink zavolejte [InkOptions.setHideInk] s true.

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

$presentation = new Presentation("presentation.pptx");
try {
    $pdfOptions = new PdfOptions();
    $pdfOptions->getInkOptions()->setHideInk(true);

    $presentation->save("presentation_without_ink.pdf", SaveFormat::Pdf, $pdfOptions);
} finally {
    $presentation->dispose();
}

Skrýt objekty ink při renderování snímku jako obrázku

Pro skrytí objektů ink při renderování snímků jako bitmapových obrázků nakonfigurujte [RenderingOptions.getInkOptions] a předávejte renderovací možnosti metodě [Slide.getImage].

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

$presentation = new Presentation("presentation.pptx");
try {
    $renderingOptions = new RenderingOptions();
    $renderingOptions->getInkOptions()->setHideInk(true);

    $slide = $presentation->getSlides()->get_Item(0);
    $image = $slide->getImage($renderingOptions);
    try {
        $image->save("slide_without_ink.png", ImageFormat::Png);
    } finally {
        $image->dispose();
    }
} finally {
    $presentation->dispose();
}

Řídit renderování masky ink

Nastavení [InkOptions.getInterpretMaskOpAsOpacity] řídí, jak jsou operace masky interpretovány při renderování štětců ink. Výchozí hodnota je true, což používá neprůhlednost. Pro použití operace ROP místo toho zavolejte [InkOptions.setInterpretMaskOpAsOpacity] s false.

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

$presentation = new Presentation("presentation.pptx");
try {
    $svgOptions = new SVGOptions();
    $svgOptions->getInkOptions()->setInterpretMaskOpAsOpacity(false);

    $outputStream = new Java("java.io.FileOutputStream", "slide.svg");
    try {
        $slide = $presentation->getSlides()->get_Item(0);
        $slide->writeAsSvg($outputStream, $svgOptions);
    } finally {
        $outputStream->close();
    }
} finally {
    $presentation->dispose();
}

Stejné nastavení lze použít prostřednictvím [TiffOptions.getInkOptions] při exportu prezentace nebo renderování snímku do TIFF.

Zvolte, zda skrýt nebo zachovat ink

Když potřebujete čistou verzi anotované prezentace pro distribuci bez recenzních značek, zavolejte [InkOptions.setHideInk] s true během exportu.

Ponechte [InkOptions.getHideInk] na výchozí hodnotě false, pokud jsou ink anotace součástí zamýšleného obsahu, například recenzní komentáře, ručně psané poznámky, zvýraznění nebo kresby, které mají zůstat v exportovaném výsledku viditelné. To umožňuje aplikacím generovat samostatné recenzní a finální výstupy ze stejné prezentace, aniž by se upravovaly zdrojové objekty ink.

Často kladené otázky

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

Ano. Získejte stopu pomocí Ink.getTraces, poté změňte její InkTrace.getBrush. Zavolejte InkBrush.setColor nebo InkBrush.setSize k změně štětce.

Mění skrytí ink původní prezentaci?

Ne. Volání InkOptions.setHideInk ovlivňuje pouze renderovaný nebo exportovaný výsledek; neodstraňuje ani nemodifikuje objekty ink v původní prezentaci.

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

Můžete konfigurovat ink možnosti pro PDF, HTML, SVG, TIFF a bitmapové obrázky snímků prostřednictvím odpovídajících exportních nebo renderovacích možností uvedených výše.

Další čtení