C# Net Core openxml 提取 提出 取 word  文本  图片 Html Text Drawing

C# Net Core openxml 提取 提出 取 word  文本  图片 Html Text Drawing

注:只支持内嵌,不支持公式

------------------------------------------------

---------------文章最后为效果------------

------------------------------------------------

加入包:OpenXml

创建文件:Read.cs

复制下面全部代码到文件 Read.cs

using DocumentFormat.OpenXml;

using DocumentFormat.OpenXml.Packaging;

using DocumentFormat.OpenXml.Wordprocessing;

using System;

using System.Collections.Generic;

using System.IO;

using System.Text;

using System.Xml;

using System.Xml.Xsl;

namespace YCBX.Office.WordXml

{

public class WordRead

{

public static ListReadToHtml(string wordPathStr)

{

return ReadToHtml(new FileStream(wordPathStr, FileMode.Open));

}

public static ListReadToHtml(Stream wordStream)

{

using (WordprocessingDocument doc = WordprocessingDocument.Open(wordStream, false))

{

//XmlWriterSettings settings = new XmlWriterSettings() { OmitXmlDeclaration = true, ConformanceLevel = ConformanceLevel.Auto,DoNotEscapeUriAttributes=true};

ListparagraphHtmls = new List();

MainDocumentPart mainPart = doc.MainDocumentPart;

Body body = doc.MainDocumentPart.Document.Body;

//段落

foreach (var paragraph in body.Elements())

{

StringBuilder paragraphHtml = new StringBuilder();

//块

foreach (var run in paragraph.ChildElements)

{

if (run is Run)

{

foreach (OpenXmlElement openXmlElement in run.Elements())

{

//软回车

if (openXmlElement is Break br)

{

paragraphHtmls.Add(paragraphHtml.ToString());

paragraphHtml = new StringBuilder();

}

//文字块

else if (openXmlElement is Text text)

{

paragraphHtml.Append(text.Text);

}

//图像块

else if (openXmlElement is Drawing drawing)

{

//得到图像的内嵌ID(外嵌没做处理)

var inline = drawing.Inline;

var extent = inline.Extent;

var pic = inline.Graphic.GraphicData.GetFirstChild();

var embed = pic.BlipFill.Blip.Embed.Value;

//得到图像流

var part = mainPart.GetPartById(embed);

var stream = part.GetStream();

//流转2进制

byte[] bytes = new byte[stream.Length];

stream.Read(bytes, 0, bytes.Length);

//2进制转base64

string imgHtml = $"";

paragraphHtml.Append(imgHtml);

}

}

}

//else if(run is DocumentFormat.OpenXml.Math.OfficeMath math)

//{

//    var x = new XmlDocument();

//    x.LoadXml(math.OuterXml);

//    using var ms = ConvertToMatchMl(x, settings);

//    paragraphHtml.Append(ConvertToLatex(settings, ms));

//}

}

paragraphHtmls.Add(paragraphHtml.ToString());

}

return paragraphHtmls;

}

}

// 合并文档

/public static void Combine(string finalFile, Listfiles)

{

if (files.Count

{

return;

}

File.Copy(files[0], finalFile, true);

using (WordprocessingDocument doc = WordprocessingDocument.Open(finalFile, true))

{

Body b = doc.MainDocumentPart.Document.Body;

for (int i = 1; i

{

using (WordprocessingDocument doc1 = WordprocessingDocument.Open(files[i], true))

{

foreach (var inst in doc1.MainDocumentPart.Document.Body.Elements())

{

b.Append(inst.CloneNode(true));

}

}

}

}

}

private string ConvertToLatex(XmlWriterSettings settings, Stream ms)

{

var latexTransform = new XslCompiledTransform();

latexTransform.Load(Path.Combine(AppContext.BaseDirectory, "xsltml", "mmltex.xsl"), new XsltSettings(true,true),new XmlUrlResolver() );

using var la = new MemoryStream();

latexTransform.Transform(new XmlTextReader(ms), XmlWriter.Create(la, settings));

la.Seek(0, SeekOrigin.Begin);

StreamReader sr = new StreamReader(la, Encoding.UTF8);

return sr.ReadToEnd();

}

private Stream ConvertToMatchMl(XmlDocument xmlDocument, XmlWriterSettings settings)

{

var ms = new MemoryStream();

var xslTransform = new XslCompiledTransform();

xslTransform.Load(Path.Combine(AppContext.BaseDirectory, "xsltml", "OMML2MML.XSL"));

xslTransform.Transform(xmlDocument, XmlWriter.Create(ms, settings));

ms.Seek(0, SeekOrigin.Begin);

return ms;

}

}

}

创建文件:ImageExtent.cs

复制下面全部代码到文件 ImageExtent.csusing System;

using System.Collections.Generic;

using System.Text;

namespace YCBX.Office.WordXml

{

// 图像长度单位转换

///public class ImageExtent

{

private const decimal CM_TO_PX = 96M;

private const decimal INCH_TO_CM = 2.54M;

// 厘米到EMU(English Metric Unit)

///private const decimal CM_TO_EMU = 360000M;

// EMU(English Metric Unit) 到像素(px)

//public static decimal EMU_TO_PX(decimal EMU)

{

return EMU / CM_TO_EMU / INCH_TO_CM * CM_TO_PX;

}

}

}

调用方法:var sss = new Read().ParagraphHtmlAll("1.docx");

word文件中为:

创建一个test.html,将代码放在中,查看效果为:

完成

openxml html to word,C# Net 使用 openxml 提取word中的文本和图片并转为Html相关推荐

