[Asp.net]よくあるword,excel,ppt,pdfオンラインプレビュースキーム、図に真実があり、いつもあなたに似合うものがあります!

24937 ワード

引用する


以前はプロジェクトが必要で、officeドキュメントのオンラインプレビューのソリューションを探して、ついでに記録して、後で検索するのに便利です.

シナリオ1


Officeドキュメントのページへのリンクをブラウザで直接開きます.次のウィンドウが表示されます.
 
利点:主流ブラウザでサポートされています.
欠点:Officeドキュメントのリンクはブラウザの中で開いて、上図のようなヒントがあって、ユーザーが自分で開くか保存する機能を選択する必要があります.もしお客様のパソコンに迅雷ダウンロードソフトウェアをインストールしたら、迅雷ダウンロードを起動して、ユーザーの体験はよくありません.

シナリオ2


officeドキュメントはhtmlを転送し、まずcomコンポーネントのofficeライブラリを導入し、プログラムセットの拡張にword、excel、pptのdllを導入します.
 
 
その後、F 6が生成され、次のエラーが表示されます.
 
解決策:
 
 
officeドキュメント変換html補助クラス:
Ctrl+C
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Office.Core;
using Word = Microsoft.Office.Interop.Word;
namespace Wolfy.OfficePreview
{
public class Office2HtmlHelper
{
///
//WordからHtmlへ
///

////変換するドキュメントのパス
////htmlに変換された保存パス
////htmlに変換されたファイル名
public static void Word2Html(string path, string savePath, string wordFileName)
{
Word.ApplicationClass word = new Word.ApplicationClass();
Type wordType = word.GetType();
Word.Documents docs = word.Documents;
Type docsType = docs.GetType();
Word.Document doc = (Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { (object)path, true, true });
Type docType = doc.GetType();
string strSaveFileName = savePath + wordFileName + ".html";
object saveFileName = (object)strSaveFileName;
docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName, Word.WdSaveFormat.wdFormatFilteredHTML });
docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, doc, null);
wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);
}
///
//ExcelからHtmlへ
///

////変換するドキュメントのパス
////htmlに変換された保存パス
////htmlに変換されたファイル名
public static void Excel2Html(string path, string savePath, string wordFileName)
{
string str = string.Empty;
Microsoft.Office.Interop.Excel.Application repExcel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook workbook = null;
Microsoft.Office.Interop.Excel.Worksheet worksheet = null;
workbook = repExcel.Application.Workbooks.Open(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
object htmlFile = savePath + wordFileName + ".html";
object ofmt = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;
workbook.SaveAs(htmlFile, ofmt, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
object osave = false;
workbook.Close(osave, Type.Missing, Type.Missing);
repExcel.Quit();
}
///
//pptからHtmlへ
///

////変換するドキュメントのパス
////htmlに変換された保存パス
////htmlに変換されたファイル名
public static void PPT2Html(string path, string savePath, string wordFileName)
{
Microsoft.Office.Interop.PowerPoint.Application ppApp = new Microsoft.Office.Interop.PowerPoint.Application();
string strSourceFile = path;
string strDestinationFile = savePath + wordFileName + ".html";
Microsoft.Office.Interop.PowerPoint.Presentation prsPres = ppApp.Presentations.Open(strSourceFile, Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse);
prsPres.SaveAs(strDestinationFile, Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsHTML, MsoTriState.msoTrue);
prsPres.Close();
ppApp.Quit();
}
}
}
Office2HtmlHelper
Ctrl+C
 
 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Office2Html.aspx.cs" Inherits="Wolfy.OfficePreview.Office2Html" %>
 2 
 3 <!DOCTYPE html>
 4 
 5 <html xmlns="http://www.w3.org/1999/xhtml">
 6 <head runat="server">
 7     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 8     <title></title>
 9 </head>
10 <body>
11     <form id="form1" runat="server">
12         <div>
13             <asp:Button Text="Word Html" ID="btnWord" runat="server" CommandArgument="docx" OnClick="btnWord_Click" />
14             <asp:Button ID="btnExcel" Text="Excel Html" runat="server" CommandArgument="xlsx" OnClick="btnWord_Click" />
15             <asp:Button ID="btnPPT" Text="PPT Html" runat="server" CommandArgument="ppt" OnClick="btnWord_Click" />
16         </div>
17     </form>
18 </body>
19 </html>

 
Office2Html.aspx
 
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7 
 8 namespace Wolfy.OfficePreview
 9 {
10     public partial class Office2Html : System.Web.UI.Page
11     {
12         protected void Page_Load(object sender, EventArgs e)
13         {
14 
15         }
16         protected void btnWord_Click(object sender, EventArgs e)
17         {
18             Button btn = sender as Button;
19             switch (btn.CommandArgument)
20             {
21                 case "docx":
22                     Office2HtmlHelper.Word2Html(MapPath("/Doc/      SEO  (   ).doc"), MapPath("/Html/"), "      SEO  (   )");
23                     break;
24                 case "xlsx":
25                     Office2HtmlHelper.Excel2Html(MapPath("/Excel/1994-2013           .xlsx"), MapPath("/Html/"), "1994-2013           ");
26                     break;
27                 case "ppt":
28                     Office2HtmlHelper.PPT2Html(MapPath("/PPT/23       .ppt"), MapPath("/Html/"), "23       ");
29                     break;
30                 default:
31                     break;
32             }
33         }
34     }

35 }

 
テスト結果:
ここでは、テストのために画像を含むofficeドキュメントを探して、正常に閲覧します.
 
 
 
要求:機械はofficeをインストールしなければならなくて、しかもoffice環境は純粋で、いわゆる純粋は複数のバージョンがあることができなくて、lzはかつてコンピュータの上でwpsをインストールしたことがあって、苦労していつも以下の間違いを報告します:
 
この間違いを報告して、泣くしかなくて、ネット上の00046の解決方法についてすべて試みて、だめです.そしてofficeを再インストールしなければならなくて笑った.office完全版をインストールしたほうがいいです.元は完全版ではないので、この方面の原因があるかどうか分かりません.テストもしていません.完全版をお勧めします.

シナリオ3


officeドキュメントはPDF、PDFはswf、flexpaper+swftoolsを使用してオンラインブラウズを実現します.
Office 2007を操作する場合は、SaveAsPDF andXPSをインストールする必要があります.exe、インストールに成功した後、図に示すように:
 
