Browse Source

Merge pull request #88 from MaLevi4/ecl

Add method to insert chart after paragraph
master
PrzemyslawKlys 9 years ago
parent
commit
49b475d1f7
1 changed files with 54 additions and 0 deletions
  1. 54
    0
      DocX/DocX.cs

+ 54
- 0
DocX/DocX.cs View File

@@ -4378,6 +4378,60 @@ namespace Novacode
p.Xml.Add(chartElement);
}
/// <summary>
/// Insert a chart in document after paragraph
/// </summary>
public void InsertChartAfterParagraph(Chart chart, Paragraph paragraph) {
// Create a new chart part uri.
String chartPartUriPath = String.Empty;
Int32 chartIndex = 1;
do {
chartPartUriPath = String.Format
(
"/word/charts/chart{0}.xml",
chartIndex
);
chartIndex++;
} while (package.PartExists(new Uri(chartPartUriPath, UriKind.Relative)));
// Create chart part.
PackagePart chartPackagePart = package.CreatePart(new Uri(chartPartUriPath, UriKind.Relative), "application/vnd.openxmlformats-officedocument.drawingml.chart+xml", CompressionOption.Normal);
// Create a new chart relationship
String relID = GetNextFreeRelationshipID();
PackageRelationship rel = mainPart.CreateRelationship(chartPackagePart.Uri, TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart", relID);
// Save a chart info the chartPackagePart
using (TextWriter tw = new StreamWriter(chartPackagePart.GetStream(FileMode.Create, FileAccess.Write)))
chart.Xml.Save(tw);
// Insert a new chart into a paragraph.
Paragraph p = paragraph;
XElement chartElement = new XElement(
XName.Get("r", DocX.w.NamespaceName),
new XElement(
XName.Get("drawing", DocX.w.NamespaceName),
new XElement(
XName.Get("inline", DocX.wp.NamespaceName),
new XElement(XName.Get("extent", DocX.wp.NamespaceName), new XAttribute("cx", "5486400"), new XAttribute("cy", "3200400")),
new XElement(XName.Get("effectExtent", DocX.wp.NamespaceName), new XAttribute("l", "0"), new XAttribute("t", "0"), new XAttribute("r", "19050"), new XAttribute("b", "19050")),
new XElement(XName.Get("docPr", DocX.wp.NamespaceName), new XAttribute("id", "1"), new XAttribute("name", "chart")),
new XElement(
XName.Get("graphic", DocX.a.NamespaceName),
new XElement(
XName.Get("graphicData", DocX.a.NamespaceName),
new XAttribute("uri", DocX.c.NamespaceName),
new XElement(
XName.Get("chart", DocX.c.NamespaceName),
new XAttribute(XName.Get("id", DocX.r.NamespaceName), relID)
)
)
)
)
));
p.Xml.Add(chartElement);
}
/// <summary>
/// Inserts a default TOC into the current document.
/// Title: Table of contents

Loading…
Cancel
Save