Il mio progetto di generazione di documenti OpenXML Word richiede testo, tabelle e immagini. Ma prima, ho bisogno di un'intestazione del documento con un logo (immagine) al suo interno.Come inserire l'immagine nell'intestazione del documento OpenXML Word?
ho usato l'esempio di Microsoft per la creazione di intestazioni e piè di pagina a Generating Documents with Headers and Footers in Word 2007 by Using the Open XML SDK 2.0 for Microsoft Office, e le intestazioni di testo funzionano bene, ma le immagini appaiono nell'intestazione con l'icona immagine spezzata, un bordo correttamente dimensionato, e il messaggio "Questa immagine non può essere visualizzata al momento." Inoltre, posso caricare l'immagine selezionata nel corpo del documento bene. Ecco come ho creato l'ImagePart:
// Create AG logo part.
_agLogoPart = mainDocumentPart.AddImagePart(ImagePartType.Jpeg);
using (FileStream stream = new FileStream(_agLogoFilename, FileMode.Open))
{
_agLogoPart.FeedData(stream);
}
_agLogoRel = mainDocumentPart.GetIdOfPart(_agLogoPart);
Le immagini vengono caricate con un metodo LoadImage, derivata dall'esempio di Microsoft, ma l'aggiunta di parametri per la larghezza e l'altezza, e restituendo un oggetto di disegno:
private static Drawing LoadImage(string relationshipId,
string filename,
string picturename,
double inWidth,
double inHeight)
{
double emuWidth = Konsts.EmusPerInch * inWidth;
double emuHeight = Konsts.EmusPerInch * inHeight;
var element = new Drawing(
new DW.Inline(
new DW.Extent { Cx = (Int64Value)emuWidth, Cy = (Int64Value)emuHeight },
new DW.EffectExtent { LeftEdge = 0L, TopEdge = 0L, RightEdge = 0L, BottomEdge = 0L },
new DW.DocProperties { Id = (UInt32Value)1U, Name = picturename },
new DW.NonVisualGraphicFrameDrawingProperties(
new A.GraphicFrameLocks { NoChangeAspect = true }),
new A.Graphic(
new A.GraphicData(
new PIC.Picture(
new PIC.NonVisualPictureProperties(
new PIC.NonVisualDrawingProperties { Id = (UInt32Value)0U, Name = filename },
new PIC.NonVisualPictureDrawingProperties()),
new PIC.BlipFill(
new A.Blip(
new A.BlipExtensionList(
new A.BlipExtension { Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}" }))
{
Embed = relationshipId,
CompressionState = A.BlipCompressionValues.Print },
new A.Stretch(
new A.FillRectangle())),
new PIC.ShapeProperties(
new A.Transform2D(
new A.Offset { X = 0L, Y = 0L },
new A.Extents { Cx = (Int64Value)emuWidth, Cy = (Int64Value)emuHeight }),
new A.PresetGeometry(
new A.AdjustValueList()) { Preset = A.ShapeTypeValues.Rectangle })))
{
Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture"
}))
{
DistanceFromTop = (UInt32Value)0U,
DistanceFromBottom = (UInt32Value)0U,
DistanceFromLeft = (UInt32Value)0U,
DistanceFromRight = (UInt32Value)0U,
EditId = "50D07946"
});
return element;
}
usando questo, le seguenti opere di codice, il caricamento di un'immagine ovunque nel corpo che voglio:
Paragraph paraImage = new Paragraph(new Run(LoadImage(_genomeImageRel, _genomeImageFilename, "name" + _genomeImageRel, 7.5, 2.925)));
body.AppendChild(paraImage);
E il seguente codice non funziona per mettere un'immagine del logo nell'intestazione:
private static Header GeneratePageHeaderPart(string headerText)
{
Header hdr = new Header(new Paragraph(new Run(LoadImage(_agLogoRel, _agLogoFilename, "name" + _agLogoRel, 2.57, 0.73))));
return hdr;
}
Ho il sospetto che stia facendo qualcosa di molto poco corretto, perché posso caricare l'immagine ovunque ma nell'intestazione. Qualcuno può consigliare?
Ciao, può si prega di mostrare il codice completo per inserire un'immagine in intestazione del documento Word? Grazie – epema