  1. java word文本框_Java 读取Word文本框中的文本、图片、表格

    Word可插入文本框,文本框中可嵌入文本.图片.表格等内容.对文档中的已有文本框,也可以读取其中的内容.本文以Java程序代码来展示如何读取文本框,包括读取文本框中的文本.图片以及表格等. [程序环境 ...

  2. Java 读取Word表格中的文本和图片

    本文通过Java程序来展示如何读取Word表格,包括读取表格中的文本和图片.下面是具体实现的步骤和方法. 1. 程序环境准备 代码编译工具:IntelliJ IDEA Jdk版本:1.8.0 测试文档 ...

  3. Java 读取Word文本框中的文本、图片、表格

    Word可插入文本框,文本框中可嵌入文本.图片.表格等内容.对文档中的已有文本框,也可以读取其中的内容.本文以Java程序代码来展示如何读取文本框,包括读取文本框中的文本.图片以及表格等. [程序环境 ...

  4. 【Python】导出docx格式Word文档中的文本、图片和附件等

    [Python]导出docx格式Word文档中的文本.图片和附件等 零.需求 为批量批改学生在机房提交的实验报告,我需要对所有的实验文档内容进行处理.需要批量提取Word文档中的图片和附件以便进一步检 ...

  5. Java 读取Word批注中的文本和图片

    本文将介绍读取Word批注的方法,包括读取Word批注中的文本及图片.下面将通过Java代码来演示如何读取批注. **工具使用:**Word类库(Free Spire.Doc for Java 免费版 ...

  6. word(2010)宏使用-批量提取word数据

    word 2010 宏的使用 Word中对宏的定义 Word宏的优缺点 Word宏运用实例---批量提取word数据 结语 Word中对宏的定义 Microsoft Word中对宏定义为:" ...

  7. java提取word中的文字_Java 提取Word中的文本和图片

    本文将介绍通过Java来提取或读取Word文档中文本和图片的方法.这里提取文本和图片包括同时提取文档正文当中以及页眉.页脚中的的文本和图片. 使用工具:Free Spire.Doc for Java ...

  8. Java Word中的文本、图片替换功能

    Word中的替换功能以查找指定文本然后替换为新的文本,可单个替换或全部替换.以下将要介绍的内容,除常见的以文本替换文本外,还将介绍使用不同对象进行替换的方法,具体可包括: 1. 指定字符串内容替换文本 ...

  9. java word替换图片_Java Word中的文本、图片替换功能

    Word中的替换功能以查找指定文本然后替换为新的文本,可单个替换或全部替换.以下将要介绍的内容,除常见的以文本替换文本外,还将介绍使用不同对象进行替换的方法,具体可包括: 1. 指定字符串内容替换文本 ...

最新文章

  1. 习题3-3 数数字(Digit Counting , ACM/ICPC Danang 2007, UVa1225)
  2. 高成本低收益的市场现状下 安防企业该怎么办?
  3. 拆分一个字符串并把每个字符单独输出
  4. 90%的程序员都没有完全回答对 Cookie 和 Session 的区别?
  5. js get/set Cookie
  6. 《Solution-Centric Organization》解决方案导向型组织 节选 III
  7. Tips/Tricks#3:利用JavaScript选择GridView行
  8. 【深入理解JS核心技术】3. 调用、应用和绑定有什么区别
  9. 速卖通AE平台+聚石塔+奇门 完整教程V2
  10. 【并发编程神器】,Worker Thread模式
  11. web版收银系统,支持支付宝,微信扫描枪支付,数字输入
  12. Autosar Dcm模块之Vector Configurator Pro配置(DSP子模块)
  13. CentOS.7卸载与安装Nvidia Driver
  14. 简单题 6 清点代码库 (25 分)
  15. 计算机里面不显示光驱位硬盘,Windows10系统识别不了光驱位机械硬盘怎么办?解决方法...
  16. 以太坊(一)——概述
  17. 掌控习惯读后感-詹姆斯·克利尔(James Clear)
  18. 干货!MySQL常见的面试题+索引原理分析!
  19. CHRE: /vendor/bin/chre
  20. 让你的PPT图片处理更具创意

热门文章

  1. 【知识星球】云、IT、数据、计算存储相关售前资料
  2. 一文读懂云上DevOps能力体系!
  3. 游戏服务器端编程书籍
  4. 基于VC++的包过滤防火墙系统设计与实现
  5. 8086汇编单字符输出实现四位压缩bcd码相减
  6. 通达信公式(股票期货专用)
  7. recvfrom 10054之谜
  8. 【17】AMOLED屏幕子像素定位
  9. ​大公司的Java笔试题汇总(含答案)​
  10. mac web开发_如何设置Mac进行Web开发