2013-07-18 34 views
7

OpenXML Word belge oluşturma projem, metin, tablo ve resimler gerektirir. Ama önce, İçinde bir logo (resim) bulunan bir belge başlığına ihtiyacım var.OpenXML Word belgesinin başlığına resim nasıl eklenir?

Metin başlıkları sadece iyi çalışır, ancak görüntüleri bozuk resim simgesiyle başlığında göstermek Generating Documents with Headers and Footers in Word 2007 by Using the Open XML SDK 2.0 for Microsoft Office üstbilgi ve altbilgiler oluşturmak için Microsoft örnek olarak kullandı ve ettik

, bir doğru büyüklükte sınır ve "Bu görüntü şu anda görüntülenemiyor." Ayrıca, seçilen görüntüyü sadece belge gövdesine yükleyebilirim. İşte ImagePart oluşturmak edebilirsiniz:

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; 
} 

:

// Create AG logo part. 
_agLogoPart = mainDocumentPart.AddImagePart(ImagePartType.Jpeg); 
using (FileStream stream = new FileStream(_agLogoFilename, FileMode.Open)) 
{ 
    _agLogoPart.FeedData(stream); 
} 
_agLogoRel = mainDocumentPart.GetIdOfPart(_agLogoPart); 

görüntüleri LOADIMAGE yöntemiyle yüklenir Microsoft Örneğin türetilmiş, ancak genişlik ve yükseklik ve Çizim nesnesini döndürmek için parametreleri ekleyerek

Paragraph paraImage = new Paragraph(new Run(LoadImage(_genomeImageRel, _genomeImageFilename, "name" + _genomeImageRel, 7.5, 2.925))); 
body.AppendChild(paraImage); 

Ve aşağıdaki kod başlığında bir logo resmi koymak çalışmıyor: Bu kullanarak, vücuda herhangi bir yerinde bir görüntü yükleme aşağıdaki kod çalışır, istediğim

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; 
} 

Ben her yerde ama başlığındaki resim yüklemek çünkü ben yanlış çok ince bir şey yapıyorum şüpheli. Birisi tavsiye edebilir mi?

+0

Merhaba, Word belgesi başlığına resim eklemenin tam kodunu göstermek lütfen? Teşekkürler – epema

cevap

0

Aşağıdaki kodu deneyin:

Bitmap image = new Bitmap(imagePath); 
SdtElement controlBlock = doc.MainDocumentPart.HeaderParts.First().Header.Descendants<SdtElement>().Where 
           (r => r.SdtProperties.GetFirstChild<Tag>().Val == tagName).SingleOrDefault(); 
//find the Blip element of the content control 
Blip blip = controlBlock.Descendants<Blip>().FirstOrDefault(); 

//add image and change embeded id 
ImagePart imagePart = doc.MainDocumentPart.AddImagePart(ImagePartType.Jpeg); 
using (MemoryStream stream = new MemoryStream()) 
{ 
     image.Save(stream, ImageFormat.Jpeg); 
     stream.Position = 0; 
     imagePart.FeedData(stream); 
} 
blip.Embed = doc.MainDocumentPart.GetIdOfPart(imagePart); 
7

Ben her yerde ama başlığında görüntü yükleyebilirsiniz çünkü yanlış çok ince bir şey yapıyorum şüpheli. Ana belgeye bir resim eklemek mümkün değilse

, ayrıca bu kod (private static Drawing LoadImage) ile üstbilgi veya altbilgi resim ekleyebilirsiniz.

tek fark, ImagePart eklemek geçerli:

  • belgenin vücutta bir resim eklemek için, sen MainDocumentPart bir ImagePart ekleyin:

    _agLogoPart = mainDocumentPart.AddImagePart(ImagePartType.Jpeg); 
    ... 
    _agLogoRel = mainDocumentPart.GetIdOfPart(_agLogoPart); 
    
  • başlığına sahip bir görüntü eklemek için numaralı sayfaya eklemeniz gerekir

    _agLogoPart = footerPart.AddImagePart(ImagePartType.Jpeg); 
    ... 
    _agLogoRel = footerPart.GetIdOfPart(_agLogoPart); 
    
    : Bir altbilgi bir resim eklemek için başlık

    _agLogoPart = headerPart.AddImagePart(ImagePartType.Jpeg); 
    ... 
    _agLogoRel = headerPart.GetIdOfPart(_agLogoPart); 
    
  • oluşturmak için kullandığınız HeaderPart bir ImagePart, bir ImagePart sen altbilgi oluşturmak için kullanmak FooterPart eklemek gerek


İlgili:

+0

Merhaba, docx başlığına resim eklemek için tam kaynak kodunuz var mı? Evet ise, lütfen paylaşır mısınız? Gerçekten onunla mücadele ediyorum. Teşekkür ederim! – epema

İlgili konular