Quản lý các đối tượng mực trong PowerPoint bằng Python qua Java
Giới thiệu
PowerPoint cung cấp tính năng mực cho phép bạn vẽ các nét tự do. Mực có thể được dùng để làm nổi bật các đối tượng khác, hiển thị các kết nối và quy trình, và thu hút sự chú ý đến các mục cụ thể trên một slide.
Aspose.Slides cung cấp các kiểu cần thiết để làm việc với các đối tượng mực. Ví dụ, lớp Ink đại diện cho một đối tượng mực trên slide.
Sự khác biệt giữa Đối tượng Thông thường và Đối tượng Mực
Các đối tượng trên một slide PowerPoint thường được biểu diễn bằng các đối tượng hình dạng. Ở dạng đơn giản nhất, một hình dạng là một container xác định vùng của chính đối tượng (khung) cùng với các thuộc tính như kích thước container, hình dạng và nền. Để biết thêm thông tin, xem Định dạng bố cục hình dạng.
Tuy nhiên, khi PowerPoint xử lý một đối tượng mực, nó bỏ qua tất cả các thuộc tính của khung đối tượng (container) ngoại trừ kích thước của nó. Kích thước của vùng container được xác định bằng các phương thức tiêu chuẩn Shape.getWidth và Shape.getHeight:

Dấu vết Mực
Một dấu vết mực là thành phần cơ bản được sử dụng để ghi lại quỹ đạo của bút khi người dùng viết mực số. Một dấu vết lưu trữ một chuỗi các điểm được kết nối.
Dạng mã hóa đơn giản nhất chỉ định tọa độ X và Y của mỗi điểm mẫu. Khi tất cả các điểm được kết nối và hiển thị, chúng tạo thành một hình ảnh như sau:

Thuộc tính Cọ để Vẽ
Cọ được sử dụng để vẽ các đường nối các điểm của một dấu vết mực. Cọ có màu và kích thước riêng, được đại diện bởi các phương thức InkBrush.getColor và InkBrush.getSize.
Đặt Màu Cọ Mực
Đoạn mã Python sau cho thấy cách đặt màu cho một cọ mực:
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()
Đặt Kích thước Cọ Mực
Đoạn mã Python sau cho thấy cách đặt kích thước cho một cọ mực:
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()
Thông thường, chiều rộng và chiều cao của cọ không bằng nhau, vì vậy PowerPoint không hiển thị kích thước cọ (phần dữ liệu tương ứng bị làm mờ). Khi chiều rộng và chiều cao của cọ bằng nhau, PowerPoint hiển thị kích thước của nó như sau:

Để làm rõ, hãy tăng chiều cao của đối tượng mực và xem lại các kích thước quan trọng:

Container (khung) không tính đến kích thước của các cọ — nó luôn giả định độ dày đường nét bằng 0 (xem hình ảnh trước).
Do đó, để xác định vùng hiển thị của toàn bộ đối tượng mực, phải tính đến kích thước cọ của các dấu vết. ở đây, đối tượng mục tiêu (dấu vết văn bản viết tay) đã được mở rộng tới kích thước của container (khung). Khi kích thước container thay đổi, kích thước cọ vẫn không đổi, và ngược lại.

PowerPoint sử dụng hành vi tương tự cho các đối tượng văn bản:

Kiểm soát Hiển thị Mực Khi Xuất và Khi Kết xuất
Aspose.Slides cung cấp lớp InkOptions để kiểm soát cách các đối tượng mực xuất hiện trong đầu ra đã xuất hoặc đã kết xuất. Bạn có thể sử dụng các thuộc tính của nó để ẩn hoàn toàn mực hoặc thay đổi cách các phép vận hành mặt nạ cọ mực được diễn giải.
Các tùy chọn mực có sẵn thông qua các tùy chọn xuất hoặc kết xuất cho một số loại đầu ra:
| Đầu ra | Thuộc tính tùy chọn mực |
|---|---|
| PdfOptions.getInkOptions | |
| HTML | HtmlOptions.getInkOptions |
| SVG | SVGOptions.getInkOptions |
| TIFF | TiffOptions.getInkOptions |
| Ảnh slide | RenderingOptions.getInkOptions |
Các phương thức InkOptions sau công bố hai cài đặt giống nhau:
- getHideInk xác định liệu các đối tượng mực có được bao gồm trong đầu ra hay không. Giá trị mặc định là
False. - getInterpretMaskOpAsOpacity xác định liệu một phép vận hành mặt nạ có được diễn giải là độ mờ khi kết xuất cọ mực hay không. Giá trị mặc định là
True; gọi setInterpretMaskOpAsOpacity vớiFalseđể sử dụng phép ROP thay thế.
Ẩn Đối tượng Mực trong Đầu ra PDF
Mặc định, các đối tượng mực vẫn hiển thị khi xuất. Để tạo ra đầu ra sạch sẽ không có các chú thích viết tay hay nội dung mực khác, gọi InkOptions.setHideInk với True.
Ví dụ Python sau xuất một bản trình chiếu ra PDF đồng thời ẩn tất cả các đối tượng mực:
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()
Ẩn Đối tượng Mực Khi Kết xuất Slide thành Ảnh
Để ẩn các đối tượng mực khi kết xuất các slide thành ảnh bitmap, cấu hình RenderingOptions.getInkOptions và truyền các tùy chọn kết xuất cho Slide.getImage.
Ví dụ Python dưới đây kết xuất slide đầu tiên thành ảnh PNG mà không có đối tượng mực:
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()
Kiểm soát Kết xuất Mặt nạ Mực
Cài đặt InkOptions.getInterpretMaskOpAsOpacity kiểm soát cách các phép vận hành mặt nạ được diễn giải khi kết xuất cọ mực. Giá trị mặc định là True, tức là sử dụng độ mờ. Để dùng phép ROP thay thế, gọi InkOptions.setInterpretMaskOpAsOpacity với False.
Ví dụ Python sau xuất một slide ra SVG và sử dụng kết xuất dựa trên ROP cho các phép vận hành mặt nạ mực:
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()
Cài đặt tương tự cũng có thể được áp dụng qua TiffOptions.getInkOptions khi xuất bản trình chiếu hoặc kết xuất slide thành TIFF.
Chọn Ẩn hay Giữ lại Mực
Khi bạn cần một phiên bản sạch sẽ của bản trình chiếu có chú thích để phân phối mà không có dấu đánh giá, gọi InkOptions.setHideInk với True trong quá trình xuất.
Giữ InkOptions.getHideInk ở giá trị mặc định False khi các chú thích mực là một phần của nội dung dự định, chẳng hạn như bình luận đánh giá, ghi chú viết tay, tô sáng hoặc bản vẽ cần hiển thị trong kết quả xuất. Điều này cho phép các ứng dụng tạo ra các đầu ra đánh giá và cuối cùng riêng biệt từ cùng một bản trình chiếu mà không cần sửa đổi các đối tượng mực nguồn.
Câu hỏi thường gặp
Tôi có thể thay đổi màu hoặc kích thước của một nét mực đã tồn tại không?
Có. Lấy dấu vết từ Ink.getTraces, sau đó thay đổi InkTrace.getBrush. Gọi InkBrush.setColor hoặc InkBrush.setSize để thay đổi cọ.
Việc ẩn mực có thay đổi bản trình chiếu nguồn không?
Không. Gọi InkOptions.setHideInk chỉ ảnh hưởng đến kết quả đã xuất hoặc đã kết xuất; nó không loại bỏ hay sửa đổi các đối tượng mực trong bản trình chiếu nguồn.
Định dạng xuất nào hỗ trợ các tùy chọn mực?
Bạn có thể cấu hình tùy chọn mực cho PDF, HTML, SVG, TIFF và ảnh slide bitmap thông qua các tùy chọn xuất hoặc kết xuất tương ứng được liệt kê ở trên.
Đọc thêm
- Để tìm hiểu về các hình dạng nói chung, xem phần PowerPoint Shapes.
- Để biết thêm thông tin về các giá trị hiệu quả, xem Shape Effective Properties.
- Để biết chi tiết về xuất PDF, xem Convert PPT and PPTX to PDF.
- Để biết chi tiết về xuất HTML, xem Convert PowerPoint Presentations to HTML.
- Để biết chi tiết về xuất SVG, xem Render Presentation Slides as SVG Images.
- Để biết chi tiết về xuất TIFF, xem Convert PowerPoint Presentations to TIFF.
- Để biết chi tiết về kết xuất slide thành ảnh, xem Convert Presentation Slides to Images.