2011-10-14 84 views
0

我正在使用OpenXMl sdk通過c#創建word文檔。 我將我的所有html頁面轉換爲word文檔,但轉換時我給我的圖像絕對地址和轉換後,它完美地在我的系統中,但是當我試圖將此文檔到其他系統圖像不來那裏。創建Word後,圖像不會出現通過Open XML文檔

我檢查了媒體目錄所有圖像都存在,但名稱不同。

我的文檔已被轉換,但我正在使用此方法。

  using (WordprocessingDocument myDoc = WordprocessingDocument.Open(documentPath, true)) 
     { 
      XNamespace w = 
        "http://schemas.openxmlformats.org/wordprocessingml/2006/main"; 
      XNamespace r = 
       "http://schemas.openxmlformats.org/officeDocument/2006/relationships"; 
      string altChunkId = "AltChunkId1"; 
      MainDocumentPart mainPart = myDoc.MainDocumentPart; 
      AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart("application/xhtml+xml", altChunkId); 
      using (Stream chunkStream = chunk.GetStream(FileMode.Create, FileAccess.Write)) 
      using (StreamWriter stringStream = new StreamWriter(chunkStream)) 
       stringStream.Write(html); 
      XElement altChunk = new XElement(w + "altChunk", 
       new XAttribute(r + "id", altChunkId) 
      ); 
      XDocument mainDocumentXDoc = GetXDocument(myDoc); 
      mainDocumentXDoc.Root 
       .Element(w + "body") 
       .Elements(w + "p") 
       .Last() 
       .AddAfterSelf(altChunk); 
      SaveXDocument(myDoc, mainDocumentXDoc); 
     } 





    private static XDocument GetXDocument(WordprocessingDocument myDoc) 
    { 
     // Load the main document part into an XDocument 
     XDocument mainDocumentXDoc; 
     using (Stream str = myDoc.MainDocumentPart.GetStream()) 
     using (XmlReader xr = XmlReader.Create(str)) 
      mainDocumentXDoc = XDocument.Load(xr); 
     return mainDocumentXDoc; 
    } 


    private static void SaveXDocument(WordprocessingDocument myDoc, 
XDocument mainDocumentXDoc) 
    { 
     // Serialize the XDocument back into the part 
     using (Stream str = myDoc.MainDocumentPart.GetStream(
      FileMode.Create, FileAccess.Write)) 
     using (XmlWriter xw = XmlWriter.Create(str)) 
      mainDocumentXDoc.Save(xw); 
    } 

,這將產生其在內容和絕對路徑表示afchunk.dat文件。

基本上我不想通過所有編碼創建一個文件,我只是想將.html轉換爲.docx文件。

所以任何人都可以告訴我如何轉換而不會在html中出錯。

回答

0

嘗試創建一個DocumentResource(用品 - >添加新的)和圖像有關聯。

呼叫文檔

using (Stream imgStream = ip.GetStream()) 
    { 
     System.Drawing.Bitmap logo = DocumentResources._default; 
     logo.Save(imgStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
    } 

Drawing drawing = BuildImage(imageRelationshipID, "_default.jpg", 200, 30); 

而創建構建在頁眉或頁腳圖像的方法;

private static Drawing BuildImage(string imageRelationshipID, string imageName, int pixelWidth, int pixelHeight) 
    { 
     int emuWidth = (int)(pixelWidth * EMU_PER_PIXEL); 
     int emuHeight = (int)(pixelHeight * EMU_PER_PIXEL); 
     Drawing drawing = new Drawing(); 
     d.Wordprocessing.Inline inline = new d.Wordprocessing.Inline { DistanceFromTop = 0, DistanceFromBottom = 0, DistanceFromLeft = 0, DistanceFromRight = 0 }; 
     d.Wordprocessing.Anchor anchor = new d.Wordprocessing.Anchor(); 
     d.Wordprocessing.SimplePosition simplePos = new d.Wordprocessing.SimplePosition { X = 0, Y = 0 }; 
     d.Wordprocessing.Extent extent = new d.Wordprocessing.Extent { Cx = emuWidth, Cy = emuHeight }; 
     d.Wordprocessing.DocProperties docPr = new d.Wordprocessing.DocProperties { Id = 1, Name = imageName }; 
     d.Graphic graphic = new d.Graphic();    
     d.GraphicData graphicData = new d.GraphicData { Uri = GRAPHIC_DATA_URI }; 
     d.Pictures.Picture pic = new d.Pictures.Picture(); 
     d.Pictures.NonVisualPictureProperties nvPicPr = new d.Pictures.NonVisualPictureProperties(); 
     d.Pictures.NonVisualDrawingProperties cNvPr = new d.Pictures.NonVisualDrawingProperties { Id = 2, Name = imageName }; 
     d.Pictures.NonVisualPictureDrawingProperties cNvPicPr = new d.Pictures.NonVisualPictureDrawingProperties(); 
     d.Pictures.BlipFill blipFill = new d.Pictures.BlipFill(); 
     d.Blip blip = new d.Blip { Embed = imageRelationshipID }; 
     d.Stretch stretch = new d.Stretch(); 
     d.FillRectangle fillRect = new d.FillRectangle(); 
     d.Pictures.ShapeProperties spPr = new d.Pictures.ShapeProperties(); 
     d.Transform2D xfrm = new d.Transform2D(); 
     d.Offset off = new d.Offset { X = 0, Y = 0 }; 
     d.Extents ext = new d.Extents { Cx = emuWidth, Cy = emuHeight }; 
     d.PresetGeometry prstGeom = new d.PresetGeometry { Preset = d.ShapeTypeValues.Rectangle }; 
     d.AdjustValueList avLst = new d.AdjustValueList(); 
     xfrm.Append(off); 
     xfrm.Append(ext); 
     prstGeom.Append(avLst); 
     stretch.Append(fillRect); 
     spPr.Append(xfrm); 
     spPr.Append(prstGeom); 
     blipFill.Append(blip); 
     blipFill.Append(stretch); 
     nvPicPr.Append(cNvPr); 
     nvPicPr.Append(cNvPicPr); 
     pic.Append(nvPicPr); 
     pic.Append(blipFill); 
     pic.Append(spPr); 
     graphicData.Append(pic); 
     graphic.Append(graphicData); 
     inline.Append(extent); 
     inline.Append(docPr); 
     inline.Append(graphic); 
     drawing.Append(inline); 
     return drawing; 
    }