SaveAsPDF andXPSのみがインストールされています.exeは、プログラムがofficeドキュメントを操作してこそ、officeドキュメントがpdfファイルとして保存されます.office 2010はインストールする必要はありません.この機能が内蔵されています.
コアコード:
 
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Web;
  5 using Word = Microsoft.Office.Interop.Word;
  6 using Excel = Microsoft.Office.Interop.Excel;
  7 using PowerPoint = Microsoft.Office.Interop.PowerPoint;
  8 using Microsoft.Office.Core;
  9 namespace Wolfy.OfficePreview
 10 {
 11     /// <summary>
 12     /// Office2Pdf  Office     pdf
 13     /// </summary>
 14     public class Office2PDFHelper
 15     {
 16         public Office2PDFHelper()
 17         {
 18             //
 19             // TODO:            
 20             //
 21         }
 22         /// <summary>
 23         /// Word   pdf
 24         /// </summary>
 25         /// <param name="sourcePath">     </param>
 26         /// <param name="targetPath">      </param>
 27         /// <returns>true=    </returns>
 28         public static bool DOCConvertToPDF(string sourcePath, string targetPath)
 29         {
 30             bool result = false;
 31             Word.WdExportFormat exportFormat = Word.WdExportFormat.wdExportFormatPDF;
 32             object paramMissing = Type.Missing;
 33             Word.ApplicationClass wordApplication = new Word.ApplicationClass();
 34             Word.Document wordDocument = null;
 35             try
 36             {
 37                 object paramSourceDocPath = sourcePath;
 38                 string paramExportFilePath = targetPath;
 39                 Word.WdExportFormat paramExportFormat = exportFormat;
 40                 bool paramOpenAfterExport = false;
 41                 Word.WdExportOptimizeFor paramExportOptimizeFor = Word.WdExportOptimizeFor.wdExportOptimizeForPrint;
 42                 Word.WdExportRange paramExportRange = Word.WdExportRange.wdExportAllDocument;
 43                 int paramStartPage = 0;
 44                 int paramEndPage = 0;
 45                 Word.WdExportItem paramExportItem = Word.WdExportItem.wdExportDocumentContent;
 46                 bool paramIncludeDocProps = true;
 47                 bool paramKeepIRM = true;
 48                 Word.WdExportCreateBookmarks paramCreateBookmarks = Word.WdExportCreateBookmarks.wdExportCreateWordBookmarks;
 49                 bool paramDocStructureTags = true;
 50                 bool paramBitmapMissingFonts = true;
 51                 bool paramUseISO19005_1 = false;
 52                 wordDocument = wordApplication.Documents.Open(
 53                     ref paramSourceDocPath, ref paramMissing, ref paramMissing,
 54                     ref paramMissing, ref paramMissing, ref paramMissing,
 55                     ref paramMissing, ref paramMissing, ref paramMissing,
 56                     ref paramMissing, ref paramMissing, ref paramMissing,
 57                     ref paramMissing, ref paramMissing, ref paramMissing,
 58                     ref paramMissing);
 59                 if (wordDocument != null)
 60                     wordDocument.ExportAsFixedFormat(paramExportFilePath,
 61                         paramExportFormat, paramOpenAfterExport,
 62                         paramExportOptimizeFor, paramExportRange, paramStartPage,
 63                         paramEndPage, paramExportItem, paramIncludeDocProps,
 64                         paramKeepIRM, paramCreateBookmarks, paramDocStructureTags,
 65                         paramBitmapMissingFonts, paramUseISO19005_1,
 66                         ref paramMissing);
 67                 result = true;
 68             }
 69             catch
 70             {
 71                 result = false;
 72             }
 73             finally
 74             {
 75                 if (wordDocument != null)
 76                 {
 77                     wordDocument.Close(ref paramMissing, ref paramMissing, ref paramMissing);
 78                     wordDocument = null;
 79                 }
 80                 if (wordApplication != null)
 81                 {
 82                     wordApplication.Quit(ref paramMissing, ref paramMissing, ref paramMissing);
 83                     wordApplication = null;
 84                 }
 85                 GC.Collect();
 86                 GC.WaitForPendingFinalizers();
 87                 GC.Collect();
 88                 GC.WaitForPendingFinalizers();
 89             }
 90             return result;
 91         }
 92 
 93         /// <summary>
 94         ///  Excel     PDF      
 95         /// </summary>
 96         /// <param name="sourcePath">     </param>
 97         /// <param name="targetPath">      </param>
 98         /// <returns>true=    </returns>
 99         public static bool XLSConvertToPDF(string sourcePath, string targetPath)
100         {
101             bool result = false;
102             Excel.XlFixedFormatType targetType = Excel.XlFixedFormatType.xlTypePDF;
103             object missing = Type.Missing;
104             Excel.ApplicationClass application = null;
105             Excel.Workbook workBook = null;
106             try
107             {
108                 application = new Excel.ApplicationClass();
109                 object target = targetPath;
110                 object type = targetType;
111                 workBook = application.Workbooks.Open(sourcePath, missing, missing, missing, missing, missing,
112                     missing, missing, missing, missing, missing, missing, missing, missing, missing);
113                 workBook.ExportAsFixedFormat(targetType, target, Excel.XlFixedFormatQuality.xlQualityStandard, true, false, missing, missing, missing, missing);
114                 result = true;
115             }
116             catch
117             {
118                 result = false;
119             }
120             finally
121             {
122                 if (workBook != null)
123                 {
124                     workBook.Close(true, missing, missing);
125                     workBook = null;
126                 }
127                 if (application != null)
128                 {
129                     application.Quit();
130                     application = null;
131                 }
132                 GC.Collect();
133                 GC.WaitForPendingFinalizers();
134                 GC.Collect();
135                 GC.WaitForPendingFinalizers();
136             }
137             return result;
138         }
139         ///<summary>        
140         ///  PowerPoint     PDF           
141         ///</summary>        
142         ///<param name="sourcePath">     </param>     
143         ///<param name="targetPath">      </param> 
144         ///<returns>true=    </returns> 
145         public static bool PPTConvertToPDF(string sourcePath, string targetPath)
146         {
147             bool result;
148             PowerPoint.PpSaveAsFileType targetFileType = PowerPoint.PpSaveAsFileType.ppSaveAsPDF;
149             object missing = Type.Missing;
150             PowerPoint.ApplicationClass application = null;
151             PowerPoint.Presentation persentation = null;
152             try
153             {
154                 application = new PowerPoint.ApplicationClass();
155                 persentation = application.Presentations.Open(sourcePath, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse); persentation.SaveAs(targetPath, targetFileType, Microsoft.Office.Core.MsoTriState.msoTrue);
156                 result = true;
157             }
158             catch
159             {
160                 result = false;
161             }
162             finally
163             {
164                 if (persentation != null)
165                 {
166                     persentation.Close();
167                     persentation = null;
168                 }
169                 if (application != null)
170                 {
171                     application.Quit();
172                     application = null;
173                 }
174                 GC.Collect();
175                 GC.WaitForPendingFinalizers();
176                 GC.Collect();
177                 GC.WaitForPendingFinalizers();
178             }
179             return result;
180         }
181     }
182 }

 
Office2PDFHelper
 
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7 
 8 namespace Wolfy.OfficePreview
 9 {
10     public partial class Office2PDF : System.Web.UI.Page
11     {
12         protected void Page_Load(object sender, EventArgs e)
13         {
14 
15         }
16         protected void btnWord_Click(object sender, EventArgs e)
17         {
18             Button btn = sender as Button;
19             switch (btn.CommandArgument)
20             {
21                 case "docx":
22                     Office2PDFHelper.DOCConvertToPDF(MapPath("/Doc/      SEO  (   ).doc"), MapPath("/PDF/      SEO  (   ).pdf"));
23                     break;
24                 case "xlsx":
25                     Office2PDFHelper.XLSConvertToPDF(MapPath("/Excel/1994-2013           .xlsx"), MapPath("/PDF/1994-2013           .pdf"));
26                     break;
27                 case "ppt":
28                     Office2PDFHelper.PPTConvertToPDF(MapPath("/PPT/23       .ppt"), MapPath("/PDF/23       .pdf"));
29                     break;
30                 default:
31                     break;
32             }
33         }
34     }
35 }

 
Office2PDF
 
 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Office2PDF.aspx.cs" Inherits="Wolfy.OfficePreview.Office2PDF" %>
 2 
 3 <!DOCTYPE html>
 4 
 5 <html xmlns="http://www.w3.org/1999/xhtml">
 6 <head runat="server">
 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 8     <title></title>
 9 </head>
