Şekilleri Belgeden Ayrı Oluşturma

Belgeleri işlerken ortak bir görev, belgede bulunan tüm görüntüleri ayıklamak ve bunları harici bir konuma dışa aktarmaktır. Bu görev, görüntü verilerini ayıklamak ve kaydetmek için zaten işlevsellik sağlayan Aspose.Words API ile basitleşir. Bununla birlikte, bazen paragraflar, ok şekilleri ve küçük bir resim içeren bir metin kutusu gibi farklı türde bir çizim nesnesiyle temsil edilen diğer grafik içerik türlerini de benzer şekilde çıkarmak isteyebilirsiniz. Tek tek içerik öğelerinin bir birleşimi olduğu için bu nesneyi oluşturmanın basit bir yolu yoktur. Ayrıca, içeriğin tek bir görüntüye benzeyen nesneye gruplandırıldığı bir durumla da karşılaşabilirsiniz.

Aspose.Words, bu tür içeriği, işlenen içerikle şekilden basit bir görüntü çıkarabileceğiniz gibi çıkarmak 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çıklanır.

Aspose.Words içindeki Şekil Türleri

Belge çizim katmanındaki tüm içerik, Aspose.Words Belge Nesnesi Modülündeki (DOM) Shape veya GroupShape düğümü ile temsil edilir. Bu tür içerikler metin kutuları, resimler, AutoShapes, OLE nesneler vb. Olabilir. Bazı alanlar şekil olarak da içe aktarılır, örneğin INCLUDEPICTURE alanı.

Basit bir görüntü, ShapeType.Image ‘nin Shape düğümü ile temsil edilir. Bu şekil düğümünde alt düğüm yoktur, ancak bu şekil düğümünde bulunan görüntü verilerine Shape.ImageData özelliği ile erişilebilir. Öte yandan, bir şekil birçok alt düğümden de oluşabilir. Örneğin, ShapeType.TextBox özelliği ile temsil edilen bir metin kutusu şekli, Paragraph ve Table gibi birçok düğümden oluşabilir. Çoğu şekil Paragraph ve Table blok düzeyinde düğümleri 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çine dahil edilir ya da Paragraph, ‘e sabitlenir, ancak belge sayfasının herhangi bir yerinde “yüzer”.

rendering-shapes-separately-from-a-document-aspose-words-cpp-1

Bir belge, birlikte gruplandırılmış şekiller de içerebilir. Gruplama, birden çok nesne seçip sağ tıklama menüsünde “Grupla” yı tıklatarak Microsoft Word ‘da etkinleştirilebilir.

rendering-shapes-separately-from-a-document-aspose-words-cpp-2

Aspose.Words ‘de, bu şekil grupları GroupShape düğümü ile temsil edilir. Bunlar, tüm grubu görüntüye dönüştürmek için aynı şekilde çağrılabilir.

rendering-shapes-separately-from-a-document-aspose-words-cpp-3

DOCX biçimi, diyagramlar veya grafikler gibi özel görüntü türleri içerebilir. Bu şekiller ayrıca Aspose.Words içindeki Shape düğümü aracılığıyla temsil edilir ve bu da onları görüntü olarak oluşturmak için benzer bir yöntem sağlar. Tasarım gereği, bu şekil bir görüntü (ShapeType.Image) olmadıkça, bir şekil çocuk olarak başka bir şekil içeremez. Örneğin, Microsoft Word başka bir metin kutusunun içine bir metin kutusu eklemenize izin vermez.

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

  • Save yöntemini kullanarak diskteki dosyayı aşırı yükleme
  • Save yöntemini kullanarak akış aşırı yükleme
  • RenderToSize ve RenderToScale yöntemlerini kullanarak Graphics Nesnesi

Dosyaya veya Akışa Oluşturma

