天天看點

教你如何學習51CTO的文檔預覽功能(.NET版)

     Every day is a new day.Hello,technology curtilages.

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

教你如何學習51CTO的文檔預覽功能(.NET版)

     線上預覽文檔原理:把你上傳的任何格式的文檔統一轉換成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>/// &lt;summary&gt;</code>

<code>    </code><code>/// Office2Pdf 将Office文檔轉化為pdf</code>

<code>    </code><code>/// &lt;/summary&gt;</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>/// &lt;summary&gt;</code>

<code>        </code><code>/// Word轉換成pdf</code>

<code>        </code><code>/// &lt;/summary&gt;</code>

<code>        </code><code>/// &lt;param name="sourcePath"&gt;源檔案路徑&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="targetPath"&gt;目标檔案路徑&lt;/param&gt;</code>

<code>        </code><code>/// &lt;returns&gt;true=轉換成功&lt;/returns&gt;</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>///&lt;summary&gt;    </code>

<code>        </code><code>/// 把PowerPoint檔案轉換成PDF格式檔案   </code>

<code>        </code><code>///&lt;/summary&gt;    </code>

<code>        </code><code>///&lt;param name="sourcePath"&gt;源檔案路徑&lt;/param&gt; </code>

<code>        </code><code>///&lt;param name="targetPath"&gt;目标檔案路徑&lt;/param&gt;</code>

<code>        </code><code>///&lt;returns&gt;true=轉換成功&lt;/returns&gt;</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.

繼續閱讀