Redarea formelor separat de un Document
La procesarea documentelor, o sarcină comună este de a extrage toate imaginile găsite în document și de a le exporta într-o locație externă. Această sarcină devine simplă cu Aspose.Words API, care oferă deja funcționalitatea pentru extragerea și salvarea datelor de imagine. Cu toate acestea, uneori poate doriți să extrageți în mod similar alte tipuri de conținut grafic care este reprezentat de un alt tip de obiect de desen, de exemplu, o casetă de text care conține paragrafe, forme de săgeți și o imagine mică. Nu există o modalitate simplă de redare a acestui obiect, deoarece este o combinație de elemente de conținut individuale. De asemenea, este posibil să întâlniți un caz în care conținutul a fost grupat împreună în obiectul care arată ca o singură imagine.
Aspose.Words oferă funcționalitate pentru extragerea acestui tip de conținut în același mod în care puteți extrage o imagine simplă dintr-o formă ca conținut redat. Acest articol descrie modul de utilizare a acestei funcționalități pentru a reda forme independent de document.
Tipuri de forme în Aspose.Words
Tot conținutul dintr-un strat de desen document este reprezentat de nodul Shape sau GroupShape din modulul obiect Document Aspose.Words (DOM). Astfel de conținuturi pot fi casete de text,imagini, AutoShapes, OLE obiecte etc. Unele câmpuri sunt, de asemenea, importate ca forme, de exemplu, câmpul INCLUDEPICTURE
.
O imagine simplă este reprezentată de un nod Shape de ShapeType.IMAGE. Acest nod de formă nu are noduri copil, dar datele de imagine conținute în acest nod de formă pot fi accesate prin proprietatea Shape.image_data. Pe de altă parte, o formă poate fi alcătuită și din multe noduri copil. De exemplu, o formă de casetă de text, care este reprezentată de proprietatea ShapeType.TEXT_BOX, poate fi alcătuită din mai multe noduri, cum ar fi Paragraph și Table. Majoritatea formelor pot include nodurile la nivel de bloc Paragraph și Table. Acestea sunt aceleași noduri ca cele care apar în corpul principal. Formele sunt întotdeauna părți ale unui paragraf, fie incluse direct în linie, fie ancorate la Paragraph, dar “plutitoare” oriunde în pagina documentului.
Un document poate conține, de asemenea, forme care sunt grupate împreună. Gruparea poate fi activată în Microsoft Word selectând mai multe obiecte și făcând clic pe “grup” în meniul cu clic dreapta.
În Aspose.Words, aceste grupuri de forme sunt reprezentate de nodul GroupShape. Acestea pot fi, de asemenea, invocate în același mod pentru a reda întregul grup imaginii.
Formatul DOCX poate conține tipuri speciale de imagini, cum ar fi diagrame sau diagrame. Aceste forme sunt, de asemenea, reprezentate prin nodul Shape din Aspose.Words, care oferă, de asemenea, o metodă similară pentru a le reda ca imagini. Prin design, o formă nu poate conține o altă formă ca copil, cu excepția cazului în care acea formă este o imagine (ShapeType.IMAGE). De exemplu, Microsoft Word nu vă permite să inserați o casetă de text într-o altă casetă de text.
Tipurile de forme descrise mai sus oferă o metodă specială pentru a reda formele prin clasa ShapeRenderer. O instanță a clasei ShapeRenderer este recuperată pentru un Shape sau GroupShape prin metoda get_shape_renderer sau prin trecerea Shape la constructorul clasei ShapeRenderer. Această clasă oferă acces la membri, care permit redarea unei forme la următoarele:
- Fișier pe disc
- Curent
Redare în fișier sau flux
Metoda save oferă supraîncărcări care redă o formă direct într-un fișier sau flux. Ambele supraîncărcări acceptă o instanță a clasei ImageSaveOptions, care permite definirea opțiunilor pentru redarea formei. Aceasta funcționează în același mod ca metoda Document.save. Chiar dacă acest parametru este necesar, puteți trece o valoare nulă, specificând că nu există opțiuni personalizate.
Forma poate fi exportată în orice format de imagine specificat în enumerarea SaveFormat. De exemplu, imaginea poate fi redată ca o imagine raster, cum ar fi JPEG prin specificarea enumerării SaveFormat.JPEG, sau ca o imagine vectorială, cum ar fi EMF prin specificarea SaveFormat.EMF.
Exemplul de cod de mai jos ilustrează redarea unei forme într-o imagine EMF separat de document și salvarea pe disc:
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)
Exemplul de cod de mai jos ilustrează redarea unei forme într-o imagine JPEG separat de document și salvarea într-un flux:
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()
Clasa ImageSaveOptions vă permite să specificați o varietate de opțiuni care controlează modul în care este redată imaginea. Funcționalitatea descrisă mai sus poate fi aplicată în același mod nodurilor GroupShape și Shape.
Redarea unei imagini de formă
Clasa Shape reprezintă obiecte din stratul de desen, cum ar fi un AutoShape, o casetă de text, o formă liberă, un obiect OLE, un control ActiveX sau o imagine. Folosind clasa Shape, puteți crea sau modifica forme într-un document Microsoft Word. O proprietate importantă a unei forme este shape_type. Formele de diferite tipuri pot avea capacități diferite într-un document Word. De exemplu, numai formele image și OLE pot avea imagini în interiorul lor, în timp ce majoritatea formelor pot avea doar text.
Următorul exemplu arată cum să redați o imagine de formă într-o imagine JPEG separat de document și să o salvați pe disc:
# Save the rendered image to disk.
shape.get_shape_renderer().save(docs_base.artifacts_dir + "TestFile.RenderShapeImage.jpeg", None)
Preluarea unei dimensiuni de formă
Clasa ShapeRenderer oferă, de asemenea, funcționalitate pentru a prelua dimensiunea formei în pixeli prin metoda get_size_in_pixels. Această metodă acceptă doi parametri float (unici) – scara și DPI, care sunt utilizați pentru calcularea dimensiunii formei atunci când forma este redată. Metoda returnează obiectul Size, care conține lățimea și înălțimea dimensiunii calculate. Acest lucru este util atunci când este necesar să cunoașteți în prealabil dimensiunea formei redate. Proprietatea size_in_points returnează dimensiunea formei măsurată în puncte. Rezultatul este un obiect SizeF care conține lățimea și înălțimea. De asemenea, puteți utiliza proprietatea bounds_in_points pentru a obține limitele reale ale formei.