Python üzerinden Java ile Sunum Mürekkep Nesnelerini Yönet

Giriş

PowerPoint, serbest çizim darbeleri çizebilmenizi sağlayan bir mürekkep özelliği sunar. Mürekkep, diğer nesneleri vurgulamak, bağlantıları ve süreçleri göstermek ve bir slaytta belirli öğelere dikkat çekmek için kullanılabilir.

Aspose.Slides, mürekkep nesneleriyle çalışmak için gerekli türleri sağlar. Örneğin, Ink sınıfı bir slayttaki mürekkep nesnesini temsil eder.

Düzenli Nesneler ve Mürekkep Nesneleri Arasındaki Farklar

PowerPoint slaytındaki nesneler tipik olarak şekil nesneleriyle temsil edilir. En basit biçimde, bir şekil, nesnenin (çerçevesinin) alanını tanımlayan ve konteyner boyutu, şekil ve arka plan gibi özellikleri içeren bir kapsayıcıdır. Daha fazla bilgi için Shape Layout Format bölümüne bakın.

Ancak, PowerPoint bir mürekkep nesnesiyle ilgilenirken, çerçeve (kapsayıcı) özelliklerinin tümünü, yalnızca boyutunu hariç tutarak yok sayar. Kapsayıcı alanın boyutu standart Shape.getWidth ve Shape.getHeight yöntemleriyle belirlenir:

ink_powerpoint1

Mürekkep İzleri

Mürekkep izi, bir kullanıcının dijital mürekkep yazarken kalemin izini kaydetmek için kullanılan temel bir öğedir. Bir iz, birbirine bağlı noktaların bir dizisini saklar.

Kodlamanın en basit biçimi, her örnek noktanın X ve Y koordinatlarını belirtir. Tüm bağlı noktalar render edildiğinde aşağıdaki gibi bir görüntü oluştururlar:

ink_powerpoint2

Çizim İçin Fırça Özellikleri

Fırça, bir mürekkep izinin noktalarını birbirine bağlayan çizgileri çizmeye yarar. Fırçanın kendi rengi ve boyutu vardır; bu, InkBrush.getColor ve InkBrush.getSize yöntemleriyle temsil edilir.

Mürekkep Fırçası Rengini Ayarlama

Bu Python kodu, bir mürekkep fırçasının rengini nasıl ayarlayacağınızı gösterir:

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

Mürekkep Fırçası Boyutunu Ayarlama

Bu Python kodu, bir mürekkep fırçasının boyutunu nasıl ayarlayacağınızı gösterir:

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

Genel olarak, bir fırçanın genişliği ve yüksekliği eşleşmez, bu nedenle PowerPoint fırça boyutunu göstermez (ilgili veri bölümü gri tonludur). Fırça genişliği ve yüksekliği eşleştiğinde PowerPoint boyutu şu şekilde görüntüler:

ink_powerpoint3

Açıklık kazandırmak için, mürekkep nesnesinin yüksekliğini artırıp önemli boyutları gözden geçirelim:

ink_powerpoint4

Kapsayıcı (çerçeve), fırçaların boyutunu hesaba katmaz—her zaman çizgi kalınlığının sıfır olduğunu varsayar (önceki görsele bakın).

Bu nedenle, tüm mürekkep nesnesinin görünür alanını belirlemek için izlerinin fırça boyutu dikkate alınmalıdır. Burada hedef nesne (el yazısı izleri), kapsayıcının (çerçevenin) boyutuna ölçeklendirilmiştir. Kapsayıcının boyutu değiştiğinde fırça boyutu sabit kalır ve tersine de geçerlidir.

ink_powerpoint5

PowerPoint, metin nesneleri için benzer bir davranış sergiler:

ink_powerpoint6

Dışa Aktarım ve İşleme Sırasında Mürekkep Görünümünü Kontrol Etme

Aspose.Slides, dışa aktarılan veya render edilen çıktıda mürekkep nesnelerinin nasıl görüneceğini kontrol etmek için InkOptions sınıfını sağlar. Özelliklerini kullanarak mürekkebi tamamen gizleyebilir veya mürekkep fırça maske işlemlerinin yorumlanma şeklini değiştirebilirsiniz.

