[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