Redarea Formelor separat de un Document

Când procesăm documente, o sarcină comună este să extragem toate imaginile găsite în document și să le exportăm într-o locație externă. Această sarcină devine simplă cu Aspose.Words API, care oferă deja funcționalitatea pentru extragerea și salvarea datelor imaginii. “Cu toate acestea, uneori veți dori să extrageți alte tipuri de conținut grafic reprezentat de un tip diferit de obiect desenat, de exemplu o cutie de text care conține paragrafe, forme de săgeată și o mică imagine.” Nu există un mod simplu de a redarea acestui obiect, deoarece este o combinație de elemente de conținut individuale. De asemenea, puteți întâlni un caz în care conținutul este grupat împreună într-un obiect 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 cum se utilizează această funcționalitate pentru a redarea formele independente de document.

Tipuri de forme în Aspose.Words

Toate conținuturile dintr-un strat de document sunt reprezentate de nodul Shape sau GroupShape în modulul obiect document Aspose.Words (DOM). Aceste conținuturi pot fi cutii de text, imagini, AutoShape-uri, obiecte OLE, etc. Câțiva câmpuri sunt importate de asemenea ca forme, pentru exemplu, câmpul INCLUDEPICTURE.

O imagine simplă este reprezentată de un nod Shape cu o dimensiune ShapeType.Image. Acest nod de formă nu are nici un nod copil dar datele imaginii conținute în acest nod de formă pot fi accesate prin proprietatea Shape.ImageData. Pe de altă parte, o formă poate fi, de asemenea, formată din mai multe noduri copil. De exemplu, o formă de casetă de text, care este reprezentată de proprietatea ShapeType.TextBox, poate fi alcătuită din multe noduri, cum ar fi Paragraph și Table. Cele mai multe forme pot include nodurile Paragraph și Table de nivel bloc. Aceste 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 sau ancorate la Paragraf, dar “plutind” oriunde pe pagina documentului.

rendering-shapes-separately-from-a-document_1

Un document poate conține și forme care sunt grupate împreună. Grouping poate fi activat în Microsoft Word selectând mai multe obiecte și făcând click pe “Group” în meniul contextual din dreapta.

rendering-shapes-separately-from-a-document_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 redarea întregii grupuri la imagine.

rendering-shapes-separately-from-a-document_3

Formatul DOCX poate conţine tipuri speciale de imagini, cum ar fi diagrame sau hărţi. Aceste forme sunt reprezentate și prin nodul Shape în Aspose.Words, care oferă o metodă asemănătoare pentru redarea lor ca imagini. Prin proiectare, 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ă introduceți o casetă de text în interiorul unei alte casete de text.

Tipurile de forme descrise mai sus oferă o metodă specială pentru redarea formelor prin intermediul clasei ShapeRenderer. O instanță a clasei ShapeRenderer este recuperată pentru o Shape sau GroupShape prin metoda GetShapeRenderer sau trecând Shape constructorului clasei ShapeRenderer. Această clasă oferă acces la membri care permit redarea unei forme către următoarele:

  • Fișier pe disc folosind metoda Save suprascrisă
  • Stream folosind metoda Save supraîncărcată “- .NET Grafică obiect utilizând RenderToSize și RenderToScale metode”

Randare în fişier sau flux

Metoda Save oferă suprascrieri care redau o formă direct într-un fișier sau într-un flux. Ambele suprascrieri acceptă o instanță a clasei ImageSaveOptions, ceea ce permite definirea opțiunilor pentru redarea formei. Acest lucru funcționează în același mod ca metoda Document.Save. “În ciuda faptului că acest parametru este necesar, puteți transmite o valoare nulă, specificând că nu există opțiuni personalizate.”

Formatul 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 enumerării 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 la nodurile GroupShape și Shape.”

Redarea către un obiect grafic .NET

Redarea directă către un Graphics obiect permite să definești propriile setări și starea pentru obiectul Graphics. Un scenariu comun implică redarea unui model direct într-un Graphics obiect recuperat dintr-o Windows Formă sau o imagine. 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 se poate randarea unei forme pentru un obiect NET Graphics separat de document și aplicarea rotației imaginii randate:

Similar ca și metoda RenderToSize, metoda RenderToSize moștenită de la NodeRendererBase este utilă pentru crearea de imagini miniatură ale conținutului unui document. Forma dimensiunii este specificată prin constructor. Metoda RenderToSize acceptă obiectul Graphics, coordonatele X și Y ale poziției imaginii, precum și dimensiunea imaginii (lățime și înălțime) care va fi desenată pe obiectul Graphics.

The Shape poate fi redat la o anumită scalare folosind metoda ShapeRenderer.RenderToScale moștenită din clasa NodeRendererBase. Acest lucru este asemănător metodei Document.RenderToScale care acceptă aceleași parametri principali. Diferența dintre aceste două metode este că cu metoda ShapeRenderer.RenderToScale, în loc de o dimensiune literală, alegi o valoare float care scală forma în timpul redării. Dacă valoarea float este egală cu 1.0, aceasta determină ca forma să fie redată la 100% din dimensiunea sa inițială. O valoare a plutitoarei de 0.5 va micșora imaginea la jumătate.

Crearea unei imagini de formă

Clasa Shape reprezintă obiecte în stratul de desenare, cum ar fi un obiect Autodesen, o casetă de text, un obiect liber, un obiect OLE, un control ActiveX sau o imagine. Folosind clasa Shape, poţi crea sau modifica forme într-un Microsoft Word document. O proprietate importantă a unei forme este " ShapeType “. Formele de diferite tipuri pot avea capacități diferite într-un document Word. De exemplu, doar formele imaginilor și OLE pot avea imagini în interiorul lor, în timp ce majoritatea formelor pot avea doar text.

Exemplul următor arată cum să redăm o imagine “Shape” într-un fișier “JPEG”, separat de document și să îl salvăm pe disc:

Recuperare dimensiune formă

Clasa ShapeRenderer oferă, de asemenea, funcționalitate pentru a obține dimensiunea formei în pixeli prin metoda GetSizeInPixels. Acest metod acceptă două parametri de tip float (Single) – scara și DPI, care sunt folosite în calcularea dimensiunii formei atunci când forma este redată. Metoda returnează obiectul Size, care conține lățimea și înălțimea mărimii calculate. Aceasta este utilă atunci când se solicită să se cunoască dimensiunea formei redat înainte de timp, de exemplu atunci când creați un nou bitmap din ieșirea redată.

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

Când folosești metodele RenderToSize sau RenderToScale, dimensiunea imaginii renderizate este și ea returnată în obiectul SizeF. Acesta poate fi atribuit unei variabile și utilizat dacă este necesar.

Proprietatea SizeInPoints returnează dimensiunea formei măsurată în puncte (a se vedea ShapeRenderer). “Rezultatul este un obiect SizeF care conține lățimea și înălțimea.”