[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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.