轉載:http://www.wizzer.cn/?p=50
1、使用SaveAsPDFandXPS將office文檔轉換成PDF
http://www.microsoft.com/downloads/details.aspx?FamilyID=4d951911-3e7e-4ae6-b059-a2e79ed87041&displaylang=en
微軟原計劃讓Office 2007直接支持保存爲PDF格式,但引起了Adobe的不滿,並被指責爲壟斷,最終被迫放棄,改爲以插件的形式予以支持,插件大家都知道怎麼回事兒,默認不裝,要用你的自己找來裝上。不過微軟針對這件事情也做出了一個迴應:發佈XPS,
XPS則是微軟自己利用XML技術開發的新型文檔格式。
該插件支持Office 2007的8個組件,包括Word、Excel、Access、PowerPoint、InfoPath、OneNote、Publisher和Visio。安裝插件後,用戶即可在上述組件中將相應文檔存儲爲PDF格式或XPS格式,還可以方便地將文檔保存爲PDF/XPS格式的E-mail附件。
2、下載 SWFTools
SWFTools 是一組用來處理 Flash 的 swf 文件的工具包,包括:
1. 合併工具 swfcombine
2. 抽取工具 swfextract
3. PDF/JPEG/PNG/AVI/TTF/WAV 到 SWF 的轉換工具 :pdf2swf, jpeg2swf, png2swf, avi2swf, font2swf, and wav2swf|
4. 文本解析工具 swfstrings
5. SWF 解析器 swfdump
6. SWF 讀寫庫 rfxswflib
其中把pdf轉成swf的工具就是pdf2swf了。在命令行中運行pdf2swf src.pdf des.swf一般能滿足需求。而命令行參數可以通過pdf2swf -f得到:
-h , –help Print short help message and exit 打印幫助信息
-V , –version Print version info and exit 打印版本號
-o , –output file.swf Direct output to file.swf. If file.swf contains ‘13568621′ (file13568630.swf), then each page指定輸出的swf文件名
-p , –pages range Convert only pages in range with range e.g. 1-20
or 1,4,6,9-11 or
指定轉換的頁面範圍,使用的頁碼描述方法與打印機打印文件時候的選頁一樣
-P , –password password Use password for deciphering the pdf.指定打開pdf的密碼
-v , –verbose Be verbose. Use more than one -v for greater effect.轉換時輸出詳細的內容
-z , –zlib Use Flash 6 (MX) zlib compression.使用Flash 6的zlib壓縮機制
-i , –ignore Allows pdf2swf to change the draw order of the pdf. This may make the generated允許程序修改pdf的繪製順序,可能會導致結果與原來有差異
-j , –jpegquality quality Set quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)設置轉換其中的jpeg圖片的質量,從0到100,默認值是85。
-s , –set param=value Set a SWF encoder specific parameter. See pdf2swf -s help for more information. 設置SWF轉碼時候的參數,具體參數可以用pdf2swf -s help獲取
-w , –samewindow When converting pdf hyperlinks, don’t make the links open a new window. 設置轉換後的swf打開原pdf中的連接時使用相同的窗口
-t , –stop Insert a stop() command in each page. 在每頁結尾添加一個stop()命令
-T , –flashversion num Set Flash Version in the SWF header to num. 設置SWF所使用的flash版本號
-F , –fontdir directory Add directory to the font search path. 指定字體文件所在路徑
-b , –defaultviewer Link a standard viewer to the swf file. 指定默認的swf導航文件,用來翻頁、放大縮小等等
-l , –defaultloader Link a standard preloader to the swf file which will be displayed while the main swf is loading. 指定默認的swf加載文件,用來顯示加載進程效果
-B , –viewer filename Link viewer filename to the swf file. 指定swf導航文件,作用同-b
-L , –preloader filename Link preloader filename to the swf file. 指定swf加載文件,作用同-l
-q , –quiet Suppress normal messages. Use -qq to suppress warnings, also. 不打印普通信息,用-qq就不打印警告信息。
-S , –shapes Don’t use SWF Fonts, but store everything as shape. 不使用字體,所有都轉爲形狀。
-f , –fonts Store full fonts in SWF. (Don’t reduce to used characters). 在swf中保存全部字體。
-G , –flatten Remove as many clip layers from file as possible. 在文件中儘量去除影片層,合併它們
-I , –info Don’t do actual conversion, just display a list of all pages in the PDF. 不做實際轉換,僅顯示PDF的信息。
-Q , –maxtime n Abort conversion after n seconds. Only available on Unix. 如果運行時間超時則退出。
3、java程序,實現上傳PDF自動轉換成SWF文件
03 |
if (ajaxAction.equals( "exeflash" )) |
05 |
String
fn = DecodeUtil.Decrypt(StringUtil.null2String(request.getParameter( "fn" )).trim()).toLowerCase(); |
07 |
if (! "" .equals(fn)
&& fn.indexOf( "/" )
> - 1 &&
fn.indexOf( ".pdf" )
> - 1 )
{ |
08 |
Map
webfileupmap = (Map) Globals.SYS_UPLOAD_CONFIG.get( "webfile" ); |
09 |
String
webfilepath = StringUtil.null2String(webfileupmap.get( "path" )).replace( "\\" , "\\\\" ); |
10 |
fn
= fn.substring(fn.lastIndexOf( "/" )
+ 1 ); |
11 |
webfilepath
= webfilepath + fn; |
12 |
File
f = new File(webfilepath); |
17 |
Map
webupmap = (Map) Globals.SYS_UPLOAD_CONFIG.get( "web" ); |
18 |
String
webpath = StringUtil.null2String(webupmap.get( "path" )).replace( "\\" , "\\\\" ); |
19 |
String
urlpath = StringUtil.null2String(webupmap.get( "urlpath" )); |
20 |
String
wname = fn.substring( 0 ,
fn.indexOf( "." ))
+ ".swf" ; |
21 |
webpath
= webpath + wname; |
22 |
String
wurl = urlpath + wname; |
24 |
File
f2 = new File(webpath); |
30 |
String
cmd = "C:\\SWFTools\\pdf2swf
" +
webfilepath + "
-o " +
webpath + "
-T 9" ; |
31 |
if (StringUtil.executeCmdFlash(cmd)
== false )
{ |
34 |
System.out.println( "cmd::::::" +
cmd); |
37 |
File
f1 = new File(webpath); |
39 |
ajaxstr
= DecodeUtil.Encrypt(wurl); |
45 |
} catch (Exception
e) { |
46 |
Globals.Logger( "發生錯誤:" +
e, 2 ); |
注意:
String cmd = “C:\\SWFTools\\pdf2swf ” + webfilepath + ” -o ” + webpath + ” -T 9″;
加 “-T 9” 參數,設置輸出版本爲flash9,解決PDF文件只有一頁,生成的swf不能播放的問題。
另外,若PDF內表格元素過多,在轉換時會拋出一堆異常錯誤。似乎還沒有好的解決辦法?
09 |
public static synchronized boolean executeCmdFlash(String
cmd) { |
12 |
final Process
process = Runtime.getRuntime().exec(cmd); |
13 |
Runtime.getRuntime().addShutdownHook( new Thread()
{ |
18 |
InputStreamReader
inputstreamreader = new InputStreamReader(process.getInputStream()); |
19 |
char c
= ( char )
inputstreamreader.read(); |
22 |
while (c
!= '\uFFFF' )
{ |
23 |
if (!inputstreamreader.ready())
{ |
24 |
System.out.println(stdout); |
29 |
catch (IllegalThreadStateException
_ex) { |
33 |
catch (InterruptedException
_ex2) { |
37 |
c
= ( char )
inputstreamreader.read(); |
42 |
inputstreamreader.close(); |
44 |
catch (IOException
ioexception2) { |
45 |
System.err.println( "RunCmd
: Error closing InputStream " +
ioexception2); |
48 |
} catch (Throwable
e) { |
50 |
Globals.Logger( "發生錯誤:" +
e, 2 ); |
4、利用FlexPaper展示
FlexPaper是一個被設計用來與PDF2SWF一起使用,開源輕量級的在瀏覽器上顯示各種文檔的組件, 使在Flex中顯示PDF成爲可能,而這個過程並無需PDF軟件環境的支持。它可以被當做Flex的庫來使用。也可以通過將一些例如Word、PPT等文檔轉成PDF,然後實現在線瀏覽。
01 |
SwfFile
: escape(host+ "/upload/web/2010-05-24-10-21-51139.swf" ), |
03 |
ZoomTransition
: "easeOut" , |
06 |
FitPageOnLoad
: false , |
07 |
FitWidthOnLoad
: true , |
09 |
FullScreenAsMaxWindow
: true , |