使用して、テキストと画像で抽出された単語をOPENXML
使用OPENXMLは、テキストと図中の単語を抽出しました
使用OpenXMLのHTMLにテキストと画像内の単語
使用OpenXMLのHTMLにテキストと画像内の単語
注:唯一の支持体には、インライン、式をサポートしていません。
------------------------------------------------
最後に、効果として------------ ---------------
------------------------------------------------
パッケージに参加:のOpenXml
Read.cs:ファイルを作成します。
ファイル全体のRead.csに次のコードをコピー
DocumentFormat.OpenXmlを使用しました。 DocumentFormat.OpenXml.Packagingを使用しました。 DocumentFormat.OpenXml.Wordprocessingを使用しました。 システムを使用しました。 System.Collections.Genericを使用しました。 System.IOを使用しました。 System.Textのを使用しました。 System.Xmlのを使用して、 System.Xml.Xslを使用しました。 名前空間YCBX.Office.WordXml { publicクラス読む { 公共の一覧<文字列> ParagraphHtmlAll(文字列wordPathStr) { リターンParagraphHtmlAll(新しいFileStreamを(wordPathStr、FileMode.Open)); } 公共の一覧<文字列> ParagraphHtmlAll(ストリームwordStream) { 使用(WordprocessingDocumentドキュメント= WordprocessingDocument.Open(wordStream、偽)) { // XmlWriterSettings設定=新しいXmlWriterSettings(){OmitXmlDeclaration = TRUE、ConformanceLevel = ConformanceLevel.Auto、DoNotEscapeUriAttributes = TRUE;} 一覧<文字列> paragraphHtmls =新しいリスト<文字列>(); MainDocumentPart mainPart = doc.MainDocumentPart。 ボディ本体= doc.MainDocumentPart.Document.Body。 //段落 のforeach(VAR段落body.Elementsにおける<パラグラフ>()) { StringBuilderのparagraphHtml =新規のStringBuilder(); //块 foreachの(paragraph.ChildElementsでVARラン) { (実行が実行された)場合 、{ foreachの(OpenXmlElement openXmlElement run.Elements中()) { //文字块 (openXmlElementがテキストである)場合 、{ テキストテキスト= openXmlElementテキストとして; paragraphHtml.Append(文章を書き)。 } //图像块 他(openXmlElementが描画されている)であれば { AS = openXmlElement描画描画描画; //(ないプロセスを行う嵌合)埋め込み画像IDを取得 VARインライン= drawing.Inline; VAR = inline.Extentエクステント; VAR inline.Graphic.GraphicData.GetFirstChild PIC = <DocumentFormat.OpenXml .Drawing.Pictures.Picture>(); VAR = pic.BlipFill.Blip.Embed.Valueを埋め込む; //映像ストリーム取得 //転送バイナリ バイト[]バイト=新しいバイト【のStream.length]。 するvar一部= mainPart.GetPartById(埋め込み)を、 VARストリーム= part.GetStream()。 //他の実行がDocumentFormatである(場合。 stream.Read(バイト0、bytes.Length)。 // 2进制转BASE64 ストリングimgHtml = $ "<IMGスタイル="幅:{ImageExtent.EMU_TO_PX((10進数)extent.Cx.Value).ToString( "0")} PX;高さ:{ImageExtent.EMU_TO_PX ((10進数)extent.Cy.Value).ToString} PX 'SRC ='データ( "0"):{part.ContentType}; BASE64、」+ Convert.ToBase64String(バイト)+ "」/>"。 paragraphHtml.Append(imgHtml)。 } } } // VAR X =新規のXmlDocument()。 // バツ。 // { // VARのMSを用い= ConvertToMatchMl(X、設定)。 // paragraphHtml.Append(ConvertToLatex(設定、MS)); //} } paragraphHtmls.Add(paragraphHtml.ToString())。 } 戻りparagraphHtmls。 } } プライベートストリングConvertToLatex(XmlWriterSettings設定、ストリームMS) { VAR latexTransform =新しいXslCompiledTransformでは()。 latexTransform.Load(Path.Combine(AppContext.BaseDirectory、 "xsltml"、 "mmltex.xsl"))、新XsltSettings(真真、新しいXmlUrlResolver()); VARラ=新しいのMemoryStream()を使用しました。 VAR XSLTRANSFORM =新しいXslCompiledTransformでは(); latexTransform.Transform(新しいのXmlTextReader(MS)、XmlWriter.Create(ラ、設定)); la.Seek(0、SeekOrigin.Begin)。 StreamReaderをSR =新しいStreamReaderを(ラ、Encoding.UTF8)。 リターンsr.ReadToEnd(); } プライベートストリームConvertToMatchMl(常にXmlDocument XMLDOCUMENT、XmlWriterSettings設定) { VARのMS =新規のMemoryStream()。 xslTransform.Load(Path.Combine(AppContext.BaseDirectory、 "xsltml"、 "OMML2MML.XSL")); xslTransform.Transform(常にXmlDocument、XmlWriter.Create(MS、設定))。 ms.Seek(0、SeekOrigin.Begin)。 ミリ秒を返します。 } } }
ImageExtent.cs:ファイルを作成します。
ファイル全体ImageExtent.csに次のコードをコピー
システムを使用しました。 System.Collections.Genericを使用しました。 System.Textのを使用しました。 名前空間YCBX.Office.WordXml { /// <要約> ///图像长度单位转换 /// </要約> パブリッククラスImageExtent { 民間のconst小数点CM_TO_PX = 96M; 民間のconst小数INCH_TO_CM = 2.54M; /// <要約> ///厘米到EMU(英語メートル単位) /// </要約> 民間のconst小数点CM_TO_EMU = 360000M; /// <要約> /// EMU(英語メートル単位)到像素(PX) /// </要約> ///ます。<param name = "EMU"> </ param>の パブリック静的小数EMU_TO_PX(小数EMU) { リターンEMU / CM_TO_EMU / INCH_TO_CM * CM_TO_PX。 } } }
メソッドを呼び出します。
VAR SSS =新しい読む()ParagraphHtmlAll( "1.docx")。
test.htmlという、<身体>のコードを作成</ body>を、効果を確認してください。
完成