Spravovat objekty ink v PowerPointu v Pythonu přes Java

Úvod

PowerPoint poskytuje funkci ink, která vám 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.

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 tvaru (shape). V nejjednodušší podobě je tvar 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 Formát rozvržení tvaru.

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

Stopy ink

Stopa ink je základní prvek používaný k zaznamenání dráhy 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 vzorkového bodu. Po vykreslení všech spojených bodů vznikne obrázek jako tento:

ink_powerpoint2

Vlastnosti štětce pro kreslení

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

Nastavení barvy štětce ink

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

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, Ink

Color = jpype.JClass("java.awt.Color")

presentation = Presentation("pres.pptx")
try:
    slide = presentation.getSlides().get_Item(0)
    ink = slide.getShapes().get_Item(0)
    if isinstance(ink, Ink):
        traces = ink.getTraces()
        if len(traces) > 0:
            brush = traces[0].getBrush()
            brush.setColor(Color.RED)
        else:
            print("The ink object has no traces.")
    else:
        print("The first shape is not an ink object.")
finally:
    presentation.dispose()

Nastavení velikosti štětce ink

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

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, Ink

Dimension = jpype.JClass("java.awt.Dimension")

presentation = Presentation("pres.pptx")
try:
    slide = presentation.getSlides().get_Item(0)
    ink = slide.getShapes().get_Item(0)
    if isinstance(ink, Ink):
        traces = ink.getTraces()
        if len(traces) > 0:
            brush = traces[0].getBrush()
            brush_size = Dimension(5, 10)
            brush.setSize(brush_size)
        else:
            print("The ink object has no traces.")
    else:
        print("The first shape is not an ink object.")
finally:
    presentation.dispose()

Obecně šířka a výška štětce neodpovídají, takže PowerPoint nezobrazuje velikost štětce (příslušná sekce 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) nezohledňuje velikost štětců – vždy předpokládá nulovou tloušťku čáry (viz předchozí obrázek).

Proto je při určení viditelné oblasti celého objektu ink nutné vzít v úvahu velikost štětce jeho stop. Zde byl cílový objekt (stopa rukou psaného textu) přepočítán na velikost kontejneru (rámce). Když se velikost kontejneru změní, velikost štětce zůstává 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 třídu InkOptions, která umožňuje řídit, jak se objekty ink zobrazují v exportovaném nebo vykresleném výstupu. Můžete použít její vlastnosti k úplnému skrytí ink nebo ke změně interpretace operací masky štětce ink.

Ink options jsou k dispozici prostřednictvím možností exportu nebo vykreslování pro několik typů výstupů:

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

Následující metody InkOptions odhalují stejné dva nastavení:

  • getHideInk určuje, zda jsou objekty ink zahrnuty ve výstupu. Jeho výchozí hodnota je False.
  • getInterpretMaskOpAsOpacity určuje, zda je operace masky interpretována jako průhlednost při vykreslování štětce ink. Jeho výchozí hodnota je True; zavolejte setInterpretMaskOpAsOpacity s False pro použití operace ROP místo toho.

Skrytí objektů ink v PDF výstupu

Ve výchozím nastavení zůstávají objekty ink při 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í Python příklad exportuje prezentaci do PDF a skryje všechny objekty ink:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, PdfOptions, SaveFormat

presentation = Presentation("presentation.pptx")
try:
    pdf_options = PdfOptions()
    pdf_options.getInkOptions().setHideInk(True)

    presentation.save("presentation_without_ink.pdf", SaveFormat.Pdf, pdf_options)
finally:
    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ých obrázků nakonfigurujte RenderingOptions.getInkOptions a předávejte možnosti vykreslování metodě Slide.getImage.

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

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, RenderingOptions, ImageFormat

presentation = Presentation("presentation.pptx")
try:
    rendering_options = RenderingOptions()
    rendering_options.getInkOptions().setHideInk(True)

    slide = presentation.getSlides().get_Item(0)
    image = slide.getImage(rendering_options)
    try:
        image.save("slide_without_ink.png", ImageFormat.Png)
    finally:
        image.dispose()
finally:
    presentation.dispose()

Řízení vykreslování masky ink

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

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

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SVGOptions

FileOutputStream = jpype.JClass("java.io.FileOutputStream")

presentation = Presentation("presentation.pptx")
try:
    svg_options = SVGOptions()
    svg_options.getInkOptions().setInterpretMaskOpAsOpacity(False)

    stream = FileOutputStream("slide.svg")
    try:
        slide = presentation.getSlides().get_Item(0)
        slide.writeAsSvg(stream, svg_options)
    finally:
        stream.close()
finally:
    presentation.dispose()

Stejné nastavení lze aplikovat pomocí TiffOptions.getInkOptions při exportu prezentace nebo vykreslování snímku do TIFF.

Zvolte, zda skrýt nebo zachovat ink

Když potřebujete čistou verzi anotované prezentace pro šíření bez kontrolních značek, zavolejte InkOptions.setHideInk s True během exportu.

Nechte InkOptions.getHideInk na jeho výchozí hodnotě False, pokud jsou anotace ink součástí zamýšleného obsahu, například recenzní komentáře, ručně psané poznámky, zvýraznění nebo kresby, které by měly zůstat ve výsledném exportu viditelné. To umožňuje aplikacím generovat samostatné recenzní a finální výstupy ze stejné prezentace bez úpravy původních objektů ink.

Časté otázky

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

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

Změní skrytí inku zdrojovou prezentaci?

Ne. Zavolání InkOptions.setHideInk ovlivní pouze vykreslený nebo exportovaný výsledek; neodstraní ani nezmění objekty ink ve zdrojové prezentaci.

Které formáty exportu podporují nastavení ink?

Nastavení ink můžete konfigurovat pro PDF, HTML, SVG, TIFF a bitmapové obrázky snímků pomocí odpovídajících možností exportu nebo vykreslování uvedených výše.

Další čtení