Şekilleri Belgeden Ayrı Olarak Oluşturma

Belgeleri işlerken ortak bir görev, belgede bulunan tüm görüntüleri çıkarmak ve bunları harici bir konuma aktarmaktır. Bu görev, halihazırda görüntü verilerinin çıkarılması ve kaydedilmesi işlevselliğini sağlayan Aspose.Words API ile basitleşiyor. Ancak bazen, paragraflar, ok şekilleri ve küçük bir resim içeren bir metin kutusu gibi farklı türde bir çizim nesnesi tarafından temsil edilen diğer grafik içeriğini de benzer şekilde çıkarmak isteyebilirsiniz. Bireysel içerik öğelerinin birleşimi olduğundan bu nesneyi oluşturmanın doğrudan bir yolu yoktur. İçeriklerin tek bir görüntü gibi görünen nesne halinde gruplandırıldığı bir durumla da karşılaşabilirsiniz.

Aspose.Words, bir şekilden basit bir görüntüyü oluşturulmuş içerik olarak çıkarabildiğiniz şekilde, bu tür içeriği ayıklamak için işlevsellik sağlar. Bu makalede, şekilleri belgeden bağımsız olarak oluşturmak için bu işlevin nasıl kullanılacağı açıklanmaktadır.

Aspose.Words’teki Şekil Türleri

Bir belge çizim katmanındaki tüm içerik, Aspose.Words Belge Nesnesi Modülünde (DOM) Shape veya GroupShape düğümü tarafından temsil edilir. Bu tür içerikler metin kutuları, resimler, Otomatik Şekiller, OLE nesneleri vb. olabilir. INCLUDEPICTURE alanı gibi bazı alanlar da şekil olarak içe aktarılır.

Basit bir görüntü, ShapeType.IMAGE‘nin Shape düğümü ile temsil edilir. Bu şekil düğümünün alt düğümleri yoktur ancak bu şekil düğümünün içerdiği görüntü verilerine Shape.image_data özelliği tarafından erişilebilir. Öte yandan bir şekil birçok alt düğümden de oluşabilir. Örneğin ShapeType.TEXT_BOX özelliğiyle temsil edilen bir metin kutusu şekli Paragraph ve Table gibi birçok düğümden oluşabilir. Çoğu şekil Paragraph ve Table blok düzeyi düğümlerini içerebilir. Bunlar ana gövdede görünenlerle aynı düğümlerdir. Şekiller her zaman bir paragrafın parçalarıdır; ya doğrudan satır içi olarak eklenir ya da Paragraph‘a sabitlenir, ancak belge sayfasının herhangi bir yerinde “yüzer”.

rendering-shapes-separately-from-a-document_1

Bir belge aynı zamanda birlikte gruplandırılmış şekiller de içerebilir. Grouping, Microsoft Word’de birden fazla nesne seçilerek ve sağ tıklama menüsünde “Group” tıklatılarak etkinleştirilebilir.

rendering-shapes-separately-from-a-document_2

Aspose.Words’te bu şekil grupları GroupShape düğümü tarafından temsil edilir. Bunlar aynı zamanda tüm grubun görüntüye dönüştürülmesi için aynı şekilde çağrılabilir.

rendering-shapes-separately-from-a-document_3

DOCX formatı diyagramlar veya çizelgeler gibi özel türde görseller içerebilir. Bu şekiller aynı zamanda Aspose.Words’deki Shape düğümü aracılığıyla da temsil edilir; bu da onları görüntü olarak işlemek için benzer bir yöntem sağlar. Tasarım gereği, bir şekil, o şekil bir görüntü (ShapeType.IMAGE) olmadığı sürece, çocuk olarak başka bir şekil içeremez. Örneğin Microsoft Word, başka bir metin kutusunun içine metin kutusu eklemenize izin vermez.

Yukarıda açıklanan şekil türleri, şekilleri ShapeRenderer sınıfı aracılığıyla oluşturmak için özel bir yöntem sağlar. ShapeRenderer sınıfının bir örneği, bir Shape veya GroupShape için get_shape_renderer yöntemi aracılığıyla veya Shape‘nin ShapeRenderer sınıfının yapıcısına iletilmesiyle alınır. Bu sınıf, aşağıdakilere şekil oluşturmaya izin veren üyelere erişim sağlar:

  • Diskteki dosya
  • Aktarım

Dosyaya veya Akışa İşleme