10 <body>
11     <form id="form1" runat="server">
12     <div>
13       <asp:Button Text="Word PDF" ID="btnWord" runat="server" CommandArgument="docx" OnClick="btnWord_Click" />
14             <asp:Button ID="btnExcel" Text="Excel PDF" runat="server" CommandArgument="xlsx" OnClick="btnWord_Click" />
15             <asp:Button ID="btnPPT" Text="PPT PDF" runat="server" CommandArgument="ppt" OnClick="btnWord_Click" />
16     </div>
17     </form>
18 </body>
19 </html>

 
Office2PDF.aspx
テスト結果:
 
 
 
このシナリオofficeがpdfファイルを転送するプロセスの要件は、シナリオ2の要件と同じです.
pdf変換が完了すると、pdfをswfに変換し、flexpaper+swftoolsを使用してオンラインブラウズを実現できます.前の記事を参照してください.
FlexPaper+SWFTool+操作クラス=PDFのオンラインプレビュー

シナリオ4


officeドキュメントは直接swfに変換され、flexpaper+swftoolを使用して先行ブラウズを実現します.
officeは直接swfに変換され、ここではflashpaperを使用して実現されます.
FlashPaperは仮想プリンタで、wordファイルをswf形式のファイルに直接変換することができます(.doc.xls.txt.pdfなどのファイルはすべて正常にSWF形式を生成することができます).
ここにはコアコードのみが表示されます.
 
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Diagnostics;
 4 using System.Linq;
 5 using System.Web;
 6 using System.Web.UI;
 7 using System.Web.UI.WebControls;
 8 
 9 namespace Wolfy.OfficePreview
