public void GetRelativeUriTest2() { Uri src = new Uri("/1/2/3/file.jpg", UriKind.Relative); Uri dest = new Uri("/1/2/", UriKind.Relative); Assert.AreEqual(new Uri("../file2.png", UriKind.Relative), PackUriHelper.GetRelativeUri(src, dest), "#3"); }
private XmlDocument GetXmlDocument(string startXml, Uri uri, string contentType, string relationship) { XmlDocument xmlDoc; if (_package.Package.PartExists(uri)) { xmlDoc = _package.GetXmlFromUri(uri); } else { xmlDoc = new XmlDocument(); xmlDoc.LoadXml(startXml); // Create a the part and add to the package PackagePart part = _package.Package.CreatePart(uri, contentType); // Save it to the package StreamWriter stream = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write)); xmlDoc.Save(stream); stream.Close(); _package.Package.Flush(); // create the relationship between the workbook and the new shared strings part _package.Package.CreateRelationship(PackUriHelper.GetRelativeUri(new Uri("/xl", UriKind.Relative), uri), TargetMode.Internal, relationship); _package.Package.Flush(); } return(xmlDoc); }
public void GetRelativeUriTest() { Uri src = new Uri("/1/2/3/file.jpg", UriKind.Relative); Uri dest = new Uri("/file2.png", UriKind.Relative); Assert.AreEqual(new Uri("../../../file2.png", UriKind.Relative), PackUriHelper.GetRelativeUri(src, dest), "#1"); dest = new Uri("/1/2", UriKind.Relative); Assert.AreEqual(new Uri("../../2", UriKind.Relative), PackUriHelper.GetRelativeUri(src, dest), "#2"); dest = new Uri("/1/2/", UriKind.Relative); Assert.AreEqual(new Uri("", UriKind.Relative), PackUriHelper.GetRelativeUri(src, src), "#4"); // See: http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getrelativeuri.aspx src = new Uri("/mydoc/markup/page.xml", UriKind.Relative); dest = new Uri("/mydoc/markup/picture.jpg", UriKind.Relative); Assert.AreEqual(new Uri("picture.jpg", UriKind.Relative), PackUriHelper.GetRelativeUri(src, dest), "#5"); src = new Uri("/mydoc/markup/page.xml", UriKind.Relative); dest = new Uri("/mydoc/picture.jpg", UriKind.Relative); Assert.AreEqual(new Uri("../picture.jpg", UriKind.Relative), PackUriHelper.GetRelativeUri(src, dest), "#6"); src = new Uri("/mydoc/markup/page.xml", UriKind.Relative); dest = new Uri("/mydoc/images/picture.jpg", UriKind.Relative); Assert.AreEqual(new Uri("../images/picture.jpg", UriKind.Relative), PackUriHelper.GetRelativeUri(src, dest), "#7"); }
private string SavePicture(Image image) { ImageConverter ic = new ImageConverter(); byte[] img = (byte[])ic.ConvertTo(image, typeof(byte[])); var ii = _drawings._package.AddImage(img); if (_drawings._hashes.ContainsKey(ii.Hash)) { var relID = _drawings._hashes[ii.Hash]; var rel = _drawings.Part.GetRelationship(relID); UriPic = PackUriHelper.ResolvePartUri(rel.SourceUri, rel.TargetUri); return(relID); } else { UriPic = ii.Uri; } //Set the Image and save it to the package. RelPic = _drawings.Part.CreateRelationship(PackUriHelper.GetRelativeUri(_drawings.UriDrawing, UriPic), TargetMode.Internal, ExcelPackage.schemaRelationships + "/image"); //AddNewPicture(img, picRelation.Id); _drawings._hashes.Add(ii.Hash, RelPic.Id); ImageHash = ii.Hash; return(RelPic.Id); }
private void InnerSave(Package package) { // 创建一个新的 workbookpart ExcelSaveContext context = new ExcelSaveContext(this) { Package = package }; context.LinqWriter.WriteWorkBook(); SaveWorkSheets(context); context.LinqWriter.WriteSharedStrings(); ((IPersistable)this.FileDetails).Save(context); ((IPersistable)context.GlobalStyles).Save(context); ((IPersistable)this.CalculationChain).Save(context); SaveTheme(context); package.CreateRelationship(PackUriHelper.GetRelativeUri(new Uri("/xl", UriKind.Relative), ExcelCommon.Uri_Workbook), TargetMode.Internal, ExcelCommon.Schema_Relationships + "/officeDocument"); package.Flush(); }
private void CreateBlankWb() { XmlDocument workbook = Workbook.WorkbookXml; // this will create the workbook xml in the package // create the relationship to the main part _package.CreateRelationship(PackUriHelper.GetRelativeUri(new Uri("/xl", UriKind.Relative), Workbook.WorkbookUri), TargetMode.Internal, schemaRelationships + "/officeDocument"); }
private void CopyTable(ExcelWorksheet Copy, ExcelWorksheet added) { string prevName = ""; //First copy the table XML foreach (var tbl in Copy.Tables) { string xml = tbl.TableXml.OuterXml; int Id = _pck.Workbook._nextTableID++; string name; if (prevName == "") { name = Copy.Tables.GetNewTableName(); } else { int ix = int.Parse(prevName.Substring(5)) + 1; name = string.Format("Table{0}", ix); while (_pck.Workbook.ExistsPivotTableName(name)) { name = string.Format("Table{0}", ++ix); } } prevName = name; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); xmlDoc.SelectSingleNode("//d:table/@id", tbl.NameSpaceManager).Value = Id.ToString(); xmlDoc.SelectSingleNode("//d:table/@name", tbl.NameSpaceManager).Value = name; xmlDoc.SelectSingleNode("//d:table/@displayName", tbl.NameSpaceManager).Value = name; xml = xmlDoc.OuterXml; var uriTbl = new Uri(string.Format("/xl/tables/table{0}.xml", Id), UriKind.Relative); var part = _pck.Package.CreatePart(uriTbl, "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml", _pck.Compression); StreamWriter streamTbl = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write)); streamTbl.Write(xml); streamTbl.Close(); //create the relationship and add the ID to the worksheet xml. var rel = added.Part.CreateRelationship(PackUriHelper.GetRelativeUri(added.WorksheetUri, uriTbl), TargetMode.Internal, ExcelPackage.schemaRelationships + "/table"); if (tbl.RelationshipID == null) { var topNode = added.WorksheetXml.SelectSingleNode("//d:tableParts", tbl.NameSpaceManager); if (topNode == null) { added.CreateNode("d:tableParts"); topNode = added.WorksheetXml.SelectSingleNode("//d:tableParts", tbl.NameSpaceManager); } XmlElement elem = added.WorksheetXml.CreateElement("tablePart", ExcelPackage.schemaMain); topNode.AppendChild(elem); elem.SetAttribute("id", ExcelPackage.schemaRelationships, rel.Id); } else { XmlAttribute relAtt; relAtt = added.WorksheetXml.SelectSingleNode(string.Format("//d:tableParts/d:tablePart/@r:id[.='{0}']", tbl.RelationshipID), tbl.NameSpaceManager) as XmlAttribute; relAtt.Value = rel.Id; } } }
internal void SaveHeaderFooterImages() { if (_vmlDrawingsHF != null) { if (_vmlDrawingsHF.Count == 0) { if (_vmlDrawingsHF.Uri != null) { _ws.Part.DeleteRelationship(_vmlDrawingsHF.RelId); _ws._package.Package.DeletePart(_vmlDrawingsHF.Uri); } } else { if (_vmlDrawingsHF.Uri == null) { _vmlDrawingsHF.Uri = XmlHelper.GetNewUri(_ws._package.Package, @"/xl/drawings/vmlDrawing{0}.vml"); } if (_vmlDrawingsHF.Part == null) { _vmlDrawingsHF.Part = _ws._package.Package.CreatePart(_vmlDrawingsHF.Uri, "application/vnd.openxmlformats-officedocument.vmlDrawing", _ws._package.Compression); var rel = _ws.Part.CreateRelationship(PackUriHelper.GetRelativeUri(_ws.WorksheetUri, _vmlDrawingsHF.Uri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/vmlDrawing"); _ws.SetHFLegacyDrawingRel(rel.Id); _vmlDrawingsHF.RelId = rel.Id; foreach (ExcelVmlDrawingPicture draw in _vmlDrawingsHF) { rel = _vmlDrawingsHF.Part.CreateRelationship(PackUriHelper.GetRelativeUri(_vmlDrawingsHF.Uri, draw.ImageUri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/image"); draw.RelId = rel.Id; } } _vmlDrawingsHF.VmlDrawingXml.Save(_vmlDrawingsHF.Part.GetStream()); } } }
public static void AddParafImza(this Package package, byte[] imza) { var partParafImza = package.CreatePart(Constants.URI_PARAFIMZA, Constants.MIME_OCTETSTREAM, CompressionOption.Maximum); partParafImza.AddToPartStream(imza); package.GetPart(Constants.URI_PARAFOZETI).CreateRelationship( PackUriHelper.GetRelativeUri(Constants.URI_PARAFOZETI, Constants.URI_PARAFIMZA), TargetMode.Internal, Constants.RELATION_TYPE_PARAFIMZA, Constants.ID_PARAFIMZA); }
private string MakeRelativeUri(Uri parentUri, string uri) { string result = uri; Uri uri2 = new Uri(uri, UriKind.RelativeOrAbsolute); if (!uri2.IsAbsoluteUri) { Uri targetPartUri = PackUriHelper.ResolvePartUri(parentUri, uri2); result = PackUriHelper.GetRelativeUri(parentUri, targetPartUri).ToString(); } return(result); }
public void CreateWordDocumentWithTextAndImage() { // Part Names const string mainDocumentPartName = "/document/main.xml"; const string imagePartName = "/images/cat.jpeg"; // Content types const string mainDocumentPartContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"; const string imagePartContentType = System.Net.Mime.MediaTypeNames.Image.Jpeg; // Relationsip Types const string mainDocumentPartRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"; const string imagePartRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"; // Image relationship Id const string imageRelationshipId = "rId1"; // Create new Word document using (var document = Package.Open("result.docx", System.IO.FileMode.Create)) { // Add main part var mainPartUri = new Uri(mainDocumentPartName, UriKind.Relative); var mainPart = document.CreatePart(mainPartUri, mainDocumentPartContentType); using (var mainPartStream = mainPart.GetStream()) { mainPartStream.Write(Properties.Resources.main, 0, Properties.Resources.main.Length); mainPartStream.Close(); } document.CreateRelationship(mainPartUri, TargetMode.Internal, mainDocumentPartRelationshipType); // Add image var imagePartUri = new Uri(imagePartName, UriKind.Relative); var imagePart = document.CreatePart(imagePartUri, imagePartContentType); using (var imagePartStream = imagePart.GetStream()) { imagePartStream.Write(Properties.Resources.cat, 0, Properties.Resources.cat.Length); imagePartStream.Close(); } // Create relative uri for image var relativeUri = PackUriHelper.GetRelativeUri(mainPartUri, imagePartUri); mainPart.CreateRelationship(relativeUri, TargetMode.Internal, imagePartRelationshipType, imageRelationshipId); document.Close(); } }
internal ExcelPicture(ExcelDrawings drawings, XmlNode node, FileInfo imageFile, Uri hyperlink) : base(drawings, node, "xdr:pic/xdr:nvPicPr/xdr:cNvPr/@name") { XmlElement picNode = node.OwnerDocument.CreateElement("xdr", "pic", ExcelPackage.schemaSheetDrawings); node.InsertAfter(picNode, node.SelectSingleNode("xdr:to", NameSpaceManager)); _hyperlink = hyperlink; picNode.InnerXml = PicStartXml(); node.InsertAfter(node.OwnerDocument.CreateElement("xdr", "clientData", ExcelPackage.schemaSheetDrawings), picNode); Package package = drawings.Worksheet._package.Package; ContentType = GetContentType(imageFile.Extension); _image = Image.FromFile(imageFile.FullName); ImageConverter ic = new ImageConverter(); byte[] img = (byte[])ic.ConvertTo(_image, typeof(byte[])); UriPic = GetNewUri(package, "/xl/media/{0}" + imageFile.Name); var ii = _drawings._package.AddImage(img, UriPic, ContentType); //string relID = GetPictureRelID(img); //if (relID == "") string relID; if (!drawings._hashes.ContainsKey(ii.Hash)) { //UriPic = GetNewUri(package, "/xl/media/image{0}" + imageFile.Extension); //Part = package.CreatePart(UriPic, ContentType, CompressionOption.NotCompressed); ////Save the picture to package. //byte[] file = File.ReadAllBytes(imageFile.FullName); //var strm = Part.GetStream(FileMode.Create, FileAccess.Write); //strm.Write(file, 0, file.Length); Part = ii.Part; RelPic = drawings.Part.CreateRelationship(PackUriHelper.GetRelativeUri(drawings.UriDrawing, ii.Uri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/image"); relID = RelPic.Id; _drawings._hashes.Add(ii.Hash, relID); AddNewPicture(img, relID); } else { relID = drawings._hashes[ii.Hash]; var rel = _drawings.Part.GetRelationship(relID); UriPic = PackUriHelper.ResolvePartUri(rel.SourceUri, rel.TargetUri); } SetPosDefaults(Image); //Create relationship node.SelectSingleNode("xdr:pic/xdr:blipFill/a:blip/@r:embed", NameSpaceManager).Value = relID; package.Flush(); }
public static void AddMuhur(this Package package, byte[] muhur, PaketVersiyonTuru paketVersiyon) { var partMuhurUri = paketVersiyon == PaketVersiyonTuru.Versiyon1X ? Constants.URI_MUHUR_V1X : Constants.URI_MUHUR_V2X; var partMuhur = package.CreatePart(partMuhurUri, Constants.MIME_OCTETSTREAM, CompressionOption.Maximum); partMuhur.AddToPartStream(muhur); package.GetPart(Constants.URI_NIHAIOZET).CreateRelationship( PackUriHelper.GetRelativeUri(Constants.URI_NIHAIOZET, partMuhurUri), TargetMode.Internal, Constants.RELATION_TYPE_MUHUR, Constants.ID_MUHUR); }
private static void SaveHtmlAsDocx(string fName, string htmlBody) { FileInfo fi = new FileInfo(fName); var htmlByteContent = Encoding.UTF8.GetBytes(String.Concat("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><title></title></head><body>", htmlBody, "</body></html>")); var namespaceDocx = "http://schemas.openxmlformats.org/wordprocessingml/2006/main"; var namespaceRs = "http://schemas.openxmlformats.org/officeDocument/2006/relationships"; var namespaceRsOfficeDoc = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"; var namespaceRsOfficeAltCh = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk"; var uriDoc = new Uri("/word/document.xml", UriKind.Relative); var uriBase = new Uri("/word/document.xml", UriKind.Relative); var uri = new Uri("/word/" + Regex.Replace(fi.Name.Substring(0, fi.Name.LastIndexOf('.')), @"[^0-9a-zA-Z]", "") + ".html", UriKind.Relative); var uriRelative = PackUriHelper.GetRelativeUri(uriBase, uri); Package packageDocx = Package.Open(fi.FullName, FileMode.Create, FileAccess.ReadWrite); XmlDocument documentRoot = new XmlDocument(); XmlElement documentTag = documentRoot.CreateElement("w:document", namespaceDocx); documentRoot.AppendChild(documentTag); XmlElement documentBody = documentRoot.CreateElement("w:body", namespaceDocx); documentTag.AppendChild(documentBody); XmlElement chunkAlt = documentRoot.CreateElement("w:altChunk", namespaceDocx); XmlAttribute relationId = chunkAlt.Attributes.Append(documentRoot.CreateAttribute("r:id", namespaceRs)); relationId.Value = "rId2"; documentBody.AppendChild(chunkAlt); PackagePart packageDocxXml = packageDocx.CreatePart(uriDoc, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"); StreamWriter streamStartPart = new StreamWriter(packageDocxXml.GetStream(FileMode.Create, FileAccess.Write)); documentRoot.Save(streamStartPart); streamStartPart.Close(); packageDocx.Flush(); packageDocx.CreateRelationship(uriDoc, TargetMode.Internal, namespaceRsOfficeDoc, "rId1"); packageDocx.Flush(); PackagePart packageDocxXmlDocument = packageDocx.GetPart(uriBase); PackagePart packageDocxXmlAltchunk = packageDocx.CreatePart(uri, "text/html"); using (Stream targetStream = packageDocxXmlAltchunk.GetStream()) { targetStream.Write(htmlByteContent, 0, htmlByteContent.Length); } packageDocxXmlDocument.CreateRelationship(uriRelative, TargetMode.Internal, namespaceRsOfficeAltCh, "rId2"); packageDocx.Close(); }
/// <summary> /// Creates a relationship from one package part to another. /// </summary> /// <param name="sourceUri">The uri of the source part.</param> /// <param name="targetUri">The relative path representing the location of the target part based on the source part.</param> /// <param name="relationshipType">The type of relationship to create.</param> /// <returns>The ID of the new relationship.</returns> public string CreateInternalRelationship(Uri sourceUri, Uri targetUri, string relationshipType) { // open the source part PackagePart sourcePart = m_package.GetPart(sourceUri); // create the relationship PackageRelationship relationship = sourcePart.CreateRelationship( PackUriHelper.GetRelativeUri(sourceUri, targetUri), TargetMode.Internal, relationshipType); // return the new rel id return(relationship.Id); }
private void CopyComment(ExcelWorksheet Copy, ExcelWorksheet workSheet) { //First copy the drawing XML string xml = Copy.Comments.CommentXml.InnerXml; var uriComment = new Uri(string.Format("/xl/comments{0}.xml", workSheet.SheetID), UriKind.Relative); if (_pck.Package.PartExists(uriComment)) { uriComment = XmlHelper.GetNewUri(_pck.Package, "/xl/drawings/vmldrawing{0}.vml"); } var part = _pck.Package.CreatePart(uriComment, "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml", _pck.Compression); StreamWriter streamDrawing = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write)); streamDrawing.Write(xml); streamDrawing.Close(); //Add the relationship ID to the worksheet xml. PackageRelationship commentRelation = workSheet.Part.CreateRelationship(PackUriHelper.GetRelativeUri(workSheet.WorksheetUri, uriComment), TargetMode.Internal, ExcelPackage.schemaRelationships + "/comments"); xml = Copy.VmlDrawingsComments.VmlDrawingXml.InnerXml; var uriVml = new Uri(string.Format("/xl/drawings/vmldrawing{0}.vml", workSheet.SheetID), UriKind.Relative); if (_pck.Package.PartExists(uriVml)) { uriVml = XmlHelper.GetNewUri(_pck.Package, "/xl/drawings/vmldrawing{0}.vml"); } var vmlPart = _pck.Package.CreatePart(uriVml, "application/vnd.openxmlformats-officedocument.vmlDrawing", _pck.Compression); StreamWriter streamVml = new StreamWriter(vmlPart.GetStream(FileMode.Create, FileAccess.Write)); streamVml.Write(xml); streamVml.Close(); PackageRelationship newVmlRel = workSheet.Part.CreateRelationship(PackUriHelper.GetRelativeUri(workSheet.WorksheetUri, uriVml), TargetMode.Internal, ExcelPackage.schemaRelationships + "/vmlDrawing"); //Add the relationship ID to the worksheet xml. XmlElement e = workSheet.WorksheetXml.SelectSingleNode("//d:legacyDrawing", _namespaceManager) as XmlElement; if (e == null) { workSheet.CreateNode("d:legacyDrawing"); e = workSheet.WorksheetXml.SelectSingleNode("//d:legacyDrawing", _namespaceManager) as XmlElement; } e.SetAttribute("id", ExcelPackage.schemaRelationships, newVmlRel.Id); }
internal ExcelPicture(ExcelDrawings drawings, XmlNode node, FileInfo imageFile, Uri hyperlink) : base(drawings, node, "xdr:pic/xdr:nvPicPr/xdr:cNvPr/@name") { XmlElement picNode = node.OwnerDocument.CreateElement("xdr", "pic", ExcelPackage.schemaSheetDrawings); node.InsertAfter(picNode, node.SelectSingleNode("xdr:to", NameSpaceManager)); _hyperlink = hyperlink; picNode.InnerXml = PicStartXml(); node.InsertAfter(node.OwnerDocument.CreateElement("xdr", "clientData", ExcelPackage.schemaSheetDrawings), picNode); //Changed to stream 2/4-13 (issue 14834). Thnx SClause var package = drawings.Worksheet._package.Package; ContentType = GetContentType(imageFile.Extension); var imagestream = new FileStream(imageFile.FullName, FileMode.Open, FileAccess.Read); _image = Image.FromStream(imagestream); ImageConverter ic = new ImageConverter(); var img = (byte[])ic.ConvertTo(_image, typeof(byte[])); imagestream.Close(); UriPic = GetNewUri(package, "/xl/media/{0}" + imageFile.Name); var ii = _drawings._package.AddImage(img, UriPic, ContentType); string relID; if (!drawings._hashes.ContainsKey(ii.Hash)) { Part = ii.Part; RelPic = drawings.Part.CreateRelationship(PackUriHelper.GetRelativeUri(drawings.UriDrawing, ii.Uri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/image"); relID = RelPic.Id; _drawings._hashes.Add(ii.Hash, relID); AddNewPicture(img, relID); } else { relID = drawings._hashes[ii.Hash]; var rel = _drawings.Part.GetRelationship(relID); UriPic = PackUriHelper.ResolvePartUri(rel.SourceUri, rel.TargetUri); } SetPosDefaults(Image); //Create relationship node.SelectSingleNode("xdr:pic/xdr:blipFill/a:blip/@r:embed", NameSpaceManager).Value = relID; package.Flush(); }
string CreateWorkbookRel(string Name, int sheetID, Uri uriWorksheet) { //Create the relationship between the workbook and the new worksheet PackageRelationship rel = _pck.Workbook.Part.CreateRelationship(PackUriHelper.GetRelativeUri(_pck.Workbook.WorkbookUri, uriWorksheet), TargetMode.Internal, ExcelPackage.schemaRelationships + "/worksheet"); _pck.Package.Flush(); //Create the new sheet node XmlElement worksheetNode = _pck.Workbook.WorkbookXml.CreateElement("sheet", ExcelPackage.schemaMain); worksheetNode.SetAttribute("name", Name); worksheetNode.SetAttribute("sheetId", sheetID.ToString()); worksheetNode.SetAttribute("id", ExcelPackage.schemaRelationships, rel.Id); TopNode.AppendChild(worksheetNode); return(rel.Id); }
private void UpdateSharedStringsXml() { PackagePart stringPart; if (_package.Package.PartExists(SharedStringsUri)) { stringPart = _package.Package.GetPart(SharedStringsUri); } else { stringPart = _package.Package.CreatePart(SharedStringsUri, @"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml", _package.Compression); Part.CreateRelationship(PackUriHelper.GetRelativeUri(WorkbookUri, SharedStringsUri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/sharedStrings"); } StreamWriter sw = new StreamWriter(stringPart.GetStream(FileMode.Create, FileAccess.Write)); sw.Write("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?><sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"{0}\" uniqueCount=\"{0}\">", _sharedStrings.Count); foreach (string t in _sharedStrings.Keys) { SharedStringItem ssi = _sharedStrings[t]; if (ssi.isRichText) { sw.Write("<si>"); ExcelEncodeString(sw, t); sw.Write("</si>"); } else { if (t.Length > 0 && (t[0] == ' ' || t[t.Length - 1] == ' ' || t.Contains(" ") || t.Contains("\t"))) { sw.Write("<si><t xml:space=\"preserve\">"); } else { sw.Write("<si><t>"); } ExcelEncodeString(sw, SecurityElement.Escape(t)); sw.Write("</t></si>"); } } sw.Write("</sst>"); sw.Flush(); }
/// <summary> /// get the relative Uri /// </summary> public static Uri GetRelativeUri(Uri sourcePartUri, Uri targetPartUri) { Uri result = PackUriHelper.GetRelativeUri(sourcePartUri, targetPartUri); if (result.ToString().StartsWith("/")) { // bug in Mono, see https://bugzilla.xamarin.com/show_bug.cgi?id=2527 // Mono always returns the sourcePartUri. string source = sourcePartUri.ToString(); string target = targetPartUri.ToString(); int countSame = 0; while (countSame < target.Length && countSame < source.Length && target[countSame] == source[countSame]) { countSame++; } // go back to the last separator countSame = target.Substring(0, countSame).LastIndexOf("/") + 1; string ResultString = target.Substring(countSame); if (countSame > 0) { // how many directories do we need to go up from the working Directory while (countSame < source.Length) { if (source[countSame] == '/') { ResultString = "../" + ResultString; } countSame++; } } result = new Uri(ResultString, UriKind.Relative); } return(result); }
private XmlElement CreateDrawingXml() { if (DrawingXml.OuterXml == "") { DrawingXml.LoadXml(string.Format("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><xdr:wsDr xmlns:xdr=\"{0}\" xmlns:a=\"{1}\" />", ExcelPackage.schemaSheetDrawings, ExcelPackage.schemaDrawings)); _uriDrawing = new Uri(string.Format("/xl/drawings/drawing{0}.xml", Worksheet.SheetID), UriKind.Relative); Package package = Worksheet._package.Package; _part = package.CreatePart(_uriDrawing, "application/vnd.openxmlformats-officedocument.drawing+xml", _package.Compression); StreamWriter streamChart = new StreamWriter(_part.GetStream(FileMode.Create, FileAccess.Write)); DrawingXml.Save(streamChart); streamChart.Close(); package.Flush(); _drawingRelation = Worksheet.Part.CreateRelationship(PackUriHelper.GetRelativeUri(Worksheet.WorksheetUri, _uriDrawing), TargetMode.Internal, ExcelPackage.schemaRelationships + "/drawing"); XmlElement e = Worksheet.WorksheetXml.CreateElement("drawing", ExcelPackage.schemaMain); e.SetAttribute("id", ExcelPackage.schemaRelationships, _drawingRelation.Id); Worksheet.WorksheetXml.DocumentElement.AppendChild(e); package.Flush(); } XmlNode colNode = _drawingsXml.SelectSingleNode("//xdr:wsDr", NameSpaceManager); XmlElement drawNode = _drawingsXml.CreateElement("xdr", "twoCellAnchor", ExcelPackage.schemaSheetDrawings); colNode.AppendChild(drawNode); //Add from position Element; XmlElement fromNode = _drawingsXml.CreateElement("xdr", "from", ExcelPackage.schemaSheetDrawings); drawNode.AppendChild(fromNode); fromNode.InnerXml = "<xdr:col>0</xdr:col><xdr:colOff>0</xdr:colOff><xdr:row>0</xdr:row><xdr:rowOff>0</xdr:rowOff>"; //Add to position Element; XmlElement toNode = _drawingsXml.CreateElement("xdr", "to", ExcelPackage.schemaSheetDrawings); drawNode.AppendChild(toNode); toNode.InnerXml = "<xdr:col>10</xdr:col><xdr:colOff>0</xdr:colOff><xdr:row>10</xdr:row><xdr:rowOff>0</xdr:rowOff>"; return(drawNode); }
private void CopyVmlDrawing(ExcelWorksheet origSheet, ExcelWorksheet newSheet) { var xml = origSheet.VmlDrawingsComments.VmlDrawingXml.OuterXml; var vmlUri = new Uri(string.Format("/xl/drawings/vmlDrawing{0}.vml", newSheet.SheetID), UriKind.Relative); var part = _pck.Package.CreatePart(vmlUri, "application/vnd.openxmlformats-officedocument.vmlDrawing", _pck.Compression); using (var streamDrawing = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write))) { streamDrawing.Write(xml); } //Add the relationship ID to the worksheet xml. PackageRelationship vmlRelation = newSheet.Part.CreateRelationship(PackUriHelper.GetRelativeUri(newSheet.WorksheetUri, vmlUri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/vmlDrawing"); var e = newSheet.WorksheetXml.SelectSingleNode("//d:legacyDrawing", _namespaceManager) as XmlElement; if (e == null) { e = newSheet.WorksheetXml.CreateNode(XmlNodeType.Entity, "//d:legacyDrawing", _namespaceManager.LookupNamespace("d")) as XmlElement; } if (e != null) { e.SetAttribute("id", ExcelPackage.schemaRelationships, vmlRelation.Id); } }
void IPersistable.Save(ExcelSaveContext context) { if (this._Theme != null) { PackagePart themePart = context.Package.CreatePart(ExcelCommon.Uri_Theme, ExcelCommon.ContentType_Theme, this._WorkBook.Compression); context.Package.GetPart(ExcelCommon.Uri_Workbook).CreateRelationship(PackUriHelper.GetRelativeUri(ExcelCommon.Uri_Workbook, ExcelCommon.Uri_Theme), TargetMode.Internal, ExcelCommon.Schema_Relationships + "/theme"); using (StreamWriter streamCore = new StreamWriter(themePart.GetStream(FileMode.Create, FileAccess.Write))) { this._Theme.Save(streamCore); } /* using (XmlTextWriter writer = new XmlTextWriter(themePart.GetStream(FileMode.Create, FileAccess.Write), Encoding.UTF8)) * { * context.Writer.WriteTheme(this, writer); * } */ } //PackagePart themePart = context.Package.GetPart(ExcelCommon.Uri_Workbook).CreatePart(ExcelCommon.Uri_Theme, ExcelCommon.ContentType_Theme, this._WorkBook.Compression); //using (XmlTextWriter writer = new XmlTextWriter(themePart.GetStream(FileMode.Create, FileAccess.Write), Encoding.UTF8)) //{ // context.Writer.WriteTheme(this, writer); //} }
private static void CreatePartRelationship(Uri partUri, string partRelationshipType, string partId, PackagePart parentPart) { Uri relativeUri = PackUriHelper.GetRelativeUri(parentPart.Uri, partUri); parentPart.CreateRelationship(relativeUri, TargetMode.Internal, partRelationshipType, partId); }
private void CopyDrawing(ExcelWorksheet Copy, ExcelWorksheet workSheet /*, PackageRelationship r*/) { //Check if the worksheet has drawings //if(_xlPackage.Package.PartExists(r.TargetUri)) //{ //First copy the drawing XML string xml = Copy.Drawings.DrawingXml.OuterXml; var uriDraw = new Uri(string.Format("/xl/drawings/drawing{0}.xml", workSheet.SheetID), UriKind.Relative); var part = _pck.Package.CreatePart(uriDraw, "application/vnd.openxmlformats-officedocument.drawing+xml", _pck.Compression); StreamWriter streamDrawing = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write)); streamDrawing.Write(xml); streamDrawing.Close(); XmlDocument drawXml = new XmlDocument(); drawXml.LoadXml(xml); //Add the relationship ID to the worksheet xml. PackageRelationship drawRelation = workSheet.Part.CreateRelationship(PackUriHelper.GetRelativeUri(workSheet.WorksheetUri, uriDraw), TargetMode.Internal, ExcelPackage.schemaRelationships + "/drawing"); XmlElement e = workSheet.WorksheetXml.SelectSingleNode("//d:drawing", _namespaceManager) as XmlElement; e.SetAttribute("id", ExcelPackage.schemaRelationships, drawRelation.Id); foreach (ExcelDrawing draw in Copy.Drawings) { if (draw is ExcelChart) { ExcelChart chart = draw as ExcelChart; xml = chart.ChartXml.InnerXml; var UriChart = XmlHelper.GetNewUri(_pck.Package, "/xl/charts/chart{0}.xml"); var chartPart = _pck.Package.CreatePart(UriChart, "application/vnd.openxmlformats-officedocument.drawingml.chart+xml", _pck.Compression); StreamWriter streamChart = new StreamWriter(chartPart.GetStream(FileMode.Create, FileAccess.Write)); streamChart.Write(xml); streamChart.Close(); //Now create the new relationship to the copied chart xml var prevRelID = draw.TopNode.SelectSingleNode("xdr:graphicFrame/a:graphic/a:graphicData/c:chart/@r:id", Copy.Drawings.NameSpaceManager).Value; var rel = part.CreateRelationship(PackUriHelper.GetRelativeUri(uriDraw, UriChart), TargetMode.Internal, ExcelPackage.schemaRelationships + "/chart"); XmlAttribute relAtt = drawXml.SelectSingleNode(string.Format("//c:chart/@r:id[.='{0}']", prevRelID), Copy.Drawings.NameSpaceManager) as XmlAttribute; relAtt.Value = rel.Id; } else if (draw is ExcelPicture) { ExcelPicture pic = draw as ExcelPicture; var uri = pic.UriPic; if (!workSheet.Workbook._package.Package.PartExists(uri)) { var picPart = workSheet.Workbook._package.Package.CreatePart(uri, pic.ContentType, CompressionOption.NotCompressed); pic.Image.Save(picPart.GetStream(FileMode.Create, FileAccess.Write), pic.ImageFormat); } var prevRelID = draw.TopNode.SelectSingleNode("xdr:pic/xdr:blipFill/a:blip/@r:embed", Copy.Drawings.NameSpaceManager).Value; var rel = part.CreateRelationship(PackUriHelper.GetRelativeUri(workSheet.WorksheetUri, uri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/image"); XmlAttribute relAtt = drawXml.SelectSingleNode(string.Format("//xdr:pic/xdr:blipFill/a:blip/@r:embed[.='{0}']", prevRelID), Copy.Drawings.NameSpaceManager) as XmlAttribute; relAtt.Value = rel.Id; } } //rewrite the drawing xml with the new relID's streamDrawing = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write)); streamDrawing.Write(drawXml.OuterXml); streamDrawing.Close(); //} }
private static void SaveDOCX(string fileName, string BodyText, bool IncludeHTML) { string WordprocessingML = "http://schemas.openxmlformats.org/wordprocessingml/2006/main"; var pkgOutputDoc = Package.Open(fileName, FileMode.Create, FileAccess.ReadWrite); XmlDocument xmlStartPart = new XmlDocument(); XmlElement tagDocument = xmlStartPart.CreateElement("w:document", WordprocessingML); xmlStartPart.AppendChild(tagDocument); XmlElement tagBody = xmlStartPart.CreateElement("w:body", WordprocessingML); tagDocument.AppendChild(tagBody); if (IncludeHTML) { string relationshipNamespace = "http://schemas.openxmlformats.org/officeDocument/2006/relationships"; XmlElement tagAltChunk = xmlStartPart.CreateElement("w:altChunk", WordprocessingML); XmlAttribute RelID = tagAltChunk.Attributes.Append(xmlStartPart.CreateAttribute("r:id", relationshipNamespace)); RelID.Value = "rId2"; tagBody.AppendChild(tagAltChunk); } else { XmlElement tagParagraph = xmlStartPart.CreateElement("w:p", WordprocessingML); tagBody.AppendChild(tagParagraph); XmlElement tagRun = xmlStartPart.CreateElement("w:r", WordprocessingML); tagParagraph.AppendChild(tagRun); XmlElement tagText = xmlStartPart.CreateElement("w:t", WordprocessingML); tagRun.AppendChild(tagText); XmlNode nodeText = xmlStartPart.CreateNode(XmlNodeType.Text, "w:t", WordprocessingML); nodeText.Value = BodyText; tagText.AppendChild(nodeText); } Uri docuri = new Uri("/word/document.xml", UriKind.Relative); PackagePart docpartDocumentXML = pkgOutputDoc.CreatePart(docuri, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"); StreamWriter streamStartPart = new StreamWriter(docpartDocumentXML.GetStream(FileMode.Create, FileAccess.Write)); xmlStartPart.Save(streamStartPart); streamStartPart.Close(); pkgOutputDoc.Flush(); pkgOutputDoc.CreateRelationship(docuri, TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument", "rId1"); pkgOutputDoc.Flush(); Uri uriBase = new Uri("/word/document.xml", UriKind.Relative); PackagePart partDocumentXML = pkgOutputDoc.GetPart(uriBase); Uri uri = new Uri("/word/websiteinput.html", UriKind.Relative); string html = string.Concat("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head><title></title></head><body>", BodyText, "</body></html>"); byte[] Origem = Encoding.UTF8.GetBytes(html); PackagePart altChunkpart = pkgOutputDoc.CreatePart(uri, "text/html"); using (Stream targetStream = altChunkpart.GetStream()) { targetStream.Write(Origem, 0, Origem.Length); } Uri relativeAltUri = PackUriHelper.GetRelativeUri(uriBase, uri); partDocumentXML.CreateRelationship(relativeAltUri, TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk", "rId2"); pkgOutputDoc.Close(); }
public static void SaveDOCX(Stream fileStream, string BodyText, bool IncludeHTML) { // use the Open XML namespace for WordprocessingML: string WordprocessingML = "http://schemas.openxmlformats.org/wordprocessingml/2006/main"; // create a new package (Open XML document) ... Package pkgOutputDoc = null; pkgOutputDoc = Package.Open(fileStream, FileMode.OpenOrCreate, FileAccess.ReadWrite); // create the start part, set up the nested structure ... XmlDocument xmlStartPart = new XmlDocument(); XmlElement tagDocument = xmlStartPart.CreateElement("w:document", WordprocessingML); xmlStartPart.AppendChild(tagDocument); XmlElement tagBody = xmlStartPart.CreateElement("w:body", WordprocessingML); tagDocument.AppendChild(tagBody); if (IncludeHTML) { string relationshipNamespace = "http://schemas.openxmlformats.org/officeDocument/2006/relationships"; XmlElement tagAltChunk = xmlStartPart.CreateElement("w:altChunk", WordprocessingML); XmlAttribute RelID = tagAltChunk.Attributes.Append(xmlStartPart.CreateAttribute("r:id", relationshipNamespace)); RelID.Value = "rId2"; tagBody.AppendChild(tagAltChunk); } else { XmlElement tagParagraph = xmlStartPart.CreateElement("w:p", WordprocessingML); tagBody.AppendChild(tagParagraph); XmlElement tagRun = xmlStartPart.CreateElement("w:r", WordprocessingML); tagParagraph.AppendChild(tagRun); XmlElement tagText = xmlStartPart.CreateElement("w:t", WordprocessingML); tagRun.AppendChild(tagText); // Note nesting of tags for the WordprocessingML document (the "start part") ... // w:document contains ... // w:body, which contains ... // w:p (paragraph), which contains ... // w:r (run), which contains ... // w:t (text) // insert text into the start part, as a "Text" node ... XmlNode nodeText = xmlStartPart.CreateNode(XmlNodeType.Text, "w:t", WordprocessingML); nodeText.Value = BodyText; tagText.AppendChild(nodeText); } // save the main document part (document.xml) ... Uri docuri = new Uri("/word/document.xml", UriKind.Relative); PackagePart docpartDocumentXML = pkgOutputDoc.CreatePart(docuri, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"); StreamWriter streamStartPart = new StreamWriter(docpartDocumentXML.GetStream(FileMode.Create, FileAccess.Write)); xmlStartPart.Save(streamStartPart); streamStartPart.Close(); pkgOutputDoc.Flush(); // create the relationship part pkgOutputDoc.CreateRelationship(docuri, TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument", "rId1"); pkgOutputDoc.Flush(); //this part was taken from the HTMLtoWordML project on CodeProject, authored by Paulo Vaz, which borrowed work from Praveen Bonakurthi //original project location for Paulo's project is http://www.codeproject.com/KB/aspnet/HTMLtoWordML.aspx, and it contains a link to the article //by Praveen Bonakurthi. I didn't want to have a resident template on the server, so it led to this project Uri uriBase = new Uri("/word/document.xml", UriKind.Relative); PackagePart partDocumentXML = pkgOutputDoc.GetPart(uriBase); Uri uri = new Uri("/word/websiteinput.html", UriKind.Relative); //creating the html file from the output of the webform string html = string.Concat("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head><title></title></head><body>", BodyText, "</body></html>"); byte[] Origem = Encoding.UTF8.GetBytes(html); PackagePart altChunkpart = pkgOutputDoc.CreatePart(uri, "text/html"); using (Stream targetStream = altChunkpart.GetStream()) { targetStream.Write(Origem, 0, Origem.Length); } Uri relativeAltUri = PackUriHelper.GetRelativeUri(uriBase, uri); //create the relationship in the final file partDocumentXML.CreateRelationship(relativeAltUri, TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk", "rId2"); //close the document ... pkgOutputDoc.Flush(); }
private void SerializeHyperlink(PathGeometry geometry, String id, Uri navigateUri) { String nameForType = "Path"; XmlWriter writer = LinkXmlWriter; bool useID = false; if (!String.IsNullOrEmpty(id)) { useID = AddLinkTarget(id); } if (!useID && navigateUri == null) { // don't write out this path return; } writer.WriteStartElement(nameForType); if (navigateUri != null) { if (IsFragment(navigateUri)) { XpsPackagingPolicy policy = SerializationManager.PackagingPolicy as XpsPackagingPolicy; XpsOMPackagingPolicy omPolicy = SerializationManager.PackagingPolicy as XpsOMPackagingPolicy; if (policy == null && omPolicy == null) { throw new XpsSerializationException(SR.Get(SRID.ReachSerialization_WrongPackagingPolicy)); } Uri documentUri = SerializationManager.PackagingPolicy.CurrentFixedDocumentUri; Uri pageUri = SerializationManager.PackagingPolicy.CurrentFixedPageUri; Uri relativeUri = PackUriHelper.GetRelativeUri(pageUri, documentUri); string documentFragmentUri = relativeUri.OriginalString + navigateUri.OriginalString; WriteAttribute(writer, "FixedPage.NavigateUri", documentFragmentUri); } else { WriteAttribute(writer, "FixedPage.NavigateUri", navigateUri); } WriteAttribute(writer, "Fill", "#00000000"); } else { WriteAttribute(writer, "Opacity", "0"); } if (useID) { WriteAttribute(writer, "Name", id); } geometry.FillRule = FillRule.Nonzero; Size pageSize = ((IXpsSerializationManager)_serializationManager).FixedPageSize; VisualTreeFlattener.WritePath(writer, geometry, pageSize); writer.WriteEndElement(); }