Forma di rendering Separatamente da un documento

Quando si elaborano i documenti, un compito comune è quello di estrarre tutte le immagini presenti nel documento e esportarle in una posizione esterna. Questo compito diventa semplice con Aspose.Words API, che già fornisce la funzionalità per estrarre e salvare i dati delle immagini. Tuttavia, a volte si può desiderare di estrarre simili altri tipi di contenuto grafico che sono rappresentati da un diverso tipo di oggetto di disegno, per esempio, una casella di testo contenente paragrafi, forme di freccia e una piccola immagine. Non esiste un modo semplice di rendere questo oggetto poiché è una combinazione di singoli elementi di contenuto. Si può anche incontrare un caso quando i contenuti sono stati raggruppati insieme nell’oggetto che sembra una singola immagine.

Aspose.Words fornisce funzionalità per estrarre questo tipo di contenuto nello stesso modo in cui è possibile estrarre una semplice immagine dalla forma come contenuto reso. Questo articolo descrive come utilizzare questa funzionalità per rendere le forme indipendentemente dal documento.

Tipi di forma in Aspose.Words

Tutto il contenuto in uno strato di disegno del documento è rappresentato dal Shape o GroupShape il nodo nel Aspose.Words Modulo di oggetto del documento (DOM). Tali contenuti possono essere caselle di testo, immagini, AutoShapes, oggetti OLE, ecc. Alcuni campi sono anche importati come forme, per esempio, il INCLUDEPICTURE campo.

Una semplice immagine è rappresentata da una Shape nodo di ShapeType.Image. Questo nodo di forma non ha nodi di bambino ma i dati dell’immagine contenuti all’interno di questo nodo di forma possono essere accessibili dal Shape.ImageData proprieta'. D’altra parte, una forma può anche essere costituita da molti nodi bambino. Per esempio, una forma di casella di testo, che è rappresentata dalla ShapeType.TextBox proprietà, può essere costituito da molti nodi, come Paragraph e Table. La maggior parte delle forme può includere Paragraph e Table nodi a livello di blocco. Questi sono gli stessi nodi di quelli che appaiono nel corpo principale. Le forme sono sempre parti di qualche paragrafo, incluse direttamente in linea o ancorate al Paragrafo, ma “floating” ovunque nella pagina del documento.

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

Un documento può anche contenere forme raggruppate. Grouping può essere abilitato in Microsoft Word selezionando più oggetti e cliccando su “Group” nel menu di scelta rapida.

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

In Aspose.Words, questi gruppi di forme sono rappresentati da GroupShape Nodo. Questi possono anche essere invocati allo stesso modo per rendere l’intero gruppo all’immagine.

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

Il formato DOCX può contenere tipi speciali di immagini, come diagrammi o grafici. Queste forme sono rappresentate anche attraverso Shape nodo in Aspose.Words, che fornisce anche un metodo simile per renderli come immagini. Per disegno, una forma non può contenere un’altra forma come un bambino, a meno che la forma non sia un’immagine (ShapeType.Image). Per esempio, Microsoft Word non consente di inserire una casella di testo all’interno di un’altra casella di testo.

I tipi di forma sopra descritti forniscono un metodo speciale per rendere le forme attraverso ShapeRenderer classe. Un’istanza ShapeRenderer classe è recuperato per un Shape o GroupShape attraverso il GetShapeRenderer metodo o passando Shape al costruttore del ShapeRenderer classe. Questa classe fornisce l’accesso ai membri, che permettono di rendere una forma ai seguenti:

Rendering a File o Stream

The Save metodo fornisce sovraccarichi che rendono una forma direttamente a un file o flusso. Entrambi i sovraccarichi accettano un’istanza ImageSaveOptions classe, che consente di definire opzioni per rendere la forma. Questo funziona allo stesso modo del Document.Save metodo. Anche se questo parametro è richiesto, è possibile passare un valore nullo, specificando che non ci sono opzioni personalizzate.

La forma può essere esportata in qualsiasi formato di immagine specificato nel SaveFormat enumerazione. Ad esempio, l’immagine può essere resa come un’immagine raster, come JPEG specificando SaveFormat.Jpeg enumerazione, o come immagine vettoriale, come EMF specificando SaveFormat.Emf.