10 {
11     public partial class Office2Swf : System.Web.UI.Page
12     {
13         protected void Page_Load(object sender, EventArgs e)
14         {
15 
16         }
17         protected void btnWord_Click(object sender, EventArgs e)
18         {
19             Button btn = sender as Button;
20             switch (btn.CommandArgument)
21             {
22                 case "docx":
23                     ConvertOffice2Swf(MapPath("/Doc/      SEO  (   ).doc"), MapPath("/SWF/      SEO  (   ).swf"));
24                     break;
25                 case "xlsx":
26                     Office2PDFHelper.XLSConvertToPDF(MapPath("/Excel/1994-2013           .xlsx"), MapPath("/SWF/1994-2013           .swf"));
27                     break;
28                 case "ppt":
29                     Office2PDFHelper.PPTConvertToPDF(MapPath("/PPT/23       .ppt"), MapPath("/SWF/23       .swf"));
30                     break;
31                 default:
32                     break;
33             }
34         }
35         /// <summary>
36         /// office  swf
37         /// </summary>
38         /// <param name="officePath">    office    </param>
39         /// <param name="swfPath">   swf   </param>
40         private void ConvertOffice2Swf(string officePath, string swfPath)
41         {
42             Process process = new Process();     //       
43             ProcessStartInfo startInfo = new ProcessStartInfo();
44             string paperroot = @"C:\Program Files\Macromedia\FlashPaper 2\FlashPrinter.exe";//   FlashPrinter   
45             string docFile = officePath;
46             string swfFile = swfPath;
47             startInfo.FileName = paperroot;
48             startInfo.Arguments = docFile + " -o " + swfFile;
49             startInfo.UseShellExecute = false;     //            
50             startInfo.RedirectStandardInput = false;   //       
51             startInfo.RedirectStandardOutput = false;   //      
52             startInfo.CreateNoWindow = true;     //      
53             process.StartInfo = startInfo;
54             process.Start();   
55             if (process != null)
56                 process.Close();
57            
58         }
59     }
60 }

 
テスト時、flashpaperはofficeドキュメントをswfに変換する際、flexpaperを使用して閲覧すると、変換の内容が空になり、flexpaperが開くswfファイルとflashpaperが回転するswfファイルが互換性がないと推測されます.最後にflashpaperを使用してofficeドキュメントをpdfに変換し、シナリオ3、pdfからswfに移行する手順を実行します.また、ローカルテストの場合は、問題ありません.プロジェクトをIISに配置し、閲覧できず、カードが死んだ場合、デバッグでファイルが大きすぎてofficeがpdfに完全に変換されていない場合、swftoolツールはpdfファイルを探してエラーが発生します.
IISでは、閲覧できず、ネット上のソリューションを検索し、権限と関係があり、手順に従って設定されていますが、結果的には、少し残念です.

シナリオ5


ポイント会社のwebofficeコントロールを使用して、テスト後に互換性が悪いことを発見し、放棄します.興味があれば研究してもいいです.

シナリオ6


officeがpdfに移行すると、直接ブラウザが開きます.この案は、現在主流のブラウザがadobe reader機能を統合しているため、PDFファイルを直接開くことができます.pdfファイルリンクを直接開くことができます.
必要条件:adobe reader類似ソフトウェアをローカルにインストールする必要があります.

まとめ


プロジェクトの状況に鑑みて適切な案を選択し、その中には曲線救国にすぎない案があるが、同様に要求を達成することができる.もしあなたが役に立つと思ったら、もっと多くの人に見られるようにお勧めしてください.文章の最後を見てくれてありがとう.
参考記事:
http://www.cnblogs.com/expectszc/archive/2012/04/04/2432149.html
http://www.cnblogs.com/lexlin/articles/2478027.html
http://www.cnblogs.com/gossip/p/3473024.html
http://www.cnblogs.com/expectszc/archive/2012/04/04/2432149.html