CrazyIter_Bin 3 роки тому
батько
коміт
2b039998fc

Різницю між файлами не показано, бо вона завелика
+ 1 - 0
HTEXLib/COMM/Globals.cs


+ 10 - 3
HTEXLib/DOCX/OpenXmlTool/WmlToHtmlConverter.cs

@@ -627,7 +627,9 @@ namespace OpenXmlPowerTools
                var emlt= ProcessWps(wordDoc, elm, imageHandler);
                 stringBuilder.Append(emlt);
             }
-            XElement elmt = XElement.Parse(stringBuilder.ToString());
+            string svg = stringBuilder.ToString();
+            svg = $"<div>{svg}</div>";
+            XElement elmt = XElement.Parse(svg);
             return elmt;
         }
 
@@ -1102,15 +1104,16 @@ namespace OpenXmlPowerTools
                 }
 
             }
-            return DrawingShape(shape);
+            return DrawingShape(shape ,pars);
         }
 
-        public static string DrawingShape(HTEXLib.Shape shape) {
+        public static string DrawingShape(HTEXLib.Shape shape,List<string> pars) {
             
             StringBuilder builder = new StringBuilder();
             if (shape.svg != null)
             {
                 builder.Append($"<svg xmlns='http://www.w3.org/2000/svg' style='width:{shape.style.position.cx}px;height:{shape.style.position.cy}px;rotate({shape.style.position.rot}deg); overflow: visible;'>");
+               
                 string bdc = shape.style.border != null && shape.style.border.color != null && shape.style.border.color.solidFill != null ? shape.style.border.color.solidFill : "none";
                 string bds = shape.style.border != null && shape.style.border.stroke != null  ? shape.style.border.stroke : "0";
                 double? bdw = shape.style.border != null && shape.style.border.outline != null && shape.style.border.outline.width != null ? shape.style.border.outline.width : 0;
@@ -1131,6 +1134,10 @@ namespace OpenXmlPowerTools
                     edm = $" marker-end='url(#marker{ shape.uid})'";
                 }
                 builder.Append($"<path  xmlns='http://www.w3.org/2000/svg' d='{shape.svg.d}' fill='{bgc}' stroke='{bdc}' stroke-width='{bdw}' stroke-dasharray='{bds}' {stm} {edm} />");
+                if (pars.IsNotEmpty())
+                {
+                    builder.Append($"<text  x='{shape.style.position.cx / 2}' y='{shape.style.position.cy}' fill='#000000'>{string.Join("", pars)}</text>");
+                }
                 builder.Append("</svg>");
             }
             return builder.ToString() ; 

+ 5 - 5
HTEXLib/HTEXLib.csproj

@@ -1,12 +1,12 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
-    <Description>MathML转Latex</Description>
-    <PackageReleaseNotes>MathML转Latex</PackageReleaseNotes>
+    <Description>修改解析</Description>
+    <PackageReleaseNotes></PackageReleaseNotes>
     <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
-    <Version>2.5.3</Version>
-    <AssemblyVersion>2.5.3.3</AssemblyVersion>
-    <FileVersion>2.5.3.3</FileVersion>
+    <Version>5.2107.133</Version>
+    <AssemblyVersion>5.2107.133.3</AssemblyVersion>
+    <FileVersion>5.2107.133.3</FileVersion>
   </PropertyGroup>
   <ItemGroup>
     <PackageReference Include="DocumentFormat.OpenXml" Version="2.11.3" />

+ 9 - 2
HTEXLib/PPTX/Helpers/ShapeHelpers/PPTXHelper.cs

@@ -178,8 +178,15 @@ namespace HTEXLib.Helpers.ShapeHelpers
             {
                 var pathlist = shapeTypeCustom.GetFirstChild<PathList>();
                 var path = pathlist.GetFirstChild<DocumentFormat.OpenXml.Drawing.Path>();
-                var Width = shape.style.position.cx/path.Width.Value / 96.0 * 914400 ;
-                var Height = shape.style.position.cy/ path.Height.Value / 96.0 * 914400;
+                var Width = 1.0;
+                if (path.Width != null) {
+                    Width= shape.style.position.cx / path.Width.Value / 96.0 * 914400;
+                }
+                var Height = 1.0;
+                if (path.Height != null) {
+                     Height = shape.style.position.cy / path.Height.Value / 96.0 * 914400;
+                }
+               
 
                 var pathChildren = path.ChildElements;
                 if (pathChildren != null)

+ 1 - 1
HTEXLib/PPTX/Models/Item.cs

@@ -19,7 +19,7 @@ namespace HTEXLib
         /// 元素类型
         /// </summary>
         public string type { get; set; }
-       
+        public bool zoom { get; set; }
         //  public string Xml { get; set; }
         /// <summary>
         /// 层级

+ 5 - 0
HTEXLib/Translator/DOXC2HTMLTranslator.cs

@@ -1,6 +1,7 @@
 using DocumentFormat.OpenXml.Packaging;
 using HTEXLib.COMM.Helpers;
 using HTEXLib.Helpers.ShapeHelpers;
+using HTEXLib.Models.Inner;
 using OpenXmlPowerTools;
 using System;
 using System.Collections.Generic;
@@ -158,6 +159,10 @@ namespace HTEXLib.Translator
                     //引入MathJax插件
                     htmlString = htmlString + "<script type=\"text/javascript\" src=\"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML\"></script>";
                     //File.WriteAllText(folder + "/" + "index.html", htmlString);
+                    
+                    foreach (var kp in Globals.replaceKP) {
+                        htmlString = htmlString.Replace(kp.Key, kp.Value);
+                    }
                     return htmlString;
                 };
             }

