管理 JavaScript 中的簡報墨跡物件

介紹

PowerPoint 提供了墨跡功能,讓您可以自由繪製筆畫。墨跡可用於標示其他物件、顯示連線與流程,並吸引觀眾注意投影片上的特定項目。

Aspose.Slides 提供了處理墨跡物件所需的類型。例如,Ink 類別代表投影片上的墨跡物件。

常規對象與墨跡對象的差異

PowerPoint 投影片上的物件通常以形狀 (shape) 物件表示。最簡單的形狀是一個容器,定義了物件本身的區域(框架),以及容器大小、形狀與背景等屬性。更多資訊請參閱 Shape Layout Format

然而,當 PowerPoint 處理墨跡物件時,除大小外會忽略框架(容器)的所有屬性。容器區域的大小由標準的 Shape.getWidthShape.getHeight 方法決定:

ink_powerpoint1

墨跡軌跡

墨跡軌跡是用來記錄使用者書寫數位墨跡時筆尖軌跡的基本元素。軌跡儲存一系列相連的點。

最簡單的編碼形式指定每個取樣點的 X 與 Y 座標。當所有相連點被渲染時,會產生如下圖像:

ink_powerpoint2

繪圖筆刷屬性

筆刷用於繪製連接墨跡軌跡點的線條。筆刷具有自己的顏色與大小,分別透過 InkBrush.getColorInkBrush.getSize 方法取得。

設定墨跡筆刷顏色

此 JavaScript 程式碼示範如何設定墨跡筆刷的顏色:

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

設定墨跡筆刷大小

此 JavaScript 程式碼示範如何設定墨跡筆刷的大小:

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

一般而言,筆刷的寬度與高度不相等,PowerPoint 因此不會顯示筆刷大小(相應的資料區段呈灰色)。當筆刷寬高相等時,PowerPoint 會以以下方式顯示其大小:

ink_powerpoint3

為了更清楚,我們將墨跡物件的高度提升,並檢視重要的尺寸:

ink_powerpoint4

容器(框架)不會考慮筆刷的大小——它總是假設線條粗細為零(見前圖)。

因此,要判斷整個墨跡物件的可見區域,必須將其軌跡的筆刷大小納入計算。此處,目標物件(手寫文字軌跡)已縮放至容器(框架)的大小。當容器尺寸變化時,筆刷大小保持不變,反之亦然。

ink_powerpoint5

PowerPoint 對文字物件也採用類似的行為:

ink_powerpoint6

控制匯出與呈現時的墨跡外觀

Aspose.Slides 提供了 InkOptions 類別,以控制墨跡物件在匯出或呈現結果中的顯示方式。您可以使用其屬性完全隱藏墨跡,或變更墨跡筆刷遮罩操作的解釋方式。

墨跡選項可透過多種輸出類型的匯出或呈現選項取得:

輸出 墨跡選項屬性
PDF PdfOptions.getInkOptions
HTML HtmlOptions.getInkOptions
SVG SVGOptions.getInkOptions
TIFF TiffOptions.getInkOptions
投影片影像 RenderingOptions.getInkOptions

以下 InkOptions 方法提供相同的兩項設定:

在 PDF 輸出中隱藏墨跡對象

預設情況下,匯出時墨跡仍可見。若要產生不含手寫註釋或其他墨跡內容的乾淨輸出,請以 true 呼叫 InkOptions.setHideInk

以下 JavaScript 範例將簡報匯出為 PDF,並隱藏所有墨跡物件:

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

在將投影片渲染為影像時隱藏墨跡對象

若要在將投影片渲染為點陣圖影像時隱藏墨跡,請設定 RenderingOptions.getInkOptions,並將渲染選項傳遞給 Slide.getImage

以下 JavaScript 範例將第一張投影片渲染為 PNG 影像,且不包含墨跡:

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

控制墨跡遮罩的呈現方式

InkOptions.getInterpretMaskOpAsOpacity 設定控制在呈現墨跡筆刷時,遮罩操作的解釋方式。預設為 true(使用不透明度)。若要改用 ROP 操作,請以 false 呼叫 InkOptions.setInterpretMaskOpAsOpacity

以下 JavaScript 範例將投影片匯出為 SVG,並使用基於 ROP 的墨跡遮罩渲染:

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

在匯出簡報或將投影片渲染為 TIFF 時,也可透過 TiffOptions.getInkOptions 套用相同設定。

選擇隱藏或保留墨跡

當需要為發佈而產生不含審閱標記的乾淨版本時,請在匯出期間以 true 呼叫 InkOptions.setHideInk

若墨跡註解是內容的一部份(例如審閱意見、手寫筆記、標示或圖形),則保持 InkOptions.getHideInk 的預設值 false。這讓應用程式能在同一簡報上產生審閱版與最終版,而無需修改原始墨跡物件。

常見問題

我可以變更已存在的墨跡筆畫的顏色或大小嗎?

可以。先從 Ink.getTraces 取得軌跡,然後變更其 InkTrace.getBrush。再呼叫 InkBrush.setColorInkBrush.setSize 即可更改筆刷。

隱藏墨跡會改變來源簡報嗎?

不會。呼叫 InkOptions.setHideInk 僅影響渲染或匯出結果,並不會移除或修改來源簡報中的墨跡物件。

哪些匯出格式支援墨跡選項?

您可以透過上表所示的對應匯出或呈現選項,為 PDF、HTML、SVG、TIFF 以及點陣圖投影片影像設定墨跡選項。

進一步閱讀