Save yöntemi, bir şekli doğrudan bir dosyaya veya akışa işleyen aşırı yükler sağlar. Her iki aşırı yük de ImageSaveOptions sınıfının bir örneğini kabul eder ve bu, şekli oluşturmak için seçeneklerin tanımlanmasına izin verir. Bu, Document.Save yöntemiyle aynı şekilde çalışır. Bu parametre gerekli olsa da, özel seçenek olmadığını belirterek boş bir değer iletebilirsiniz.

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

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

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<ShapeRenderer> r = shape->GetShapeRenderer();
// Define custom options which control how the image is rendered. Render the shape to the JPEG raster format.
System::SharedPtr<ImageSaveOptions> imageOptions = System::MakeObject<ImageSaveOptions>(SaveFormat::Emf);
imageOptions->set_Scale(1.5f);
System::String outputPath = outputDataDir + u"RenderShape.RenderShapeToDisk.emf";
// Save the rendered image to disk.
r->Save(outputPath, imageOptions);

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

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<ShapeRenderer> r = System::MakeObject<ShapeRenderer>(shape);
// Define custom options which control how the image is rendered. Render the shape to the vector format EMF.
System::SharedPtr<ImageSaveOptions> imageOptions = System::MakeObject<ImageSaveOptions>(SaveFormat::Jpeg);
imageOptions->set_ImageColorMode(ImageColorMode::Grayscale);
imageOptions->set_ImageBrightness(0.45f);
System::String outputPath = outputDataDir + u"RenderShape.RenderShapeToStream.jpg";
System::SharedPtr<System::IO::FileStream> stream = System::MakeObject<System::IO::FileStream>(outputPath, System::IO::FileMode::Create);
// Save the rendered image to the stream using different options.
r->Save(stream, imageOptions);

ImageSaveOptions sınıfı, görüntünün nasıl işleneceğini denetleyen çeşitli seçenekler belirlemenizi sağlar. Yukarıda açıklanan işlevler GroupShape ve Shape düğümlerine aynı şekilde uygulanabilir.

.NET Grafik Nesnesine Oluşturma

Doğrudan bir Graphics nesnesine oluşturma, kendi ayarlarınızı ve Graphics nesnesinin durumunu tanımlamanıza olanak tanır. Yaygın bir senaryo, bir şeklin doğrudan bir Windows Formundan veya bir Bitmapten alınan bir Graphics nesnesine oluşturulmasını içerir. Shape düğümü oluşturulduğunda, ayarlar şekil görünümünü etkiler. Örneğin, Graphics nesnesi için RotateTransform veya ScaleTransform yöntemlerini kullanarak şekli döndürebilir veya ölçekleyebilirsiniz.

Aşağıdaki örnek, bir şeklin nasıl oluşturulacağını gösterir.NET Graphics belgeden ayrı olarak nesne oluşturun ve oluşturulan görüntüye döndürme uygulayın:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<ShapeRenderer> r = shape->GetShapeRenderer();
// Find the size that the shape will be rendered to at the specified scale and resolution.
System::Drawing::Size shapeSizeInPixels = r->GetSizeInPixels(1.0f, 96.0f);
// Rotating the shape may result in clipping as the image canvas is too small. Find the longest side
// And make sure that the graphics canvas is large enough to compensate for this.
int32_t maxSide = System::Math::Max(shapeSizeInPixels.get_Width(), shapeSizeInPixels.get_Height());
{
// Clearing resources under 'using' statement
DisposableHolder<System::Drawing::Bitmap> imageHolder(System::MakeObject<System::Drawing::Bitmap>((int32_t)(maxSide * 1.25), (int32_t)(maxSide * 1.25)));
{
// Rendering to a graphics object means we can specify settings and transformations to be applied to
// The shape that is rendered. In our case we will rotate the rendered shape.
// Clearing resources under 'using' statement
DisposableHolder<System::Drawing::Graphics> grHolder(System::Drawing::Graphics::FromImage(imageHolder.GetObject()));
// Clear the shape with the background color of the document.
grHolder.GetObject()->Clear(shape->get_Document()->get_PageColor());
// Center the rotation using translation method below
grHolder.GetObject()->TranslateTransform((float)imageHolder.GetObject()->get_Width() / 8, (float)imageHolder.GetObject()->get_Height() / 2);
// Rotate the image by 45 degrees.
grHolder.GetObject()->RotateTransform(45.0f);
// Undo the translation.
grHolder.GetObject()->TranslateTransform(-(float)imageHolder.GetObject()->get_Width() / 8, -(float)imageHolder.GetObject()->get_Height() / 2);
// Render the shape onto the graphics object.
r->RenderToSize(grHolder.GetObject(), 0.0f, 0.0f, shapeSizeInPixels.get_Width(), shapeSizeInPixels.get_Height());
}
System::String outputPath = outputDataDir + u"RenderShape.RenderShapeToGraphics.png";
imageHolder.GetObject()->Save(outputPath, System::Drawing::Imaging::ImageFormat::get_Png());
std::cout << "Shape rendered to graphics successfully." << std::endl << "File saved at " << outputPath.ToUtf8String() << std::endl;
}