+ 41 - 4
HTEXLib/Translator/HTML2ITEMV3Translator.cs

@@ -15,6 +15,14 @@ namespace HTEXLib.Translator
 {
     public class HTML2ITEMV3Translator
     {
+        /// <summary>
+        /// 全角
+        /// </summary>
+        string[] aza = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
+        /// <summary>
+        /// 半角
+        /// </summary>
+        string[] azh = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
         public const string Answer = "Answer";
         public const string Analysis = "Analysis";
         public const string Ended = "Ended";
@@ -137,6 +145,9 @@ namespace HTEXLib.Translator
             html = Regex.Replace(html, classpattern, "");
             string pattern = "<span([^>]{0,})>";
             html = Regex.Replace(html, pattern, "");
+            string apattern = "<a([^>]{0,})></a>";
+            html = Regex.Replace(html, apattern, "");
+            //<a id="OP2_89937270DA164EFF8650A3FB645B678A" ></a>B<a id="OPTG2_89937270DA164EFF8650A3FB645B678A" ></a>
             html = html.Replace(" close=\"\" separators=\" | \">", "");
             html = html.Replace("\t", " ").Replace("<span>", "").Replace("</span>", "").Replace("dir=\"ltr\"", "");
             HtmlDocument doc = new HtmlDocument();
@@ -205,6 +216,7 @@ namespace HTEXLib.Translator
                 {
                     emferror.AddRange(eferror);
                 }
+                
                 int stIndex = conskey.Key[0]+1;
                 if (consInner.IsNotEmpty())
                 {
@@ -231,6 +243,19 @@ namespace HTEXLib.Translator
             tagValue = Regex.Replace(tagValue, @"\s", "");
             return tagValue;
         }
+
+        private string BlankPointTag(string tagHtml)
+        {
+            //去掉标签中的Html
+            HtmlDocument doc = new HtmlDocument();
+            doc.LoadHtml(tagHtml);
+            var tagValue = doc.DocumentNode.InnerText.Replace("{", "").Replace("}", "")
+                        .Replace("\n", " ").Replace("\t", " ").Replace("\r", " ")
+                        .Replace("&nbsp;", " ").Replace("&emsp;", " ").Replace("&emsp;", " ");
+            // tagValue = Regex.Replace(tagValue, @"\d", "");
+            tagValue = Regex.Replace(tagValue, @"\s", " ");
+            return tagValue;
+        }
         public (List<DOCX.Models.ItemInfo> ItemInfo, List<string> error) ConvertTest(string[] array, List<KeyValuePair<int[], List<ItemInfo>>> composeList) {
             List<DOCX.Models.ItemInfo> tests = new List<DOCX.Models.ItemInfo>();
             List<string> error = new List<string>();
@@ -242,6 +267,10 @@ namespace HTEXLib.Translator
             string openTagVal = "";
             bool openFlag = false;
             string openTagLang = "";
+            if (array[0].Contains("EmfBase64ConvertError"))
+            {
+                error.Add(array[0]);
+            }
             for (int index = 1; index < array.Length; index++) {
                 if (index % 2 == 1)
                 {
@@ -408,7 +437,8 @@ namespace HTEXLib.Translator
                 else {
                     //偶数序列为内容
                     content.Append(array[index]);
-                    if (array[index].Contains("EmfBase64ConvertError")) {
+                    if (array[index].Contains("EmfBase64ConvertError")) 
+                    {
                         error.Add(array[index]);
                     }
                 }
@@ -421,6 +451,10 @@ namespace HTEXLib.Translator
             return (tests,error);
         }
         public (List<CodeValue> options,string question) OptionProcess(string question) {
+            for (int idx = 0; idx < 26; idx++)
+            {
+                question = question.Replace(aza[idx], azh[idx]);
+            }
             List<CodeValue> options = new List<CodeValue>();
             string optsRgex = optionsKeys[0] + "\\s*(\\.|\\.|\\、|\\:|\\:)([\\s\\S]*?).*"; ;
             string optsHtml = Regex.Match(question, optsRgex).Value;
@@ -448,13 +482,12 @@ namespace HTEXLib.Translator
                 return (options, question.Replace(optsHtml, ""));
             }
             else {
-                return (null, question);
+                return (new List<CodeValue>(), question) ;
             }
         }
 
         public void  DoOpenTag (string openTag,string openTagVal, bool openFlag, string  openTagLang , StringBuilder  content , DOCX.Models.ItemInfo test) {
             if (test != null) {
-               
                 switch (openTag) {
                     case Summary:
                         if (test.type.Equals("single") || test.type.Equals("multiple")|| test.type.Equals("judge")||test.type.Equals("sortmultiple"))
@@ -472,6 +505,10 @@ namespace HTEXLib.Translator
                         {
                             HashSet<string> ans = new HashSet<string>(); 
                             var anstr = BlankTag(content.ToString());
+                            for (int idx = 0; idx < 26; idx++)
+                            {
+                                anstr = anstr.Replace(aza[idx], azh[idx]);
+                            }
                             if (!test.type.Equals("judge"))
                             {
                                 anstr.Select(s => s.ToString()).ToList().ForEach(x =>
@@ -518,7 +555,7 @@ namespace HTEXLib.Translator
                         break;
                     case Ended: break;
                     case Point:
-                        string Points =BlankTag(content.ToString());
+                        string Points = BlankPointTag(content.ToString());
                         if (!string.IsNullOrWhiteSpace(Points))
                         {
                             string[] ps = Regex.Split(Points, "\\.|\\.|\\、|\\:|\\:|\\,|\\,|\\;|\\;");

+ 5 - 1
HTEXTest/Program.cs

@@ -279,7 +279,11 @@ namespace HTEXTest
         }
         static void Main(string[] args)
         {
-
+            long a = 1123; long b = 500000552;
+            var c = a / b;
+            string aza = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+            string azh = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+            string aaa= aza.Replace("A", "A");
             long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
             Console.WriteLine(now);
             List<Stu> stus = new List<Stu>();

+ 13 - 1
HTEXWeb/Controllers/HtexController.cs

@@ -58,8 +58,20 @@ namespace HTEXWeb.Controllers
         /// </summary>
         /// <param name="request"></param>
         /// <returns></returns>
+        [HttpPost("parse-word")]
+        public IActionResult ParseWord([FromForm] IFormFile file)
+        {
+            var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
+            (List<HTEXLib.DOCX.Models.ItemInfo> tests, List<string> error) = _HTML2ITEMV3Translator.Translate(doc);
+            return Ok(new { tests, error });
+        }
+        /// <summary>
+        /// htmlString AnalyzeHtml
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
         [HttpPost("parse-html")]
-        public IActionResult AnalyzeHtml(JsonElement request)
+        public IActionResult ParseHtml(JsonElement request)
         {
             if (!request.TryGetProperty("htmlString", out JsonElement htmlString)) { return BadRequest(); }
             (List<HTEXLib.DOCX.Models.ItemInfo> tests, List<string> error) = _HTML2ITEMV3Translator.Translate(htmlString.GetString());

+ 14 - 0
TEAMModelHTEX.sln

@@ -17,6 +17,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HTEXScan", "HTEXScan\HTEXSc
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HTEXMark", "HTEXMark\HTEXMark.csproj", "{5F3B59A5-3515-473B-A513-2C51E2A4CCFB}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WordToHtml", "WordToHtml\WordToHtml.csproj", "{D09A711F-119D-4D53-AE86-E5515BB46FD8}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -111,6 +113,18 @@ Global
 		{5F3B59A5-3515-473B-A513-2C51E2A4CCFB}.Release|iPhone.Build.0 = Release|Any CPU
 		{5F3B59A5-3515-473B-A513-2C51E2A4CCFB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{5F3B59A5-3515-473B-A513-2C51E2A4CCFB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{D09A711F-119D-4D53-AE86-E5515BB46FD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D09A711F-119D-4D53-AE86-E5515BB46FD8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D09A711F-119D-4D53-AE86-E5515BB46FD8}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{D09A711F-119D-4D53-AE86-E5515BB46FD8}.Debug|iPhone.Build.0 = Debug|Any CPU
+		{D09A711F-119D-4D53-AE86-E5515BB46FD8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{D09A711F-119D-4D53-AE86-E5515BB46FD8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{D09A711F-119D-4D53-AE86-E5515BB46FD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D09A711F-119D-4D53-AE86-E5515BB46FD8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D09A711F-119D-4D53-AE86-E5515BB46FD8}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{D09A711F-119D-4D53-AE86-E5515BB46FD8}.Release|iPhone.Build.0 = Release|Any CPU
+		{D09A711F-119D-4D53-AE86-E5515BB46FD8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{D09A711F-119D-4D53-AE86-E5515BB46FD8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 6 - 0
WordToHtml/App.config

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+    </startup>
+</configuration>

+ 75 - 0
WordToHtml/Program.cs

@@ -0,0 +1,75 @@
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Office.Interop.Word;
+using System.Runtime.InteropServices;
+
+namespace WordToHtml
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+
+           var result = "C:\\Users\\CrazyIter\\Desktop\\导入异常试卷\\IES5-109指考最前線-化學科.docx";
+            //var result = "C:\\Users\\CrazyIter\\Desktop\\IES5-109指考最前線-化學科.docx";
+            //Word 转 Html
+            //前提:请先引用 Microsoft.Office.Interop.Word
+            ApplicationClass w_app = new ApplicationClass();
+            Type wordType = w_app.GetType();
+            Documents w_docs = w_app.Documents;
+
+            Type docsType = w_docs.GetType();
+            object p_file_nm = result;     //请在d分区下先新建好这个文件
+            object saveFileName = @"C:\Users\CrazyIter\Desktop\导入异常试卷\1111111\abcd.html";
+
+            Document w_doc = (Microsoft.Office.Interop.Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, w_docs, new Object[] { p_file_nm, true, true }); new UnknownWrapper(null);
+            Type docType = w_doc.GetType();
+
+            docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, w_doc, new object[] { saveFileName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatFilteredHTML  });
+            wordType.InvokeMember("Quit",
+                System.Reflection.BindingFlags.InvokeMethod,
+                null,
+                w_app,
+                null
+               );
+        }
+        /// <summary>
+        /// word转成html
+        /// </summary>
+        /// <param name="wordFileName"></param>
+        private string WordToHtml(object wordFileName)
+        {
+            //在此处放置用户代码以初始化页面
+            Microsoft.Office.Interop.Word.ApplicationClass word = new Microsoft.Office.Interop.Word.ApplicationClass();
+            Type wordType = word.GetType();
+            Documents docs = word.Documents;
+
+            //打开文件
+            Type docsType = docs.GetType();
+            Document doc = (Document)docsType.InvokeMember("Open",
+            System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { wordFileName, true, true });
+
+            //转换格式,另存为
+            Type docType = doc.GetType();
+
+            string wordSaveFileName = wordFileName.ToString();
+            string strSaveFileName = wordSaveFileName.Substring(0, wordSaveFileName.Length - 3) ;
+            object saveFileName = (object)strSaveFileName;
+
+            docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod,
+null, doc, new object[] { saveFileName, WdSaveFormat.wdFormatFilteredHTML });
+
+            docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod,
+null, doc, null);
+
+            //退出 Word
+            wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod,
+null, word, null);
+
+            return saveFileName.ToString();
+        }
+    }
+}

+ 36 - 0
WordToHtml/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("WordToHtml")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("WordToHtml")]
+[assembly: AssemblyCopyright("Copyright ©  2021")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("d09a711f-119d-4d53-ae86-e5515bb46fd8")]
+
+// 程序集的版本信息由下列四个值组成: 
+//
+//      主版本
+//      次版本
+//      生成号
+//      修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 58 - 0
WordToHtml/WordToHtml.csproj

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{D09A711F-119D-4D53-AE86-E5515BB46FD8}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <RootNamespace>WordToHtml</RootNamespace>
+    <AssemblyName>WordToHtml</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.Office.Interop.Word.15.0.4797.1003\lib\net20\Microsoft.Office.Interop.Word.dll</HintPath>
+      <EmbedInteropTypes>False</EmbedInteropTypes>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 5 - 0
WordToHtml/packages.config

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Mammoth" version="1.4.0.0" targetFramework="net472" />
+  <package id="Microsoft.Office.Interop.Word" version="15.0.4797.1003" targetFramework="net472" />
+</packages>