使用OPENXMLは、テキストと画像内の単語を抽出し、HTMLに変換します

使用して、テキストと画像で抽出された単語を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>を、効果を確認してください。

 

 

完成

 

おすすめ

転載: www.cnblogs.com/ping9719/p/12462478.html