public void MG001(string name) { DirectoryInfo sourceDir = new DirectoryInfo("../../../../TestFiles/"); FileInfo fi = new FileInfo(Path.Combine(sourceDir.FullName, name)); MetricsGetterSettings settings = new MetricsGetterSettings() { IncludeTextInContentControls = false, IncludeXlsxTableCellData = false, RetrieveNamespaceList = true, RetrieveContentTypeList = true, }; var extension = fi.Extension.ToLower(); XElement metrics = null; if (Util.IsWordprocessingML(extension)) { WmlDocument wmlDocument = new WmlDocument(fi.FullName); metrics = MetricsGetter.GetDocxMetrics(wmlDocument, settings); } else if (Util.IsSpreadsheetML(extension)) { SmlDocument smlDocument = new SmlDocument(fi.FullName); metrics = MetricsGetter.GetXlsxMetrics(smlDocument, settings); } else if (Util.IsPresentationML(extension)) { PmlDocument pmlDocument = new PmlDocument(fi.FullName); metrics = MetricsGetter.GetPptxMetrics(pmlDocument, settings); } Assert.NotNull(metrics); }
[InlineData("Styles.docx", true)] // Style Hierarchy public void Word(string fileName, bool includeTextInControls) { var fi = new FileInfo(GetFilePath(fileName)); var settings = new MetricsGetterSettings { IncludeTextInContentControls = includeTextInControls }; var metrics = MetricsGetter.GetMetrics(fi.FullName, settings); Log.WriteLine(metrics.ToString()); }
private static void Main() { var fi = new FileInfo("../../ContentControls.docx"); var settings = new MetricsGetterSettings { IncludeTextInContentControls = false }; Console.WriteLine("============== No text from content controls =============="); Console.WriteLine(fi.FullName); Console.WriteLine(MetricsGetter.GetMetrics(fi.FullName, settings)); Console.WriteLine(); fi = new FileInfo("../../ContentControls.docx"); settings = new MetricsGetterSettings { IncludeTextInContentControls = true }; Console.WriteLine("============== With text from content controls =============="); Console.WriteLine(fi.FullName); Console.WriteLine(MetricsGetter.GetMetrics(fi.FullName, settings)); Console.WriteLine(); fi = new FileInfo("../../TrackedRevisions.docx"); settings = new MetricsGetterSettings { IncludeTextInContentControls = true }; Console.WriteLine("============== Tracked Revisions =============="); Console.WriteLine(fi.FullName); Console.WriteLine(MetricsGetter.GetMetrics(fi.FullName, settings)); Console.WriteLine(); fi = new FileInfo("../../Styles.docx"); settings = new MetricsGetterSettings { IncludeTextInContentControls = false }; Console.WriteLine("============== Style Hierarchy =============="); Console.WriteLine(fi.FullName); Console.WriteLine(MetricsGetter.GetMetrics(fi.FullName, settings)); Console.WriteLine(); fi = new FileInfo("../../Tables.xlsx"); settings = new MetricsGetterSettings { IncludeTextInContentControls = false, IncludeXlsxTableCellData = true }; Console.WriteLine("============== Spreadsheet Tables =============="); Console.WriteLine(fi.FullName); Console.WriteLine(MetricsGetter.GetMetrics(fi.FullName, settings)); Console.WriteLine(); }
public void Excel() { var fi = new FileInfo(GetFilePath("Tables.xlsx")); var settings = new MetricsGetterSettings { IncludeTextInContentControls = false, IncludeXlsxTableCellData = true }; var metrics = MetricsGetter.GetMetrics(fi.FullName, settings); Log.WriteLine(metrics.ToString()); }
public static DocxMetrics GetDocxMetrics(string fileName) { var wmlDoc = new WmlDocument(fileName); var settings = new MetricsGetterSettings { IncludeTextInContentControls = false, IncludeXlsxTableCellData = false }; var metricsXml = MetricsGetter.GetDocxMetrics(wmlDoc, settings); var metrics = new DocxMetrics { FileName = wmlDoc.FileName, StyleHierarchy = GetXmlDocumentForMetrics(metricsXml, H.StyleHierarchy), ContentControls = GetXmlDocumentForMetrics(metricsXml, H.Parts), TextBox = GetIntForMetrics(metricsXml, H.TextBox), ContentControlCount = GetIntForMetrics(metricsXml, H.ContentControl), ComplexField = GetIntForMetrics(metricsXml, H.ComplexField), SimpleField = GetIntForMetrics(metricsXml, H.SimpleField), AltChunk = GetIntForMetrics(metricsXml, H.AltChunk), Table = GetIntForMetrics(metricsXml, H.Table), Hyperlink = GetIntForMetrics(metricsXml, H.Hyperlink), LegacyFrame = GetIntForMetrics(metricsXml, H.LegacyFrame), ActiveX = GetIntForMetrics(metricsXml, H.ActiveX), SubDocument = GetIntForMetrics(metricsXml, H.SubDocument), ReferenceToNullImage = GetIntForMetrics(metricsXml, H.ReferenceToNullImage), ElementCount = GetIntForMetrics(metricsXml, H.ElementCount), AverageParagraphLength = GetIntForMetrics(metricsXml, H.AverageParagraphLength), RunCount = GetIntForMetrics(metricsXml, H.RunCount), ZeroLengthText = GetIntForMetrics(metricsXml, H.ZeroLengthText), MultiFontRun = GetIntForMetrics(metricsXml, H.MultiFontRun), AsciiCharCount = GetIntForMetrics(metricsXml, H.AsciiCharCount), CSCharCount = GetIntForMetrics(metricsXml, H.CSCharCount), EastAsiaCharCount = GetIntForMetrics(metricsXml, H.EastAsiaCharCount), HAnsiCharCount = GetIntForMetrics(metricsXml, H.HAnsiCharCount), AsciiRunCount = GetIntForMetrics(metricsXml, H.AsciiRunCount), CSRunCount = GetIntForMetrics(metricsXml, H.CSRunCount), EastAsiaRunCount = GetIntForMetrics(metricsXml, H.EastAsiaRunCount), HAnsiRunCount = GetIntForMetrics(metricsXml, H.HAnsiRunCount), RevisionTracking = GetBoolForMetrics(metricsXml, H.RevisionTracking), EmbeddedXlsx = GetBoolForMetrics(metricsXml, H.EmbeddedXlsx), InvalidSaveThroughXslt = GetBoolForMetrics(metricsXml, H.InvalidSaveThroughXslt), TrackRevisionsEnabled = GetBoolForMetrics(metricsXml, H.TrackRevisionsEnabled), DocumentProtection = GetBoolForMetrics(metricsXml, H.DocumentProtection), Valid = GetBoolForMetrics(metricsXml, H.Valid), Languages = GetStringForMetrics(metricsXml, H.Languages), NumberingFormatList = GetStringForMetrics(metricsXml, H.NumberingFormatList) }; return(metrics); }
public static DocxMetrics GetDocxMetrics(string fileName) { WmlDocument wmlDoc = new WmlDocument(fileName); MetricsGetterSettings settings = new MetricsGetterSettings(); settings.IncludeTextInContentControls = false; settings.IncludeXlsxTableCellData = false; var metricsXml = MetricsGetter.GetDocxMetrics(wmlDoc, settings); DocxMetrics metrics = new DocxMetrics(); metrics.FileName = wmlDoc.FileName; metrics.StyleHierarchy = GetXmlDocumentForMetrics(metricsXml, H.StyleHierarchy); metrics.ContentControls = GetXmlDocumentForMetrics(metricsXml, H.Parts); metrics.TextBox = GetIntForMetrics(metricsXml, H.TextBox); metrics.ContentControlCount = GetIntForMetrics(metricsXml, H.ContentControl); metrics.ComplexField = GetIntForMetrics(metricsXml, H.ComplexField); metrics.SimpleField = GetIntForMetrics(metricsXml, H.SimpleField); metrics.AltChunk = GetIntForMetrics(metricsXml, H.AltChunk); metrics.Table = GetIntForMetrics(metricsXml, H.Table); metrics.Hyperlink = GetIntForMetrics(metricsXml, H.Hyperlink); metrics.LegacyFrame = GetIntForMetrics(metricsXml, H.LegacyFrame); metrics.ActiveX = GetIntForMetrics(metricsXml, H.ActiveX); metrics.SubDocument = GetIntForMetrics(metricsXml, H.SubDocument); metrics.ReferenceToNullImage = GetIntForMetrics(metricsXml, H.ReferenceToNullImage); metrics.ElementCount = GetIntForMetrics(metricsXml, H.ElementCount); metrics.AverageParagraphLength = GetIntForMetrics(metricsXml, H.AverageParagraphLength); metrics.RunCount = GetIntForMetrics(metricsXml, H.RunCount); metrics.ZeroLengthText = GetIntForMetrics(metricsXml, H.ZeroLengthText); metrics.MultiFontRun = GetIntForMetrics(metricsXml, H.MultiFontRun); metrics.AsciiCharCount = GetIntForMetrics(metricsXml, H.AsciiCharCount); metrics.CSCharCount = GetIntForMetrics(metricsXml, H.CSCharCount); metrics.EastAsiaCharCount = GetIntForMetrics(metricsXml, H.EastAsiaCharCount); metrics.HAnsiCharCount = GetIntForMetrics(metricsXml, H.HAnsiCharCount); metrics.AsciiRunCount = GetIntForMetrics(metricsXml, H.AsciiRunCount); metrics.CSRunCount = GetIntForMetrics(metricsXml, H.CSRunCount); metrics.EastAsiaRunCount = GetIntForMetrics(metricsXml, H.EastAsiaRunCount); metrics.HAnsiRunCount = GetIntForMetrics(metricsXml, H.HAnsiRunCount); metrics.RevisionTracking = GetBoolForMetrics(metricsXml, H.RevisionTracking); metrics.EmbeddedXlsx = GetBoolForMetrics(metricsXml, H.EmbeddedXlsx); metrics.InvalidSaveThroughXslt = GetBoolForMetrics(metricsXml, H.InvalidSaveThroughXslt); metrics.TrackRevisionsEnabled = GetBoolForMetrics(metricsXml, H.TrackRevisionsEnabled); metrics.DocumentProtection = GetBoolForMetrics(metricsXml, H.DocumentProtection); metrics.Valid = GetBoolForMetrics(metricsXml, H.Valid); metrics.Languages = GetStringForMetrics(metricsXml, H.Languages); metrics.NumberingFormatList = GetStringForMetrics(metricsXml, H.NumberingFormatList); return(metrics); }
public static int CalcWidthOfRunInTwips(XElement r) { if (KnownFamilies == null) { KnownFamilies = new HashSet <string>(); FontFamily[] families = FontFamily.Families; foreach (FontFamily fam in families) { KnownFamilies.Add(fam.Name); } } var fontName = (string)r.Attribute(PtOpenXml.pt + "FontName"); if (fontName == null) { fontName = (string)r.Ancestors(W.p).First().Attribute(PtOpenXml.pt + "FontName"); } if (fontName == null) { throw new OpenXmlPowerToolsException("Internal Error, should have FontName attribute"); } if (UnknownFonts.Contains(fontName)) { return(0); } XElement rPr = r.Element(W.rPr); if (rPr == null) { throw new OpenXmlPowerToolsException("Internal Error, should have run properties"); } var languageType = (string)r.Attribute(PtOpenXml.LanguageType); decimal?szn = null; if (languageType == "bidi") { szn = (decimal?)rPr.Elements(W.szCs).Attributes(W.val).FirstOrDefault(); } else { szn = (decimal?)rPr.Elements(W.sz).Attributes(W.val).FirstOrDefault(); } if (szn == null) { szn = 22m; } decimal sz = szn.GetValueOrDefault(); // unknown font families will throw ArgumentException, in which case just return 0 if (!KnownFamilies.Contains(fontName)) { return(0); } // in theory, all unknown fonts are found by the above test, but if not... FontFamily ff; try { ff = new FontFamily(fontName); } catch (ArgumentException) { UnknownFonts.Add(fontName); return(0); } var fs = FontStyle.Regular; bool bold = GetBoolProp(rPr, W.b) || GetBoolProp(rPr, W.bCs); bool italic = GetBoolProp(rPr, W.i) || GetBoolProp(rPr, W.iCs); if (bold && !italic) { fs = FontStyle.Bold; } if (italic && !bold) { fs = FontStyle.Italic; } if (bold && italic) { fs = FontStyle.Bold | FontStyle.Italic; } string runText = r.DescendantsTrimmed(W.txbxContent) .Where(e => e.Name == W.t) .Select(t => (string)t) .StringConcatenate(); decimal tabLength = r.DescendantsTrimmed(W.txbxContent) .Where(e => e.Name == W.tab) .Select(t => (decimal)t.Attribute(PtOpenXml.TabWidth)) .Sum(); if (runText.Length == 0 && tabLength == 0) { return(0); } var multiplier = 1; if (runText.Length <= 2) { multiplier = 100; } else if (runText.Length <= 4) { multiplier = 50; } else if (runText.Length <= 8) { multiplier = 25; } else if (runText.Length <= 16) { multiplier = 12; } else if (runText.Length <= 32) { multiplier = 6; } if (multiplier != 1) { var sb = new StringBuilder(); for (var i = 0; i < multiplier; i++) { sb.Append(runText); } runText = sb.ToString(); } int w = MetricsGetter.GetTextWidth(ff, fs, sz, runText); return((int)(w / 96m * 1440m / multiplier + tabLength * 1440m)); }