RenderToSize yöntemine benzer şekilde, NodeRendererBase ‘den devralınan RenderToSize yöntemi, belge içeriğinin küçük resimlerini oluşturmak için kullanışlıdır. Şekil boyutu yapıcı aracılığıyla belirtilir. RenderToSize yöntemi, Graphics nesnesini, görüntü konumunun X ve Y koordinatlarını ve Graphics nesnesine çizilecek görüntünün boyutunu (genişlik ve yükseklik) kabul eder.

Shape, NodeRendererBase sınıfından devralınan ShapeRenderer.RenderToScale yöntemi kullanılarak belirli bir ölçeğe dönüştürülebilir. Bu, aynı ana parametreleri kabul eden Document.RenderToScale yöntemine benzer. Bu iki yöntem arasındaki fark, ShapeRenderer.RenderToScale yöntemiyle, değişmez bir boyut yerine, şekli oluşturma sırasında ölçeklendiren bir kayan nokta değeri seçmenizdir. Float değeri 1.0 değerine eşitse, şeklin şu adreste oluşturulmasına neden olur: 100% orijinal boyutunda. Float değeri 0.5 görüntü boyutunu yarı yarıya azaltır.

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

Shape sınıfı, çizim katmanındaki AutoShape, metin kutusu, serbest form, 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 ShapeType ‘dır. Farklı türlerdeki şekiller, bir Word belgesinde farklı yeteneklere sahip olabilir. Örneğin, yalnızca resimler ve OLE şekiller içlerinde resimlere sahip olabilirken, şekillerin çoğunda yalnızca metin olabilir.

Aşağıdaki örnek, bir Şekil görüntüsünün belgeden ayrı olarak JPEG görüntüye nasıl oluşturulacağını ve diske nasıl kaydedileceğini gösterir:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::String outputPath = outputDataDir + u"RenderShape.RenderShapeImage.jpg";
// Save the Shape image to disk in JPEG format and using default options.
shape->GetShapeRenderer()->Save(outputPath, nullptr);

Şekil Boyutunu Alma

ShapeRenderer sınıfı ayrıca GetSizeInPixels yöntemi aracılığıyla şeklin boyutunu piksel cinsinden almak için işlevsellik sağlar. Bu yöntem, şekil oluşturulduğunda şekil boyutunun hesaplanmasında kullanılan ölçek ve DPI olmak üzere iki kayan nokta türü (Tek) parametresini kabul eder. Yöntem, hesaplanan boyutun genişliğini ve yüksekliğini içeren Size nesnesini döndürür. Bu, işlenen şeklin boyutunu önceden bilmek gerektiğinde, örneğin işlenen çıktıdan yeni bir Bitmap oluştururken kullanışlıdır.

Aşağıdaki örnek, işlenecek şeklin genişliği ve yüksekliği ile yeni bir Bitmap ve Grafik nesnesinin nasıl oluşturulacağını gösterir:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::Drawing::SizeF shapeSizeInDocument = shape->GetShapeRenderer()->get_SizeInPoints();
float width = shapeSizeInDocument.get_Width();
// The width of the shape.
float height = shapeSizeInDocument.get_Height();
// The height of the shape.
System::Drawing::Size shapeRenderedSize = shape->GetShapeRenderer()->GetSizeInPixels(1.0f, 96.0f);
{
// Clearing resources under 'using' statement
DisposableHolder<System::Drawing::Bitmap> imageHolder(System::MakeObject<System::Drawing::Bitmap>(shapeRenderedSize.get_Width(), shapeRenderedSize.get_Height()));
{
// Clearing resources under 'using' statement
DisposableHolder<System::Drawing::Graphics> gHolder(System::Drawing::Graphics::FromImage(imageHolder.GetObject()));
// Render shape onto the graphics object using the RenderToScale or RenderToSize methods of ShapeRenderer class.
}
}

RenderToSize veya RenderToScale yöntemlerini kullanırken, işlenen görüntü boyutu da SizeF nesnesinde döndürülür. Bu, bir değişkene atanabilir ve gerekirse kullanılabilir.

SizeInPoints özelliği, nokta cinsinden ölçülen Şekil boyutunu döndürür (bkz. ShapeRenderer. Sonuç, genişliği ve yüksekliği içeren bir SizeF nesnesidir.