save yöntemi, bir şekli doğrudan bir dosyaya veya akışa aktaran aşırı yüklemeler sağlar. Her iki aşırı yükleme de şeklin oluşturulmasına yönelik seçeneklerin tanımlanmasına izin veren ImageSaveOptions sınıfının bir örneğini kabul eder. Bu, Document.save yöntemiyle aynı şekilde çalışır. Bu parametre gerekli olmasına rağmen, özel seçenek olmadığını belirterek boş bir değer iletebilirsiniz.

Şekil, SaveFormat numaralandırmasında belirtilen herhangi bir görüntü formatında dışa aktarılabilir. Örneğin görüntü, SaveFormat.JPEG numaralandırması belirtilerek JPEG gibi bir raster görüntü olarak veya SaveFormat.EMF belirtilerek EMF gibi bir vektör görüntüsü olarak oluşturulabilir.

Aşağıdaki kod örneği, bir şeklin EMF görüntüsüne belgeden ayrı olarak işlenmesini ve diske kaydedilmesini gösterir:

r = shape.get_shape_renderer()

# Define custom options which control how the image is rendered. Render the shape to the JPEG raster format.
imageOptions = aw.saving.ImageSaveOptions(aw.SaveFormat.EMF)
imageOptions.scale = 1.5
        
# Save the rendered image to disk.
r.save(docs_base.artifacts_dir + "TestFile.RenderToDisk_out.emf", imageOptions)

Aşağıdaki kod örneği, bir şeklin belgeden ayrı olarak bir JPEG görüntüsüne işlenmesini ve bir akışa kaydedilmesini gösterir:

r = shape.get_shape_renderer()

# Define custom options which control how the image is rendered. Render the shape to the vector format EMF.
imageOptions = aw.saving.ImageSaveOptions(aw.SaveFormat.JPEG)
        
# Output the image in gray scale
imageOptions.image_color_mode = aw.saving.ImageColorMode.GRAYSCALE

# Reduce the brightness a bit (default is 0.5f).
imageOptions.image_brightness = 0.45
        
stream =  io.FileIO(docs_base.artifacts_dir + "TestFile.RenderToStream_out.jpg", "w+b")

# Save the rendered image to the stream using different options.
r.save(stream, imageOptions)

# Close the stream
stream.close()

ImageSaveOptions sınıfı, görüntünün nasıl oluşturulacağını kontrol eden çeşitli seçenekleri belirtmenize olanak tanır. Yukarıda açıklanan işlevsellik aynı şekilde GroupShape ve Shape düğümlerine de uygulanabilir.

Şekil Görüntüsü Oluşturma

Shape sınıfı, çizim katmanındaki Otomatik Şekil, metin kutusu, serbest biçim, OLE nesnesi, ActiveX denetimi veya resim gibi nesneleri temsil eder. Shape sınıfını kullanarak bir Microsoft Word belgesinde şekiller oluşturabilir veya değiştirebilirsiniz. Bir şeklin önemli bir özelliği shape_type‘dir. Farklı türlerdeki şekiller, bir Word belgesinde farklı yeteneklere sahip olabilir. Örneğin, yalnızca görüntü ve OLE şekillerinin içinde görüntüler bulunabilirken, çoğu şeklin yalnızca metni olabilir.

Aşağıdaki örnek, Shape görüntüsünün belgeden ayrı olarak JPEG görüntüsüne nasıl dönüştürüleceğini ve diske nasıl kaydedileceğini gösterir:

# Save the rendered image to disk.
shape.get_shape_renderer().save(docs_base.artifacts_dir + "TestFile.RenderShapeImage.jpeg", None)

Şekil Boyutunu Alma

ShapeRenderer sınıfı ayrıca get_size_in_pixels yöntemi aracılığıyla şeklin boyutunu piksel cinsinden alma işlevselliği de sağlar. Bu yöntem, şekil oluşturulduğunda şekil boyutunun hesaplanmasında kullanılan ölçek ve DPI olmak üzere iki kayan (Tek) parametreyi kabul eder. Yöntem, hesaplanan boyutun genişliğini ve yüksekliğini içeren Size nesnesini döndürür. Bu, oluşturulan şeklin boyutunun önceden bilinmesi gerektiğinde kullanışlıdır. size_in_points özelliği, nokta cinsinden ölçülen Şekil boyutunu döndürür. Sonuç, genişliği ve yüksekliği içeren bir SizeF nesnesidir. Ayrıca şeklin gerçek sınırlarını elde etmek için bounds_in_points özelliğini kullanabilirsiniz.