使用 Python via Java 管理簡報墨跡物件
簡介
PowerPoint 提供了墨跡功能,可讓您繪製自由形式的筆畫。墨跡可用於突出顯示其他物件、說明連接與流程,並將注意力引導至投影片上的特定項目。
Aspose.Slides 提供了操作墨跡物件所需的型別。例如,Ink 類別代表投影片上的墨跡物件。
常規物件與墨跡物件的差異
PowerPoint 投影片上的物件通常以形狀物件表示。最簡單的形式中,形狀是一個容器,定義了物件本身的區域(其框架)以及容器大小、形狀和背景等屬性。更多資訊,請參閱形狀版面格式。
然而,當 PowerPoint 處理墨跡物件時,會忽略框架(容器)的所有屬性,只保留其大小。容器區域的大小由標準的Shape.getWidth和Shape.getHeight 方法決定:

墨跡痕跡
墨跡痕跡是用來記錄使用者書寫數位墨跡時筆的軌跡的基本元素。痕跡儲存一系列相連的點。
最簡單的編碼形式指定每個取樣點的 X 與 Y 座標。當所有相連點被呈現時,會產生如下圖像:

繪圖筆刷屬性
筆刷用於繪製連接墨跡痕跡點的線條。筆刷具有自己的顏色與尺寸,由InkBrush.getColor和InkBrush.getSize 方法表示。
設定墨跡筆刷顏色
以下 Python 程式碼示範如何設定墨跡筆刷的顏色:
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()
設定墨跡筆刷尺寸
以下 Python 程式碼示範如何設定墨跡筆刷的尺寸:
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()
一般而言,筆刷的寬度與高度不相等,PowerPoint 不會顯示筆刷尺寸(相應的資料區段呈現灰色)。當筆刷寬度與高度相等時,PowerPoint 會以以下方式顯示其尺寸:

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

容器(框架)不會考慮筆刷的大小——它始終假設線條粗細為零(見前圖)。
因此,若要確定整個墨跡物件的可見區域,必須將其痕跡的筆刷尺寸納入考慮。此處,目標物件(手寫文字痕跡)已被縮放至容器(框架)的大小。當容器大小變更時,筆刷尺寸保持不變,反之亦然。

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

在匯出與轉譯期間控制墨跡外觀
Aspose.Slides 提供InkOptions 類別,讓您控制墨跡物件在匯出或轉譯輸出中的呈現方式。您可以使用其屬性來完全隱藏墨跡,或變更墨跡筆刷遮罩操作的詮釋方式。
墨跡選項可透過多種輸出類型的匯出或轉譯選項取得:
| 輸出 | Ink 選項屬性 |
|---|---|
| PdfOptions.getInkOptions | |
| HTML | HtmlOptions.getInkOptions |
| SVG | SVGOptions.getInkOptions |
| TIFF | TiffOptions.getInkOptions |
| 投影片圖像 | RenderingOptions.getInkOptions |
以下InkOptions 方法提供相同的兩個設定:
- getHideInk 決定是否在輸出中包含墨跡物件。預設值為
False。 - getInterpretMaskOpAsOpacity 決定在轉譯墨跡筆刷時,遮罩操作是否詮釋為不透明度。預設值為
True;如需改為使用 ROP 操作,請以False呼叫setInterpretMaskOpAsOpacity。
在 PDF 輸出中隱藏墨跡物件
預設情況下,匯出時會保留墨跡物件。如需產生不含手寫批註或其他墨跡內容的乾淨輸出,請以 True 呼叫InkOptions.setHideInk。
以下 Python 範例將簡報匯出為 PDF,同時隱藏全部墨跡物件:
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()
在將投影片轉譯為影像時隱藏墨跡物件
若要在將投影片轉譯為點陣圖影像時隱藏墨跡物件,請設定RenderingOptions.getInkOptions,並將轉譯選項傳遞給Slide.getImage。
以下 Python 範例將第一張投影片轉譯為 PNG 影像,且不含墨跡物件:
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()
控制墨跡遮罩的轉譯方式
InkOptions.getInterpretMaskOpAsOpacity 設定控制在轉譯墨跡筆刷時遮罩操作的詮釋方式。預設值 True 代表使用不透明度。若要改為使用 ROP 操作,請以 False 呼叫InkOptions.setInterpretMaskOpAsOpacity。
以下 Python 範例將投影片匯出為 SVG,並使用基於 ROP 的墨跡遮罩轉譯:
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()
相同設定也可透過TiffOptions.getInkOptions 在匯出簡報或將投影片轉譯為 TIFF 時套用。
選擇隱藏或保留墨跡
當您需要為發佈而產生不含批註標記的乾淨版本時,請於匯出期間以 True 呼叫InkOptions.setHideInk。
當墨跡批註是預期內容(如審閱意見、手寫筆記、重點標記或需保留的圖形)時,請保持InkOptions.getHideInk 的預設值 False。這讓應用程式能以同一簡報產生分開的審閱版與最終版,而無需修改來源墨跡物件。
常見問題
我可以變更既有墨跡筆劃的顏色或大小嗎?
可以。先從Ink.getTraces 取得痕跡,然後變更其InkTrace.getBrush。呼叫InkBrush.setColor或InkBrush.setSize 即可改變筆刷。
隱藏墨跡會改變來源簡報嗎?
不會。呼叫InkOptions.setHideInk 只會影響轉譯或匯出的結果;不會移除或修改來源簡報中的墨跡物件。
哪些匯出格式支援墨跡選項?
您可以透過上述對應的匯出或轉譯選項,為 PDF、HTML、SVG、TIFF 與點陣圖投影片影像設定墨跡選項。
進一步閱讀
- 若要了解一般形狀,請參閱PowerPoint 形狀章節。
- 若需了解有效值,請參閱形狀有效屬性。
- 有關 PDF 匯出的詳細資訊,請參閱將 PPT 與 PPTX 轉換為 PDF。
- 有關 HTML 匯出的詳細資訊,請參閱將 PowerPoint 簡報轉換為 HTML。
- 有關 SVG 匯出的詳細資訊,請參閱將簡報投影片轉譯為 SVG 影像。
- 有關 TIFF 匯出的詳細資訊,請參閱將 PowerPoint 簡報轉換為 TIFF。
- 有關投影片轉譯為影像的詳細資訊,請參閱將簡報投影片轉換為影像.