web-dev-qa-db-ja.com

WordをHTMLに変換してから、WebページにHTMLをレンダリングします

パイプラインに厳しいプロジェクトがあり、どこから始めればよいかわかりません。上司は、Word文書をHTMLで表示する機能を望んでおり、Word文書と同じように見えます。

Word文書をポップアップまたはライトボックスに表示させようと何度も試みた後、彼はWordの内容をHTMLに変換してデータベースに保存し、WebページにHTMLとして表示することに固執しました。 。

Word文書を表示する方が良いかどうかについて、良い弾薬を教えていただけませんか(煩わしさが少なく、ストレージスペースが少ないほど安全です)。

または、Word文書をHTMLに変換するのが非常に簡単な場合は、それを行うことができます。

私が現在持っているテクノロジーは、Entity Framework、LINQ、MVC、C#、Razorです。

現在、HTmlAgilityPackを使用していますが、これによりすべての書式が削除され、ドキュメントを適切に表示できなくなります。

9
James Wilson

http://www.aspose.com/ (使用しているのはAspose wordsだと思います)を使用して同様のタスクを実行しますが、非常にうまく機能します。 (費用がかかります)

HTMLに変換すると、ドキュメントの表現が最悪になることをお勧めします。私たちが使用する1つの解決策は、ドキュメントのJpeg画像を生成して表示することです。

テキストの検索やコピー/貼り付けなどの操作を実行できるようにする必要がある場合は、クライアントマシンにインストールされている標準のPDFビューアで、ドキュメントを.pdfに変換し、インラインで表示することをお勧めします。

7
Dave Bish

DOCXを使用している場合は、MicrosoftのOpen XML SDKをいつでも使用できます。これは、非常に簡単に使用でき、クリーンアップできます。 MSDNから取得したサンプル

// This example shows the simplest conversion. No images are converted.
// A cascading style sheet is not used.
byte[] byteArray = File.ReadAllBytes("Test.docx");
using (MemoryStream memoryStream = new MemoryStream())
{
    memoryStream.Write(byteArray, 0, byteArray.Length);
    using (WordprocessingDocument doc =         WordprocessingDocument.Open(memoryStream, true))
    {
        HtmlConverterSettings settings = new HtmlConverterSettings()
        {
            PageTitle = "My Page Title"
        };
        XElement html = HtmlConverter.ConvertToHtml(doc, settings);

        // Note: the XHTML returned by ConvertToHtmlTransform contains objects of type
        // XEntity. PtOpenXmlUtil.cs defines the XEntity class. See
        // http://blogs.msdn.com/ericwhite/archive/2010/01/21/writing-entity-references-using-linq-to-xml.aspx
        // for detailed explanation.
        //
        // If you further transform the XML tree returned by ConvertToHtmlTransform, you
        // must do it correctly, or entities do not serialize properly.

        File.WriteAllText("Test.html", html.ToStringNewLineOnAttributes());
    }
}

Word自動化サービスもご覧ください http://blogs.office.com/b/Microsoft-Word/archive/2009/12/16/Word-automation-services_3a00_-what-it -does.aspx

6
Gonzix

OpenXMLOpenXmlPowerToolsを使用して、Word文書をHTMLに変換できます。

必要なパッケージをインストールする

Install-Package DocumentFormat.OpenXml

Install-Package OpenXmlPowerTools

参照を追加

ソリューションエクスプローラーでプロジェクトを右クリックします
次にAdd >> Reference >> Select System.Drawing and WindowsBase 

