Hantera presentationens bläckobjekt i Python via Java

Introduktion

PowerPoint erbjuder en bläckfunktion som låter dig rita fria streck. Bläck kan användas för att markera andra objekt, visa samband och processer samt rikta uppmärksamhet mot specifika element på en bild.

Aspose.Slides tillhandahåller de typer som behövs för att arbeta med bläckobjekt. Till exempel representerar klassen Ink ett bläckobjekt på en bild.

Skillnader mellan vanliga objekt och bläckobjekt

Objekt på en PowerPoint-bild representeras vanligtvis av formobjekt. I sin enklaste form är en form en behållare som definierar objektets område (dess ram) tillsammans med egenskaper såsom behållarens storlek, form och bakgrund. För mer information, se Shape Layout Format.

Men när PowerPoint hanterar ett bläckobjekt ignorerar det alla egenskaper hos objektets ram (behållare) förutom dess storlek. Storleken på behållarområdet bestäms av de standardmetoder Shape.getWidth och Shape.getHeight:

ink_powerpoint1

Bläckspår

Ett bläckspår är ett grundläggande element som används för att registrera en pensels bana när en användare skriver digitalt bläck. Ett spår lagrar en sekvens av sammankopplade punkter.

Den enklaste formen av kodning specificerar X- och Y-koordinaterna för varje sampelpunkt. När alla sammankopplade punkter renderas skapas en bild som denna:

ink_powerpoint2

Penselns egenskaper för ritning

En pensel används för att rita linjer som förbinder punkterna i ett bläckspår. Penseln har sin egen färg och storlek, som representeras av metoderna InkBrush.getColor och InkBrush.getSize.

Ange bläckpenselns färg

Denna Python‑kod visar hur du anger färgen på en bläckpensel:

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

Ange bläckpenselns storlek

Denna Python‑kod visar hur du anger storleken på en bläckpensel:

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

Generellt matchar inte en pensels bredd och höjd, så PowerPoint visar inte penselns storlek (den motsvarande datasektionen är gråtonad). När penselns bredd och höjd matchar visar PowerPoint dess storlek på följande sätt:

ink_powerpoint3

För tydlighetens skull ökar vi höjden på bläckobjektet och granskar de viktiga dimensionerna:

ink_powerpoint4

Behållaren (ramen) tar inte hänsyn till penselns storlek – den antar alltid att linjetjockleken är noll (se föregående bild).

Därför måste penselns storlek på dess spår beaktas för att bestämma det synliga området för hela bläckobjektet. Här har målobjektet (det handskrivna textspåret) skalats till storleken på behållaren (ramen). När behållarens storlek ändras förblir penselns storlek konstant, och vice versa.

ink_powerpoint5

PowerPoint använder liknande beteende för textobjekt:

ink_powerpoint6

Styr bläckens utseende vid export och rendering

Aspose.Slides tillhandahåller klassen InkOptions för att styra hur bläckobjekt visas i exporterad eller renderad output. Du kan använda dess egenskaper för att helt dölja bläck eller förändra hur maskoperationer för bläckpenslar tolkas.

Bläckalternativ är tillgängliga via export‑ eller renderingsalternativen för flera output‑typer:

Output Ink options property
PDF PdfOptions.getInkOptions
HTML HtmlOptions.getInkOptions
SVG SVGOptions.getInkOptions
TIFF TiffOptions.getInkOptions
Slide image RenderingOptions.getInkOptions

Följande InkOptions‑metoder exponerar samma två inställningar:

Dölj bläckobjekt i PDF‑output

Som standard är bläckobjekt synliga vid export. För att skapa en ren output utan handskrivna kommentarer eller annat bläckinnehåll, anropa InkOptions.setHideInk med True.

Följande Python‑exempel exporterar en presentation till PDF samtidigt som alla bläckobjekt döljs:

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

Dölj bläckobjekt när en bild renderas som en bild

För att dölja bläckobjekt när bilder renderas som bitmap‑bilder, konfigurera RenderingOptions.getInkOptions och skicka renderingsalternativen till Slide.getImage.

Följande Python‑exempel renderar den första bilden som en PNG‑bild utan bläckobjekt:

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

Styr rendering av bläckmask

Inställningen InkOptions.getInterpretMaskOpAsOpacity styr hur maskoperationer tolkas när bläckpenslar renderas. Standardvärdet är True, vilket använder opacitet. För att istället använda ROP‑operationen, anropa InkOptions.setInterpretMaskOpAsOpacity med False.

Följande Python‑exempel exporterar en bild till SVG och använder ROP‑baserad rendering för bläckmask‑operationer:

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

Samma inställning kan tillämpas via TiffOptions.getInkOptions när en presentation exporteras eller en bild renderas till TIFF.

Välj om du vill dölja eller bevara bläck

När du behöver en ren version av en annoterad presentation för distribution utan granskningsmarkeringar, anropa InkOptions.setHideInk med True vid export.

Lämna InkOptions.getHideInk på standardvärdet False när bläckanteckningar är en del av det avsedda innehållet, såsom granskningskommentarer, handskrivna anteckningar, markeringar eller ritningar som ska förbli synliga i den exporterade resultatet. Detta gör att applikationer kan generera separata gransknings‑ och slutresultat från samma presentation utan att ändra de ursprungliga bläckobjekten.

FAQ

Kan jag ändra färg eller storlek på ett befintligt bläckstreck?

Ja. Hämta spåret från Ink.getTraces, ändra sedan dess InkTrace.getBrush. Anropa InkBrush.setColor eller InkBrush.setSize för att ändra penseln.

Påverkar dölja bläck den ursprungliga presentationen?

Nej. Att anropa InkOptions.setHideInk påverkar endast det renderade eller exporterade resultatet; det tar inte bort eller ändrar bläckobjekt i den ursprungliga presentationen.

Vilka exportformat stöder bläckalternativ?

Du kan konfigurera bläckalternativ för PDF, HTML, SVG, TIFF och bitmap‑bildbilder via motsvarande export‑ eller renderingsalternativ som visas ovan.

Vidare läsning