[Asp.net] 흔히 볼 수 있는 워드, excel, ppt, pdf 온라인 미리보기 방안, 그림과 진실이 있고 당신에게 어울리는 것이 있습니다!

24895 단어 asp.net
인용문
이전 프로젝트는 오피스 문서의 온라인 미리보기 솔루션을 찾았습니다. 기록하는 김에 나중에 조회하기 편리합니다.
시나리오 1
페이지에서 Office 문서의 링크를 브라우저에서 직접 엽니다.다음과 같은 창이 나타납니다.
 
장점: 메인스트림(MainStream) 브라우저 모두 지원.
단점: Office 문서 링크가 브라우저에서 열리면 위의 그림과 같은 알림이 있을 수 있기 때문에 사용자가 직접 열거나 저장 기능을 선택해야 한다. 만약에 고객 컴퓨터에 천둥 다운로드 소프트웨어를 설치하면 천둥 다운로드를 시작하고 사용자 체험이 좋지 않다.
시나리오 2
오피스 문서가 html로 넘어가면 먼저com 구성 요소에 있는 오피스 라이브러리를 도입한 다음에 프로그램 집합 확장에word, excel, ppt의 dll를 도입한다.
 
 
그런 다음 F6가 생성되어 다음과 같은 오류가 발생합니다.
 
해결 방법:
 
 
오피스 문서 변환 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 }

 
테스트 결과:
테스트 목적으로 그림이 포함된 오피스 문서를 찾았습니다. 정상적으로 보십시오.
 
 
 
요구: 기계는 오피스를 설치해야 하고 오피스 환경은 순수하다. 이른바 순수란 여러 버전이 있을 수 없다는 것이다. lz는 일찍이 컴퓨터에wps를 설치한 적이 있다. 고생을 하면 다음과 같은 오류를 보고한다.
 
이 오류를 보고하면 울 수밖에 없어요. 인터넷에서 00046에 대한 해결 방법을 다 시도해 봤는데 안 돼요.그리고 오피스를 다시 설치해야 했고 웃었어요.오피스 완전판을 설치하는 것이 좋습니다. 원래는 완전판이 아니었기 때문에 이 방면의 원인이 있는지, 테스트도 없었기 때문에 완전판을 권장합니다.
방안 3
오피스 문서는 PDF로, PDF는 swf로, flexpaper+swftools를 사용하여 온라인 조회를 할 수 있습니다.
오피스 2007을 조작할 때 SaveAsPDFandXPS를 설치해야 합니다.exe, 설치가 완료되면 그림과 같습니다.
 
SaveAsPDFandXPS만 설치되어 있습니다.exe, 프로그램이 오피스 문서를 조작해야만 오피스 문서를 pdf 파일로 저장할 수 있습니다.오피스 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
테스트 결과:
 
 
 
이 프로젝트 오피스에서 pdf 파일을 전송하는 과정의 요구는 프로젝트 2 요구와 같습니다.
pdf 변환이 완료되면 pdf를 swf로 변환할 수 있습니다. flexpaper+swftools를 사용하여 온라인 조회를 할 수 있습니다. 제 이전 글을 참고할 수 있습니다.
FlexPaper+SWFTOol+작업 클래스 = PDF 온라인 미리 보기
방안 4
오피스 문서를 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가 오피스 문서를 swf로 변환할 때 flexpaper를 사용할 때 변환된 내용이 비어 있음을 감안하여 flexpaper가 열 수 있는 swf 파일은 flashpaper가 회전하는 swf 파일과 호환되지 않을 것으로 추측합니다.마지막으로 flashpaper를 사용하여 오피스 문서를 pdf로 변환하고 방안 3, pdf를 swf로 전환하는 절차를 밟습니다.또한 로컬 테스트 시 문제없습니다.프로젝트를 IIS에 배치하여 조회할 수 없고 카드가 끊기는 상황이 발생했습니다. 디버깅을 통해 파일이 너무 커서 오피스가 pdf로 완전히 전환되지 않은 상황에서 swftool 도구가 pdf 파일을 찾다가 오류가 발생했습니다.
IIS에서 조회할 수 없고 인터넷 해결 방안을 조회할 수 없습니다. 권한과 관련이 있습니다. 절차에 따라 설정했는데 결과가 없어서 좀 유감입니다.
방안 5
점집회사의 웹 오피스 컨트롤을 사용하여 테스트 후 호환성이 떨어지는 것을 발견하고 포기합니다.흥미 있는 것은 연구해 볼 수 있다.
시나리오 6
이 방안은 현재 주류 브라우저들이 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

좋은 웹페이지 즐겨찾기