L’esempio seguente del codice illustra il rendering di una forma a un’immagine EMF separatamente dal documento, e il salvataggio al disco:

L’esempio seguente del codice illustra il rendering di una forma a un’immagine JPEG separatamente dal documento, e il salvataggio a un flusso:

The ImageSaveOptions classe consente di specificare una varietà di opzioni che controllano come l’immagine viene resa. La funzionalità sopra descritta può essere applicata allo stesso modo GroupShape e Shape Nodi.

Rendering ad un Graphics Oggetto

Rendering direttamente a un Graphics oggetto consente di definire le proprie impostazioni e lo stato per Graphics oggetto. Uno scenario comune consiste nel rendere una forma direttamente in una Graphics oggetto recuperato da un Windows Form o Bitmap. Quando Shape nodo è reso, le impostazioni influenzeranno l’aspetto della forma. Ad esempio, è possibile ruotare o scalare la forma utilizzando il RotateTransform o ScaleTransform metodi per Graphics oggetto.

L’esempio seguente mostra come rendere una forma a una Graphics oggetto separatamente dal documento e applicare la rotazione all’immagine resa:

Allo stesso modo, al RenderToSize metodo, il RenderToSizemetodo ereditato dal NodeRendererBase è utile per la creazione di miniature di contenuto di documento. La dimensione della forma è specificata attraverso il costruttore. The RenderToSize metodo accetta il Graphics oggetto, le coordinate X e Y della posizione dell’immagine, e le dimensioni dell’immagine (larghezza e altezza) che saranno disegnate sul Graphics oggetto.

The Shape può essere reso ad una certa scala utilizzando ShapeRenderer.RenderToScale metodo ereditato dal NodeRendererBase classe. Questo è simile al Document.RenderToScale metodo che accetta gli stessi parametri principali. La differenza tra questi due metodi è che con ShapeRenderer.RenderToScale metodo, invece di una dimensione letterale, si sceglie un valore galleggiante che scala la forma durante il rendering. Se il valore del galleggiante è pari a 1.0, la forma viene resa al 100% della sua dimensione originale. Un valore galleggiante di 0,5 ridurrà la dimensione dell’immagine per metà.

Rendering di un’immagine di forma

The Shape classe rappresenta oggetti nello strato di disegno, come un AutoShape, casella di testo, freeform, oggetto OLE, controllo ActiveX, o un’immagine. Usare il Shape classe, è possibile creare o modificare forme in una Microsoft Word documento. Una proprietà importante di una forma è la sua ShapeType. Le forme di diversi tipi possono avere diverse capacità in un documento di Word. Ad esempio, solo immagini e forme OLE possono avere immagini all’interno di loro, mentre la maggior parte delle forme può avere solo testo.

L’esempio seguente mostra come rendere un’immagine di forma a un’immagine JPEG separatamente dal documento e salvarla sul disco:

Recuperare una dimensione di forma

The ShapeRenderer classe fornisce anche funzionalità per recuperare la dimensione della forma in pixel attraverso la GetSizeInPixels metodo. Questo metodo accetta due parametri di galleggiamento (Single) – la scala e DPI, che vengono utilizzati nel calcolo della dimensione della forma quando la forma viene resa. Il metodo restituisce il Size oggetto, che contiene la larghezza e l’altezza della dimensione calcolata. Questo è utile quando è necessario conoscere la dimensione della forma resa in anticipo, per esempio quando si crea una nuova Bitmap dall’output reso.

L’esempio seguente mostra come creare un nuovo oggetto Bitmap e Graphics con la larghezza e l’altezza della forma da rendere:

Quando si utilizza RenderToSize o RenderToScale metodi, la dimensione dell’immagine resa viene anche restituita nel SizeF oggetto. Questo può essere assegnato a una variabile e utilizzato se necessario.

The SizeInPoints proprietà restituisce la dimensione della forma misurata in punti (vedere ShapeRenderer). Il risultato è un SizeF oggetto contenente la larghezza e l’altezza.