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:

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:

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:

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

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.

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

Ří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 |
|---|---|
| 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 sFalsepro 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í
- Pro čtení o tvarech obecně se podívejte na sekci PowerPoint Shapes.
- Pro více informací o efektivních hodnotách viz Efektivní vlastnosti tvaru.
- Pro podrobnosti o exportu PDF viz Převod PPT a PPTX do PDF.
- Pro podrobnosti o exportu HTML viz Převod prezentací PowerPoint do HTML.
- Pro podrobnosti o exportu SVG viz Vykreslení snímků prezentace jako SVG obrázky.
- Pro podrobnosti o exportu TIFF viz Převod prezentací PowerPoint do TIFF.
- Pro podrobnosti o vykreslování snímků na obrázky viz Převod snímků prezentace na obrázky.