עיבוד צורות בנפרד ממסמך
בעת עיבוד מסמכים, משימה נפוצה היא לחלץ את כל התמונות שנמצאות במסמך ולייצא אותן למיקום חיצוני. משימה זו הופכת לפשוטה עם Aspose.Words API, שכבר מספק את הפונקציונליות לחילוץ ושמירת נתוני תמונה. עם זאת, לפעמים ייתכן שתרצה לחלץ באופן דומה סוגים אחרים של תוכן גרפי המיוצג על ידי סוג אחר של אובייקט ציור, לדוגמה, תיבת טקסט המכילה פסקאות, צורות חץ ותמונה קטנה. אין דרך פשוטה להציג את האובייקט הזה, מכיוון שהוא שילוב של אלמנטים תוכן בודדים. ייתכן שתיתקל גם במקרה שבו התוכן קובץ יחד לאובייקט שנראה כמו תמונה אחת.
Aspose.Words מספק פונקציונלי לחילוץ סוג זה של תוכן באותו אופן שאתה יכול לחלץ תמונה פשוטה מצורה כתוכן שניתנו. מאמר זה מתאר כיצד לנצל את הפונקציונליות הזו כדי להציג צורות באופן עצמאי מהמסמך.
סוגי צורות ב Aspose.Words
כל התוכן בשכבת ציור מסמך מיוצג על ידי הצומת Shape או GroupShape במודול אובייקט המסמך Aspose.Words (DOM). תוכן כזה יכול להיות תיבות טקסט, תמונות, AutoShapes, OLE אובייקטים וכו'. שדות מסוימים מיובאים גם כצורות, למשל, שדה INCLUDEPICTURE
.
תמונה פשוטה מיוצגת על ידי צומת Shape של ShapeType.Image. לצומת הצורה הזו אין צמתים ילדים, אך ניתן לגשת לנתוני התמונה הכלולים בצומת הצורה הזו באמצעות המאפיין Shape.ImageData. מצד שני, צורה יכולה להיות מורכבת גם מצמתים רבים לילדים. לדוגמה, צורת תיבת טקסט, המייצגת על ידי המאפיין ShapeType.TextBox, יכולה להיות מורכבת מנקודות רבות, כגון Paragraph ו Table. רוב הצורות יכולות לכלול את הצמתים של Paragraph ו - Table ברמת הבלוק. אלה הם אותם צמתים כמו אלה המופיעים בגוף הראשי. צורות הן תמיד חלקים של פסקה כלשהי, או כלולות ישירות בשורה או מעוגנות ל Paragraph, אבל “צף” בכל מקום בדף המסמך.
מסמך יכול להכיל גם צורות המקובצות יחד. ניתן להפעיל קיבוץ ב Microsoft Word על ידי בחירת אובייקטים מרובים ולחיצה על “קבוצה” בתפריט לחיצה ימנית.
ב - Aspose.Words, קבוצות צורות אלה מיוצגות על ידי הצומת GroupShape
. ניתן גם להפעיל אותם באותו אופן כדי להציג את כל הקבוצה לתמונה.
הפורמט DOCX יכול להכיל סוגים מיוחדים של תמונות, כגון דיאגרמות או תרשימים. צורות אלה מיוצגות גם דרך הצומת Shape ב Aspose.Words, המספק גם שיטה דומה להצגתן כתמונות. לפי עיצוב, צורה לא יכולה להכיל צורה אחרת כילד, אלא אם כן צורה זו היא תמונה (ShapeType.Image). לדוגמה, Microsoft Word אינו מאפשר לך להוסיף תיבת טקסט בתוך תיבת טקסט אחרת.
סוגי הצורות המתוארים לעיל מספקים שיטה מיוחדת להציג את הצורות דרך הכיתה ShapeRenderer. דוגמה של כיתה ShapeRenderer מתקבלת עבור Shape או GroupShape באמצעות שיטת GetShapeRenderer או על ידי העברת Shape למבנה של כיתה ShapeRenderer. המעמד הזה מספק גישה לחברים, המאפשרים להציג צורה ל:
- קובץ בדיסק באמצעות עומס יתר בשיטת Save
- זרם באמצעות עומס יתר בשיטת Save
- ה
Graphics
אובייקט באמצעות ה RenderToSize ו RenderToScale שיטות
עיבוד לקובץ או להזרים
שיטת Save מספקת עומסי יתר המעבירים צורה ישירות לקובץ או לזרם. שני העומסים מקבלים דוגמא של הכיתה ImageSaveOptions, המאפשרת להגדיר אפשרויות להציג את הצורה. זה עובד באותו אופן כמו שיטת Document.Save. למרות שהפרמטר הזה נדרש, אתה יכול להעביר ערך אפס, ולציין שאין אפשרויות מותאמות אישית.
ניתן לייצא את הצורה בכל פורמט תמונה שצוין בספירה SaveFormat. לדוגמה, ניתן להציג את התמונה כדמות רסטר, כגון JPEG על ידי ציון הספירה SaveFormat.Jpeg
, או כדמות וקטורית, כגון EMF על ידי ציון SaveFormat.Emf
.
דוגמת הקוד שלהלן ממחישה עיבוד צורה לתמונה EMF בנפרד מהמסמך ושמירה בדיסק:
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); |
דוגמת הקוד שלהלן ממחישה עיבוד צורה לתמונה JPEG בנפרד מהמסמך ושמירה בזרם:
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 מאפשרת לך לציין מגוון אפשרויות השולטות באופן עיבוד התמונה. ניתן ליישם את הפונקציונליות המתוארת לעיל באותו אופן על הצמתים GroupShape ו - Shape.
עיבוד לאובייקט גרפי .NET
עיבוד ישירות לאובייקט Graphics מאפשר לך להגדיר את ההגדרות שלך ואת המצב עבור האובייקט Graphics. תרחיש נפוץ כולל עיבוד צורה ישירות לאובייקט Graphics שנלקח מצורה Windows או מפת סיביות. כאשר הצומת Shape מוצג, ההגדרות ישפיעו על מראה הצורה. לדוגמה, ניתן לסובב או לשנות את קנה המידה של הצורה באמצעות השיטות RotateTransform או ScaleTransform עבור האובייקט Graphics.
הדוגמה הבאה מראה כיצד להציג צורה ל -.NET Graphics אובייקט בנפרד מהמסמך והחל סיבוב על התמונה שניתנה:
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, השיטה RenderToSize שירשה מ NodeRendererBase שימושית ליצירת תמונות ממוזערות של תוכן המסמך. גודל הצורה מוגדר באמצעות הבנאי. השיטה RenderToSize מקבלת את האובייקט Graphics, ה איקס ו י קואורדינטות של מיקום התמונה וגודל התמונה (רוחב וגובה) שיצויר על האובייקט Graphics.
ניתן להציג את Shape לסולם מסוים באמצעות שיטת ShapeRenderer.RenderToScale שהורשה מהכיתה NodeRendererBase. זה דומה לשיטת Document.RenderToScale שמקבלת את אותם פרמטרים עיקריים. ההבדל בין שתי השיטות הללו הוא שבשיטת ShapeRenderer.RenderToScale, במקום גודל מילולי, אתה בוחר ערך צף שמגדיל את הצורה במהלך העיבוד שלה. אם ערך הציפה שווה 1.0 גורם לצורה להיות מוצגת ב-100% מגודלה המקורי. ערך צף של 0.5 יקטין את גודל התמונה בחצי.
עיבוד תמונת צורה
המחלקה Shape מייצגת אובייקטים בשכבת הציור, כגון AutoShape, תיבת טקסט, צורה חופשית, OLE אובייקט, בקרת אקטיבקס או תמונה. באמצעות הכיתה Shape, ניתן ליצור או לשנות צורות במסמך Microsoft Word. תכונה חשובה של צורה היא ShapeType. לצורות מסוגים שונים יכולות להיות יכולות שונות במסמך Word. לדוגמה, רק תמונות ו OLE צורות יכולות להכיל תמונות בתוכם בעוד שרוב הצורות יכולות להכיל טקסט בלבד.
הדוגמה הבאה מראה כיצד להציג תמונת צורה לתמונה JPEG בנפרד מהמסמך ולשמור אותה בדיסק:
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); |
אחזור גודל צורה
המחלקה ShapeRenderer מספקת גם פונקציונליות לאחזור גודל הצורה בפיקסלים באמצעות שיטת GetSizeInPixels. שיטה זו מקבלת שני פרמטרים מסוג צף (יחיד) – הסולם ו DPI, המשמשים בחישוב גודל הצורה בעת עיבוד הצורה. השיטה מחזירה את האובייקט Size
, המכיל את הרוחב והגובה של הגודל המחושב. זה שימושי כאשר נדרש לדעת את גודל הצורה המוצגת מראש, למשל בעת יצירת מפת סיביות חדשה מהפלט המוצג.
הדוגמה שלהלן מראה כיצד ליצור מפת סיביות חדשה ואובייקט גרפי עם רוחב וגובה הצורה שיש להציג:
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 או RenderToScale, גודל התמונה המעובד מוחזר גם באובייקט SizeF. ניתן להקצות זאת למשתנה ולהשתמש בו במידת הצורך.
המאפיין SizeInPoints מחזיר את גודל הצורה שנמדד בנקודות (ראה ShapeRenderer. התוצאה היא אובייקט SizeF
המכיל את הרוחב והגובה.