openxml html to word,C# Net 使用 openxml 提取word中的文本和图片并转为Html
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相关推荐
- java word文本框_Java 读取Word文本框中的文本、图片、表格
Word可插入文本框,文本框中可嵌入文本.图片.表格等内容.对文档中的已有文本框,也可以读取其中的内容.本文以Java程序代码来展示如何读取文本框,包括读取文本框中的文本.图片以及表格等. [程序环境 ...
- Java 读取Word表格中的文本和图片
本文通过Java程序来展示如何读取Word表格,包括读取表格中的文本和图片.下面是具体实现的步骤和方法. 1. 程序环境准备 代码编译工具:IntelliJ IDEA Jdk版本:1.8.0 测试文档 ...
- Java 读取Word文本框中的文本、图片、表格
Word可插入文本框,文本框中可嵌入文本.图片.表格等内容.对文档中的已有文本框,也可以读取其中的内容.本文以Java程序代码来展示如何读取文本框,包括读取文本框中的文本.图片以及表格等. [程序环境 ...
- 【Python】导出docx格式Word文档中的文本、图片和附件等
[Python]导出docx格式Word文档中的文本.图片和附件等 零.需求 为批量批改学生在机房提交的实验报告,我需要对所有的实验文档内容进行处理.需要批量提取Word文档中的图片和附件以便进一步检 ...
- Java 读取Word批注中的文本和图片
本文将介绍读取Word批注的方法,包括读取Word批注中的文本及图片.下面将通过Java代码来演示如何读取批注. **工具使用:**Word类库(Free Spire.Doc for Java 免费版 ...
- word(2010)宏使用-批量提取word数据
word 2010 宏的使用 Word中对宏的定义 Word宏的优缺点 Word宏运用实例---批量提取word数据 结语 Word中对宏的定义 Microsoft Word中对宏定义为:" ...
- java提取word中的文字_Java 提取Word中的文本和图片
本文将介绍通过Java来提取或读取Word文档中文本和图片的方法.这里提取文本和图片包括同时提取文档正文当中以及页眉.页脚中的的文本和图片. 使用工具:Free Spire.Doc for Java ...
- Java Word中的文本、图片替换功能
Word中的替换功能以查找指定文本然后替换为新的文本,可单个替换或全部替换.以下将要介绍的内容,除常见的以文本替换文本外,还将介绍使用不同对象进行替换的方法,具体可包括: 1. 指定字符串内容替换文本 ...
- java word替换图片_Java Word中的文本、图片替换功能
Word中的替换功能以查找指定文本然后替换为新的文本,可单个替换或全部替换.以下将要介绍的内容,除常见的以文本替换文本外,还将介绍使用不同对象进行替换的方法,具体可包括: 1. 指定字符串内容替换文本 ...
最新文章
- 习题3-3 数数字(Digit Counting , ACM/ICPC Danang 2007, UVa1225)
- 高成本低收益的市场现状下 安防企业该怎么办?
- 拆分一个字符串并把每个字符单独输出
- 90%的程序员都没有完全回答对 Cookie 和 Session 的区别?
- js get/set Cookie
- 《Solution-Centric Organization》解决方案导向型组织 节选 III
- Tips/Tricks#3:利用JavaScript选择GridView行
- 【深入理解JS核心技术】3. 调用、应用和绑定有什么区别
- 速卖通AE平台+聚石塔+奇门 完整教程V2
- 【并发编程神器】,Worker Thread模式
- web版收银系统,支持支付宝,微信扫描枪支付,数字输入
- Autosar Dcm模块之Vector Configurator Pro配置(DSP子模块)
- CentOS.7卸载与安装Nvidia Driver
- 简单题 6 清点代码库 (25 分)
- 计算机里面不显示光驱位硬盘,Windows10系统识别不了光驱位机械硬盘怎么办?解决方法...
- 以太坊(一)——概述
- 掌控习惯读后感-詹姆斯·克利尔(James Clear)
- 干货!MySQL常见的面试题+索引原理分析!
- CHRE: /vendor/bin/chre
- 让你的PPT图片处理更具创意