Mürekkep seçenekleri, çeşitli çıktı tipleri için dışa aktarma veya işleme seçenekleri aracılığıyla kullanılabilir:

Çıktı Mürekkep seçenekleri özelliği
PDF PdfOptions.getInkOptions
HTML HtmlOptions.getInkOptions
SVG SVGOptions.getInkOptions
TIFF TiffOptions.getInkOptions
Slide image RenderingOptions.getInkOptions

Aşağıdaki InkOptions yöntemleri aynı iki ayarı ortaya koyar:

  • getHideInk mürekkep nesnelerinin çıktıya dahil edilip edilmeyeceğini belirler. Varsayılan değeri Falsetır.
  • getInterpretMaskOpAsOpacity bir maske işleminin, bir mürekkep fırçası render edilirken opaklık olarak yorumlanıp yorumlanmayacağını belirler. Varsayılan değeri Truedır; bunun yerine ROP işlemini kullanmak için False ile setInterpretMaskOpAsOpacity çağırın.

PDF Çıktısında Mürekkep Nesnelerini Gizleme

Varsayılan olarak, mürekkep nesneleri dışa aktarma sırasında görünür kalır. El yazısı notları veya diğer mürekkep içerikleri olmadan temiz bir çıktı elde etmek için InkOptions.setHideInk yöntemini True ile çağırın.

Aşağıdaki Python örneği, tüm mürekkep nesnelerini gizleyerek bir sunumu PDF olarak dışa aktarır:

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

Bir Slaytı Görüntü Olarak İşlerken Mürekkep Nesnelerini Gizleme

Slaytları bitmap görüntü olarak render ederken mürekkep nesnelerini gizlemek için RenderingOptions.getInkOptions yapılandırın ve render seçeneklerini Slide.getImage metoduna iletin.

Aşağıdaki Python örneği, ilk slaytı mürekkep nesneleri olmadan PNG görüntüsü olarak render eder:

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

Mürekkep Maskesi İşlemesini Kontrol Etme

InkOptions.getInterpretMaskOpAsOpacity ayarı, mürekkep fırçaları render edilirken maske işlemlerinin nasıl yorumlanacağını kontrol eder. Varsayılan değer True olup opaklık kullanır. Bunun yerine ROP işlemini kullanmak için False ile InkOptions.setInterpretMaskOpAsOpacity çağırın.

Aşağıdaki Python örneği, bir slaytı SVG olarak dışa aktarır ve mürekkep maske işlemleri için ROP tabanlı render kullanır:

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

Aynı ayar, bir sunumu dışa aktarırken veya bir slaytı TIFF olarak render ederken TiffOptions.getInkOptions aracılığıyla da uygulanabilir.

Mürekkebi Gizlemeyi mi Saklamayı mı Seçin

Dağıtım için inceleme işaretleri olmayan temiz bir sunum sürümüne ihtiyacınız varsa, dışa aktarma sırasında InkOptions.setHideInk yöntemini True ile çağırın.

Mürekkep notları, el yazısı açıklamalar, vurgulamalar veya çizimler gibi içeriklerin dışa aktarılan sonuçta görünür kalması istendiğinde, InkOptions.getHideInk varsayılan False değerinde bırakın. Bu, aynı sunumdan kaynak mürekkep nesnelerini değiştirmeden ayrı inceleme ve son çıktılar üretebilmenizi sağlar.

SSS

Mevcut bir mürekkep darbesinin rengini veya boyutunu değiştirebilir miyim?

Evet. Ink.getTraces ile izi alın, ardından InkTrace.getBrush metodunu değiştirin. Rengi değiştirmek için InkBrush.setColor, boyutu değiştirmek için InkBrush.setSize metodunu çağırın.

Mürekkebi gizlemek kaynak sunumu değiştirir mi?

Hayır. InkOptions.setHideInk yalnızca render edilen veya dışa aktarılan sonucu etkiler; kaynak sunumdaki mürekkep nesnelerini kaldırmaz veya değiştirmez.

Hangi dışa aktarma formatları mürekkep seçeneklerini destekler?

PDF, HTML, SVG, TIFF ve bitmap slayt görüntüleri için yukarıda gösterilen ilgili dışa aktarma veya işleme seçenekleri aracılığıyla mürekkep seçeneklerini yapılandırabilirsiniz.

İlgili Okumalar