Every day is a new day.Hello,technology curtilages.
最近接了幾個小項目,也是要備戰考試,是以就沒寫什麼大項目了,隻是一些功能子產品。前幾日發現51CTO的下載下傳技術文檔區域有了預覽功能感覺不錯哦,雖然不知道怎麼寫的,但是感覺很是友善呢。也沒怎麼留意代碼,直到接到“活兒”發現要做一個同樣的功能,我當時就感覺傻眼了,這我哪會?但是沒辦法,接下來的東西不能退!硬着頭皮上呗,當天我在網上搜尋了近百篇網頁,發現現在流行的有三種:Print2Flash,FlexPaper+SWFTools,flash2paper.

線上預覽文檔原理:把你上傳的任何格式的文檔統一轉換成flash播放器能夠識别的格式,也就是swf播放出來,效果就是文檔預覽了。道理都懂,但是真正去做的話,大牛也未必能一招就可以破敵。後期的調試我深有體會,雖然做這個東西我兩天就倒持出來了,但是基本上沒吃飯沒喝水,過程很艱辛。因為沒有接觸過這樣的東西,是以學習的過程是自己的事兒。
下面開始教程,首先我看了看51CTO的書寫格式:
<a target="_blank" href="http://blog.51cto.com/attachment/201312/104000710.jpg"></a>
熟悉一下FlexPaper的屬性設定,找到傳值的url,如下圖,
<a target="_blank" href="http://blog.51cto.com/attachment/201312/104640840.png"></a>
這樣我們大概就會明白FlexPaper的配置了,接着來看SWFTools,這個東西呢是統一把pdf文檔轉換為swf,這樣的話,思路就出來了,上傳的時候給個判斷,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<code>if</code><code>( fileExt == </code><code>".doc"</code> <code>|| fileExt == </code><code>".docx"</code><code>)</code>
<code>{</code>
<code> </code><code>office2pdf.DOCConvertToPDF(sourcePath, targetPath);</code>
<code>}</code>
<code>if</code><code>( fileExt == </code><code>".ppt"</code> <code>||fileExt == </code><code>".pptx"</code><code>)</code>
<code> </code><code>office2pdf.PPTConvertToPDF(sourcePath, targetPath);</code>
<code>if</code><code>( fileExt == </code><code>".xlsx"</code> <code>|| fileExt == </code><code>".xls"</code><code>)</code>
<code> </code><code>office2pdf.XLSConvertToPDF(sourcePath, targetPath);</code>
<code>if</code> <code>(fileExt == </code><code>".pdf"</code><code>)</code>
<code> </code><code>//不做處理</code>
把office的文檔格式統一成pdf就可以了,然後利用swftools轉換為swf,就可以很好預覽文檔。 說起來似乎很簡單,但是做的話,問題也會出現不少。
接下來我給你介紹office2pdf轉換類的寫法:你需要引用四個dll,分别是Microsoft.Office.Interop.Excel,Microsoft.Office.Interop.PowerPoint,Microsoft.Office.Interop.Word,office。
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
<code>using</code> <code>System;</code>
<code>using</code> <code>System.Data;</code>
<code>using</code> <code>System.Configuration;</code>
<code>using</code> <code>System.Web;</code>
<code>using</code> <code>System.Web.Security;</code>
<code>using</code> <code>System.Web.UI;</code>
<code>using</code> <code>System.Web.UI.WebControls;</code>
<code>using</code> <code>System.Web.UI.WebControls.WebParts;</code>
<code>using</code> <code>System.Web.UI.HtmlControls;</code>
<code>using</code> <code>Word = Microsoft.Office.Interop.Word;</code>
<code>using</code> <code>Excel = Microsoft.Office.Interop.Excel;</code>
<code>using</code> <code>PowerPoint = Microsoft.Office.Interop.PowerPoint;</code>
<code>using</code> <code>Microsoft.Office.Core;</code>
<code>namespace</code> <code>Document_preview.commonClass</code>
<code> </code><code>/// <summary></code>
<code> </code><code>/// Office2Pdf 将Office文檔轉化為pdf</code>
<code> </code><code>/// </summary></code>
<code> </code><code>public</code> <code>class</code> <code>Office2Pdf</code>
<code> </code><code>{</code>
<code> </code><code>public</code> <code>Office2Pdf()</code>
<code> </code><code>{</code>
<code> </code><code>//</code>
<code> </code><code>// TODO: 在此處添加構造函數邏輯</code>
<code> </code><code>}</code>
<code> </code><code>/// <summary></code>
<code> </code><code>/// Word轉換成pdf</code>
<code> </code><code>/// </summary></code>
<code> </code><code>/// <param name="sourcePath">源檔案路徑</param></code>
<code> </code><code>/// <param name="targetPath">目标檔案路徑</param></code>
<code> </code><code>/// <returns>true=轉換成功</returns></code>
<code> </code><code>public</code> <code>bool</code> <code>DOCConvertToPDF(</code><code>string</code> <code>sourcePath, </code><code>string</code> <code>targetPath)</code>
<code> </code><code>bool</code> <code>result = </code><code>false</code><code>;</code>
<code> </code><code>Word.WdExportFormat exportFormat = Word.WdExportFormat.wdExportFormatPDF;</code>
<code> </code><code>object</code> <code>paramMissing = Type.Missing;</code>
<code> </code><code>Word.ApplicationClass wordApplication = </code><code>new</code> <code>Word.ApplicationClass();</code>
<code> </code><code>Word.Document wordDocument = </code><code>null</code><code>;</code>
<code> </code><code>try</code>
<code> </code><code>{</code>
<code> </code><code>object</code> <code>paramSourceDocPath = sourcePath;</code>
<code> </code><code>string</code> <code>paramExportFilePath = targetPath;</code>
<code> </code><code>Word.WdExportFormat paramExportFormat = exportFormat;</code>
<code> </code><code>bool</code> <code>paramOpenAfterExport = </code><code>false</code><code>;</code>
<code> </code><code>Word.WdExportOptimizeFor paramExportOptimizeFor = Word.WdExportOptimizeFor.wdExportOptimizeForPrint;</code>
<code> </code><code>Word.WdExportRange paramExportRange = Word.WdExportRange.wdExportAllDocument;</code>
<code> </code><code>int</code> <code>paramStartPage = 0;</code>
<code> </code><code>int</code> <code>paramEndPage = 0;</code>
<code> </code><code>Word.WdExportItem paramExportItem = Word.WdExportItem.wdExportDocumentContent;</code>
<code> </code><code>bool</code> <code>paramIncludeDocProps = </code><code>true</code><code>;</code>
<code> </code><code>bool</code> <code>paramKeepIRM = </code><code>true</code><code>;</code>
<code> </code><code>Word.WdExportCreateBookmarks paramCreateBookmarks = Word.WdExportCreateBookmarks.wdExportCreateWordBookmarks;</code>
<code> </code><code>bool</code> <code>paramDocStructureTags = </code><code>true</code><code>;</code>
<code> </code><code>bool</code> <code>paramBitmapMissingFonts = </code><code>true</code><code>;</code>
<code> </code><code>bool</code> <code>paramUseISO19005_1 = </code><code>false</code><code>;</code>
<code> </code><code>wordDocument = wordApplication.Documents.Open(</code>
<code> </code><code>ref</code> <code>paramSourceDocPath, </code><code>ref</code> <code>paramMissing, </code><code>ref</code> <code>paramMissing,</code>
<code> </code><code>ref</code> <code>paramMissing, </code><code>ref</code> <code>paramMissing, </code><code>ref</code> <code>paramMissing,</code>
<code> </code><code>ref</code> <code>paramMissing);</code>
<code> </code><code>if</code> <code>(wordDocument != </code><code>null</code><code>)</code>
<code> </code><code>wordDocument.ExportAsFixedFormat(paramExportFilePath,</code>
<code> </code><code>paramExportFormat, paramOpenAfterExport,</code>
<code> </code><code>paramExportOptimizeFor, paramExportRange, paramStartPage,</code>
<code> </code><code>paramEndPage, paramExportItem, paramIncludeDocProps,</code>
<code> </code><code>paramKeepIRM, paramCreateBookmarks, paramDocStructureTags,</code>
<code> </code><code>paramBitmapMissingFonts, paramUseISO19005_1,</code>
<code> </code><code>ref</code> <code>paramMissing);</code>
<code> </code><code>result = </code><code>true</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>catch</code>
<code> </code><code>result = </code><code>false</code><code>;</code>
<code> </code><code>finally</code>
<code> </code><code>{</code>
<code> </code><code>wordDocument.Close(</code><code>ref</code> <code>paramMissing, </code><code>ref</code> <code>paramMissing, </code><code>ref</code> <code>paramMissing);</code>
<code> </code><code>wordDocument = </code><code>null</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>if</code> <code>(wordApplication != </code><code>null</code><code>)</code>
<code> </code><code>wordApplication.Quit(</code><code>ref</code> <code>paramMissing, </code><code>ref</code> <code>paramMissing, </code><code>ref</code> <code>paramMissing);</code>
<code> </code><code>wordApplication = </code><code>null</code><code>;</code>
<code> </code><code>GC.Collect();</code>
<code> </code><code>GC.WaitForPendingFinalizers();</code>
<code> </code><code>return</code> <code>result;</code>
<code> </code><code>/// 把Excel檔案轉換成PDF格式檔案</code>
<code> </code><code>public</code> <code>bool</code> <code>XLSConvertToPDF(</code><code>string</code> <code>sourcePath, </code><code>string</code> <code>targetPath)</code>
<code> </code><code>Excel.XlFixedFormatType targetType = Excel.XlFixedFormatType.xlTypePDF;</code>
<code> </code><code>object</code> <code>missing = Type.Missing;</code>
<code> </code><code>Excel.ApplicationClass application = </code><code>null</code><code>;</code>
<code> </code><code>Excel.Workbook workBook = </code><code>null</code><code>;</code>
<code> </code><code>application = </code><code>new</code> <code>Excel.ApplicationClass();</code>
<code> </code><code>object</code> <code>target = targetPath;</code>
<code> </code><code>object</code> <code>type = targetType;</code>
<code> </code><code>workBook = application.Workbooks.Open(sourcePath, missing, missing, missing, missing, missing,</code>
<code> </code><code>missing, missing, missing, missing, missing, missing, missing, missing, missing);</code>
<code> </code><code>workBook.ExportAsFixedFormat(targetType, target, Excel.XlFixedFormatQuality.xlQualityStandard, </code><code>true</code><code>, </code><code>false</code><code>, missing, missing, missing, missing);</code>
<code> </code><code>if</code> <code>(workBook != </code><code>null</code><code>)</code>
<code> </code><code>workBook.Close(</code><code>true</code><code>, missing, missing);</code>
<code> </code><code>workBook = </code><code>null</code><code>;</code>
<code> </code><code>if</code> <code>(application != </code><code>null</code><code>)</code>
<code> </code><code>application.Quit();</code>
<code> </code><code>application = </code><code>null</code><code>;</code>
<code> </code><code>///<summary> </code>
<code> </code><code>/// 把PowerPoint檔案轉換成PDF格式檔案 </code>
<code> </code><code>///</summary> </code>
<code> </code><code>///<param name="sourcePath">源檔案路徑</param> </code>
<code> </code><code>///<param name="targetPath">目标檔案路徑</param></code>
<code> </code><code>///<returns>true=轉換成功</returns></code>
<code> </code><code>public</code> <code>bool</code> <code>PPTConvertToPDF(</code><code>string</code> <code>sourcePath, </code><code>string</code> <code>targetPath)</code>
<code> </code><code>bool</code> <code>result;</code>
<code> </code><code>PowerPoint.PpSaveAsFileType targetFileType = PowerPoint.PpSaveAsFileType.ppSaveAsPDF;</code>
<code> </code><code>PowerPoint.ApplicationClass application = </code><code>null</code><code>;</code>
<code> </code><code>PowerPoint.Presentation persentation = </code><code>null</code><code>;</code>
<code> </code><code>application = </code><code>new</code> <code>PowerPoint.ApplicationClass();</code>
<code> </code><code>persentation = application.Presentations.Open(sourcePath, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse); persentation.SaveAs(targetPath, targetFileType, Microsoft.Office.Core.MsoTriState.msoTrue);</code>
<code> </code><code>if</code> <code>(persentation != </code><code>null</code><code>)</code>
<code> </code><code>persentation.Close();</code>
<code> </code><code>persentation = </code><code>null</code><code>;</code>
<code> </code><code>}</code>
寫法類後就是調用,格式為office2pdf.DOCConvertToPDF(sourcePath, targetPath)。
完成office2pdf的轉換,就開始pdf2swf,利用swftools.
<code>string</code> <code>fileName = ViewState[</code><code>"fileName"</code><code>].ToString();</code>
<code> </code><code>string</code> <code>cmdStr = HttpContext.Current.Server.MapPath(</code><code>"~/SWFTools/pdf2swf.exe"</code><code>);</code>
<code> </code><code>string</code> <code>savePath = HttpContext.Current.Server.MapPath(</code><code>"~/WordManage/word/"</code><code>);</code>
<code> </code><code>//string aa = DateTime.Now.ToString("yyyymmddhhmmss");</code>
<code> </code><code>string</code> <code>sourcePath = </code><code>@""""</code> <code>+ savePath + TextBox11.Text.ToString() + </code><code>".pdf"</code> <code>+ </code><code>@""""</code><code>;</code>
<code> </code><code>string</code> <code>targetPath = </code><code>@""""</code> <code>+ savePath + TextBox11.Text.ToString() + </code><code>".swf"</code> <code>+ </code><code>@""""</code><code>;</code>
<code> </code>
<code> </code><code>string</code> <code>argsStr = </code><code>" -t "</code> <code>+ sourcePath + </code><code>" -s flashversion=9 -o "</code> <code>+ targetPath;</code>
<code> </code><code>ExcutedCmd(cmdStr, argsStr);</code>
這樣上傳完成後,我們會在根目錄下找到如下圖的檔案,
<a target="_blank" href="http://blog.51cto.com/attachment/201312/110527596.png"></a>
最後結合Bootstrap的彈出層,可以做出如下圖的效果,
<a target="_blank" href="http://blog.51cto.com/attachment/201312/110659684.jpg"></a>
不知道你感覺如何,反正我倒持了兩天,感覺能出來這樣的效果,我覺得可以交差了,呵呵。我是一個比較容易滿足的人。最後謝謝我的導師每天問我吃喝拉撒的瑣事兒,讓她操心,亦師亦母啊!可令天下父母心,唯有努力前進才能成為甄嬛,呵呵。(随後我會把項目獨立出來把demo給大家上傳)
<a target="_blank" href="http://blog.51cto.com/attachment/201312/110919270.jpg"></a>
demo下載下傳位址:http://down.51cto.com/data/1052309
本文轉自 吳雨聲 51CTO部落格,原文連結:,如需轉載請自行聯系原作者 Every day is a new day.Hello,technology curtilages.