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ă din 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.ImageData. 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.TextBox, 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.

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

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.

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

Î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.

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

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 GetShapeRenderer sau prin trecerea Shape la constructorul clasei ShapeRenderer. Această clasă oferă acces la membri, care permit redarea unei forme la următoarele:

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:

Exemplul de cod de mai jos ilustrează redarea unei forme într-o imagine JPEG separat de document și salvarea într-un flux:

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 la un obiect grafic .NET

Redarea directă la un obiect Graphics vă permite să definiți propriile setări și starea obiectului Graphics. Un scenariu comun implică redarea unei forme direct într-un obiect Graphics recuperat dintr-o formă Windows sau o hartă de biți. Când nodul Shape este redat, setările vor afecta aspectul formei. De exemplu, puteți roti sau scala forma utilizând metodele RotateTransform sau ScaleTransform pentru obiectul Graphics.

Exemplul de mai jos arată cum să redați o formă unui .NET Graphics obiect separat de document și aplică rotație imaginii redate:

În mod similar, pentru metoda RenderToSize, metoda RenderToSize moștenită de la NodeRendererBase este utilă pentru crearea de miniaturi ale conținutului documentului. Dimensiunea formei este specificată prin constructor. Metoda RenderToSize acceptă obiectul Graphics, coordonatele X și Y ale poziției imaginii și dimensiunea imaginii (lățime și înălțime) care va fi desenată pe obiectul Graphics.

Shape poate fi redat la o anumită scară folosind metoda ShapeRenderer.RenderToScale moștenită din clasa NodeRendererBase. Aceasta este similară cu metoda Document.RenderToScale care acceptă aceiași parametri majori. Diferența dintre aceste două metode este că, cu metoda ShapeRenderer.RenderToScale, în loc de o dimensiune literală, alegeți o valoare float care scalează forma în timpul redării sale. Dacă valoarea float este egală cu 1.0 determină ca forma să fie redată la 100% din dimensiunea inițială. O valoare float de 0.5 va reduce dimensiunea imaginii la jumătate.

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 ShapeType. Formele de diferite tipuri pot avea capacități diferite într-un document Word. De exemplu, numai imaginile și formele 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:

Preluarea unei dimensiuni de formă

Clasa ShapeRenderer oferă, de asemenea, funcționalitate pentru a prelua dimensiunea formei în pixeli prin metoda GetSizeInPixels. Această metodă acceptă doi parametri de tip float (unici) – scara și DPI, care sunt utilizați la 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 dimensiunea formei redate în avans, de exemplu atunci când creați o nouă hartă de biți din ieșirea redată.

Exemplul de mai jos arată cum să creați un nou obiect Bitmap și grafic cu lățimea și înălțimea formei care urmează să fie redată:

Când se utilizează metodele RenderToSize sau RenderToScale, dimensiunea imaginii redate este returnată și în obiectul SizeF. Aceasta poate fi atribuită unei variabile și utilizată dacă este necesar.

Proprietatea SizeInPoints returnează dimensiunea formei măsurată în puncte (vezi ShapeRenderer. Un rezultat este un obiect SizeF care conține lățimea și înălțimea.