以下のコードに従ってください

 using DocumentFormat.OpenXml.Packaging; 
 using OpenXmlPowerTools; 
 using System; 
 using System.Collections.Generic; 
 using System.IO; 
 using System.Linq; 
 using System.Text; 
 using System.Threading.Tasks; 
 using System.Xml.Linq; 
 using System.Drawing.Imaging; 
 
 namespace WordToHTML 
 {
 class Program 
 {
 static void Main(string [] args )
 {
 byte [] byteArray = File.ReadAllBytes( "kk.docx"); 
 
 using(MemoryStream memoryStream = new MemoryStream())
 {
 memoryStream.Write(byteArray、0、byteArray.Length); 
 using(WordprocessingDocument doc = WordprocessingDocument.Open(memoryStream、true))
 {
 int imageCounter = 0; 
 HtmlConverterSettings settings = new HtmlConverterSettings()
 {
 PageTitle = "マイページタイトル"、
 ImageHandler = imageInfo => 
 {
 DirectoryInfo localDirInfo = new DirectoryInfo( "img"); 
 if(!localDirInfo.Exists)
 localDirInfo.Create(); 
 ++ imageCounter; 
 string extension = imageInfo.ContentType.Split( '/')[1]。 ToLower(); 
 ImageFormat imageFormat = null; 
 if(extension == "png")
 {
 extension = "gif"; 
 imageFormat = ImageFormat.Gif; 
} 
 else if(extension == "gif")
 imageFormat = ImageFormat.Gif; 
 else if(extension == "bmp")
 imageFormat = ImageFormat.Bmp; 
 else if(extension == "jpeg")
 imageFormat = ImageFormat.Jpeg; 
 else if(extension == "tiff")
 {
 extension = "gif"; 
 imageFormat = ImageFormat.Gif; 
} 
 else if(extension == "x-wmf")
 {
 extension = "wmf"; 
 imageFormat = ImageFormat.Wmf; 
} 
 if(imageFormat == null)
 return null; 
 
 string imageFileName = "img/image" + 
 imageCounter.ToString()+ "。" +拡張子; 
 try 
 {
 imageInfo.Bitmap.Save(imageFileName、imageFormat); 
} 
 catch(System.Runtime.InteropServices。 ExternalException)
 {
 return null; 
} 
 XElement img = new XElement(Xhtml.img、
 new XAttribute(NoNamespace.src、imageFileName )、
 imageInfo.ImgStyleAttribute、
 imageInfo.AltText!= null?
 new XAttribute(NoNamespace.alt、imageInfo.AltText):null); 
 returnimg ; 
} 
}; 
 XElement html = HtmlConverter。 ConvertToHtml(doc、settings); 
 File.WriteAllText( "kk.html"、html.ToStringNewLineOnAttributes()); 
}; 
} 
} 
} 
} 
3
Nisar

上司がHTMLでの表示に行き詰まっている場合、Wordドキュメントによって生成されたHTMLをデータベースに取り込むことはプロジェクトの最も難しい部分です。

選択できるワークフローがいくつかありますが、それらは次のようになります。

  1. ユーザーが.Docto .HTMLに保存>>ユーザーが作成したアプリを介してデータベースにドキュメントをアップロード>> WebアプリがデータベースからHTMLをプルしてWebページに表示する

  2. ユーザーは.Docを保存します>>ユーザーは作成したアプリを介してドキュメントをアップロードします>>アプリはその場でドキュメントを変換してからデータベースにHTMLを挿入します>>ウェブアプリはデータベースからHTMLをプルしてウェブページに表示します

  3. ユーザーは.Docファイルを保存してデータベースにアップロードします>> Webアプリは、Webページから要求されたときに、ドキュメントをプルしてオンザフライで変換します

  4. などなどなど

残念ながら、どのワークフローを選択しても、少しおかしなことになります。 @DaveBishは、サードパーティのツールを使用することを提案しました。これは、変換を処理するための最良の方法であることに完全に同意します(ユーザーがドキュメントをHTMLに保存する必要がない場合)。また、Word文書の画像は、HTMLに変換したときに問題が発生する可能性があることに注意してください(生成されたファイルに保存されないため、Web開発者側で/ sarcasm /がより楽しくなります)。

上司がサードパーティのコンバーターの費用を負担したくない場合は、Office.Interop名前空間を使用して自分で変換を処理することを試みることができます[これがどのようにひどいアイデアであるかについて何とか挿入] ... inその場合、 この回答 はおそらくあなたにとって非常に役立つでしょう。

1
Daniel Szabo

Free Spire.Doc を介してさらにサポートを受けることもできます

0