Gestire gli oggetti di inchiostro della presentazione in JavaScript

Introduzione

PowerPoint fornisce una funzione di inchiostro che consente di disegnare tratti liberi. L’inchiostro può essere usato per evidenziare altri oggetti, mostrare connessioni e processi e attirare l’attenzione su elementi specifici in una diapositiva.

Aspose.Slides fornisce i tipi necessari per lavorare con gli oggetti di inchiostro. Ad esempio, la classe Ink rappresenta un oggetto di inchiostro su una diapositiva.

Differenze tra oggetti normali e oggetti di inchiostro

Gli oggetti su una diapositiva PowerPoint sono tipicamente rappresentati da oggetti shape. Nella sua forma più semplice, una shape è un contenitore che definisce l’area dell’oggetto stesso (il suo frame) insieme a proprietà come la dimensione del contenitore, la forma e lo sfondo. Per ulteriori informazioni, vedere Shape Layout Format.

Tuttavia, quando PowerPoint gestisce un oggetto di inchiostro, ignora tutte le proprietà del frame dell’oggetto (contenitore) tranne la sua dimensione. La dimensione dell’area del contenitore è determinata dai metodi standard Shape.getWidth e Shape.getHeight :

ink_powerpoint1

Tracce di inchiostro

Una traccia di inchiostro è un elemento base usato per registrare la traiettoria di una penna mentre l’utente scrive inchiostro digitale. Una traccia memorizza una sequenza di punti collegati.

La forma più semplice di codifica specifica le coordinate X e Y di ogni punto di campionamento. Quando tutti i punti collegati vengono renderizzati, producono un’immagine come questa:

ink_powerpoint2

Proprietà del pennello per il disegno

Un pennello è usato per disegnare linee che collegano i punti di una traccia di inchiostro. Il pennello ha il proprio colore e dimensione, rappresentati dai metodi InkBrush.getColor e InkBrush.getSize .

Impostare il colore del pennello di inchiostro

const aspose = {
    slides: require("aspose.slides.via.java")
};
const java = require("java");

const presentation = new aspose.slides.Presentation("pres.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);
    const ink = slide.getShapes().get_Item(0);
    const brush = ink.getTraces()[0].getBrush();
    const red = java.getStaticFieldValue("java.awt.Color", "RED");
    brush.setColor(red);
} finally {
    presentation.dispose();
}

Impostare la dimensione del pennello di inchiostro

const aspose = {
    slides: require("aspose.slides.via.java")
};
const java = require("java");

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

In generale, la larghezza e l’altezza di un pennello non coincidono, quindi PowerPoint non mostra la dimensione del pennello (la sezione dati corrispondente è grigia). Quando la larghezza e l’altezza del pennello coincidono, PowerPoint mostra la sua dimensione in questo modo:

ink_powerpoint3

Per chiarezza, aumentiamo l’altezza dell’oggetto di inchiostro e rivediamo le dimensioni importanti:

ink_powerpoint4

Il contenitore (frame) non tiene conto della dimensione dei pennelli: assume sempre che lo spessore della linea sia zero (vedi l’immagine precedente).

Pertanto, per determinare l’area visibile dell’intero oggetto di inchiostro, è necessario considerare la dimensione del pennello delle sue tracce. Qui, l’oggetto target (la traccia di testo scritto a mano) è stato scalato alla dimensione del contenitore (frame). Quando la dimensione del contenitore cambia, la dimensione del pennello rimane costante, e viceversa.

ink_powerpoint5

PowerPoint utilizza un comportamento simile per gli oggetti di testo:

ink_powerpoint6

Controllare l’aspetto dell’inchiostro durante l’esportazione e il rendering

Aspose.Slides fornisce la classe InkOptions per controllare come gli oggetti di inchiostro appaiono nell’output esportato o renderizzato. È possibile utilizzare le sue proprietà per nascondere completamente l’inchiostro o modificare il modo in cui le operazioni di maschera del pennello di inchiostro sono interpretate.

Ink options sono disponibili attraverso le opzioni di esportazione o rendering per diversi tipi di output:

Output Proprietà opzioni Ink
PDF PdfOptions.getInkOptions
HTML HtmlOptions.getInkOptions
SVG SVGOptions.getInkOptions
TIFF TiffOptions.getInkOptions
Slide image RenderingOptions.getInkOptions

I seguenti metodi di InkOptions espongono le stesse due impostazioni:

Nascondere gli oggetti di inchiostro nell’output PDF

Per impostazione predefinita, gli oggetti di inchiostro rimangono visibili durante l’esportazione. Per creare un output pulito senza annotazioni scritte a mano o altri contenuti di inchiostro, chiamare InkOptions.setHideInk con true.

Il seguente esempio JavaScript esporta una presentazione in PDF nascondendo tutti gli oggetti di inchiostro:

const aspose = {
    slides: require("aspose.slides.via.java")
};

const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
    const pdfOptions = new aspose.slides.PdfOptions();
    pdfOptions.getInkOptions().setHideInk(true);

    presentation.save("presentation_without_ink.pdf", aspose.slides.SaveFormat.Pdf, pdfOptions);
} finally {
    presentation.dispose();
}

Nascondere gli oggetti di inchiostro durante il rendering di una diapositiva come immagine

Per nascondere gli oggetti di inchiostro durante il rendering delle diapositive come immagini bitmap, configurare RenderingOptions.getInkOptions e passare le opzioni di rendering a Slide.getImage.

Il seguente esempio JavaScript renderizza la prima diapositiva come immagine PNG senza oggetti di inchiostro:

const aspose = {
    slides: require("aspose.slides.via.java")
};

const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
    const renderingOptions = new aspose.slides.RenderingOptions();
    renderingOptions.getInkOptions().setHideInk(true);

    const slide = presentation.getSlides().get_Item(0);
    const image = slide.getImage(renderingOptions);
    try {
        image.save("slide_without_ink.png", aspose.slides.ImageFormat.Png);
    } finally {
        image.dispose();
    }
} finally {
    presentation.dispose();
}

Controllare il rendering della maschera di inchiostro

L’impostazione InkOptions.getInterpretMaskOpAsOpacity controlla come le operazioni di maschera sono interpretate durante il rendering dei pennelli di inchiostro. Il valore predefinito è true, che utilizza l’opacità. Per utilizzare invece l’operazione ROP, chiamare InkOptions.setInterpretMaskOpAsOpacity con false.

Il seguente esempio JavaScript esporta una diapositiva in SVG e utilizza il rendering basato su ROP per le operazioni di maschera di inchiostro:

const aspose = {
    slides: require("aspose.slides.via.java")
};
const java = require("java");

const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
    const svgOptions = new aspose.slides.SVGOptions();
    svgOptions.getInkOptions().setInterpretMaskOpAsOpacity(false);

    const outputStream = java.newInstanceSync("java.io.FileOutputStream", "slide.svg");
    try {
        const slide = presentation.getSlides().get_Item(0);
        slide.writeAsSvg(outputStream, svgOptions);
    } finally {
        outputStream.close();
    }
} finally {
    presentation.dispose();
}

La stessa impostazione può essere applicata tramite TiffOptions.getInkOptions quando si esporta una presentazione o si renderizza una diapositiva in TIFF.

Scegliere se nascondere o conservare l’inchiostro

Quando è necessaria una versione pulita di una presentazione annotata per la distribuzione senza segni di revisione, chiamare InkOptions.setHideInk con true durante l’esportazione.

Mantenere InkOptions.getHideInk al suo valore predefinito false quando le annotazioni di inchiostro fanno parte del contenuto previsto, ad esempio commenti di revisione, note scritte a mano, evidenziazioni o disegni che devono rimanere visibili nel risultato esportato. Questo consente alle applicazioni di generare output di revisione e finali separati dalla stessa presentazione senza modificare gli oggetti di inchiostro sorgente.

FAQ

Posso modificare il colore o la dimensione di un tratto di inchiostro esistente?

Sì. Ottieni la traccia da Ink.getTraces e poi modifica il suo InkTrace.getBrush. Chiama InkBrush.setColor o InkBrush.setSize per cambiare il pennello.

Nascondere l’inchiostro modifica la presentazione di origine?

No. Chiamare InkOptions.setHideInk influisce solo sul risultato renderizzato o esportato; non rimuove né modifica gli oggetti di inchiostro nella presentazione di origine.

Quali formati di esportazione supportano le opzioni di inchiostro?

È possibile configurare le opzioni di inchiostro per PDF, HTML, SVG, TIFF e immagini bitmap delle diapositive tramite le corrispondenti opzioni di esportazione o rendering illustrate sopra.

Approfondimenti