網上的解決方案一片一片的,我就不一一贅述了。
主要是想寫一點我碰到的問題,以及解決方法。
大概流程是這樣的,首先利用abcpdf將網頁生成生成pdf文件,然后使用swftools將pdf文件生成swf文件,最后使用flexpaper顯示。
一 首先是abcpdf的使用,這個比較簡單,需要注意的是abcpdf類庫分為32位和64位的。
如我的服務器是windows 2003 64,所以對應的abcpdf也要使用64位的,上代碼:
/// <summary> /// 網頁轉pdf文件 /// </summary> /// <param name="uri">網址</param> /// <param name="path">pdf的本地路徑</param> public static void HTML2PDF(String uri, String path) { using (WebSupergoo.ABCpdf7.Doc doc = new WebSupergoo.ABCpdf7.Doc()) { int count = doc.AddImageUrl(uri); while (true) { if (!doc.Chainable(count)) break; doc.Page = doc.AddPage(); count = doc.AddImageToChain(count); } doc.Save(path); } }
二 然后是swftools的使用,這個是遇到問題最多的一個環節。
1.生成swf的版本問題;
這個問題比較簡單,在參數中添加" -s flashversion=9",即可解決。
2.路徑中存在空格的問題;
給路徑加上雙引號,即可解決。
3.pdf文件中文無法轉換的問題;
這個就太坑爹了,網上的解決方案,千篇一律,但是我嘗試后發現任然無法成功轉換(有成功實現的碼友,煩請告知緣由。)
后來發現直接用pdf2swf.exe,或者使用IIS Express瀏覽網頁,也就是說不使用IIS,可以正常轉換。
所以猜測是因為權限問題,導致轉換不成功。修改網站應用程序池的預定義用戶為本地系統,問題解決,當然這個地方要注意安全問題,如下圖。
4.pdf文件中文太多,導致在flexpaper中顯示時操作不流暢的問題。
還是中文問題,這個問題網上沒有搜到。一時沒了脾氣,不得不仔細查看swftools 參數,無果。
由於本人文學水平有限,理解能力不夠,只得抱着試一試的心態,把每個參數都嘗試一下。
最后發現"-G" -----Remove as many clip layers from file as possible. 在文件中盡量去除影片層,合並它們。
對flash了解不多,影片層更是沒有聽過,但是不管怎么樣,問題解決,下面貼代碼。
private static String ToolPath = @"你下載的swftools工具的路徑";
/// <summary> /// pdf文件轉swf文件 /// </summary> /// <param name="pdfPath">pdf文件路徑</param> /// <param name="swfPath">swf文件路徑</param> /// <returns></returns> public static void PDF2SWF(String pdfPath, String swfPath) { Process pc = new Process(); ProcessStartInfo psi = new ProcessStartInfo(ToolPath, String.Format(@"""{0}"" -o ""{1}"" {2}", pdfPath, swfPath, @" -s flashversion=9 -G")); pc.StartInfo = psi; pc.Start(); pc.WaitForExit(); }
三 使用flexpaper顯示swf文件
沒有什么難點,大部分問題在上面已經解決,直接給鏈接吧,園子里的。
頭一回寫博客,額,就這。