DarioSantarelli.Blog("UgiDotNet");

<sharing mode=”On” users=”*” />
posts - 176, comments - 105, trackbacks - 3

My Links

News


This is my personal blog. These postings are provided "AS IS" with no warranties, and confer no rights.




Tag Cloud

Archives

Post Categories

My English Blog

Uno sguardo su OpenXML SDK 2.0

La recente uscita dell' SDK v2.0 CTP di OOXML ha attirato la mia attenzione in questi ultimi giorni. Ho avuto modo di fare un rapido giro delle API e devo dire che le novità introdotte segnano un significativo passo in avanti rispetto la precedente v1.0
Infatti, mentre l' object model della v1 fornisce un "limitato" accesso allo scheletro di un documento OOXML (supportando la programmabilità OO delle principali parti "strutturali" di una OpenXmlPart di un OpenXmlPackage), la v2 introduce il supporto strongly-typed per tutte le XmlPart definibili a qualsiasi livello gerarchico.
Quindi, tutti gli elementi e gli attributi previsti negli schemi XML dei vari formati OOXML sono oggi programmabili tramite le relative classi ed enumerations .NET. 
Nel seguente esempio vediamo come inserire un' immagine in un WordprocessingDocument utilizzando l'object model delle nuove API:

using (WordprocessingDocument document = WordprocessingDocument.Create(@"C:/.../testImage.docx", WordprocessingDocumentType.Document))
{
 
// Aggiunge la parte principale del WordProcessingDocument
 
document.AddMainDocumentPart();

 
// Aggiungiamo una OpenXmlPart di tipo ImagePart
 
ImagePart imagePart = document.MainDocumentPart.AddImagePart(ImagePartType.Jpeg, "MyPhoto");
 
using (FileStream image_stream = new FileStream(@"C:/.../Me.jpg", FileMode.Open))
 
{
   
imagePart.FeedData(image_stream);
 
}

 
// Creazione dell'immagine
 
ImageData myPhotoImageData = new ImageData();
 
myPhotoImageData.RelationshipId = new StringValue("MyPhoto");
 
Shape myPhotoShape = new Shape(myPhotoImageData);
 
myPhotoShape.Style = new StringValue("width:128; height:128");
 
Picture myPhotoPicture = new Picture(myPhotoShape);

 
// Costruzione del MainDocumentPart
 
document.MainDocumentPart.Document = new Document(
                                                                                     
new Body(
                                                                                                       
new Paragraph(new Run(myPhotoPicture)),
                                                                                                       
new Paragraph(new Run(new Text("Dario Santarelli")))     
                                                                                                     
));            
 
// Salvataggio dati DOM
 
document.MainDocumentPart.Document.Save();

 
// Salvataggio e chiudsura del WordProcessingDocument
 
document.Close();            
}           


Il risultato che otteniamo è il seguente:



Come si può notare il principale vantaggio si concentra sul fatto che da oggi le soluzioni di sviluppo su Open XML non debbano più basarsi necessariamente sul DOM programming a seconda dello specifico scenario di markup (WordprocessingML ,SpreadsheetML ,PresentationML, DrawingML), bensì su un object model accedibile via intellisense, completo a qualunque livello della gerarchia di ciascuna OpenXmlPart.

Un'altra utilissima feature che verrà inserita nelle successive release di queste API ha a che vedere con il targeting della versione di OOXML, per cui verranno previste funzionalità di validazione dei package: sebbene in realtà un task del genere sia già realizzabile con la versione 1, non garantisce tuttora la validità effettiva del documento Open XML:

(Da MSDN) The Validate method does not validate the structure of an Office Open XML Package


Technorati Tag: ,

Print | posted on lunedì 20 ottobre 2008 21:33 |

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET