print2flash文檔在線預覽應用(java,.net)


一、背景  


 

  前段時間,LZ的boss突然給了出了這樣一個需求:將原項目中的所有文章關聯的附件TXT、PDF、office相關文件全部以flash的形式在網頁上進行展示,便於預覽。看似簡單的需求,整個研發小組都懵逼的。LZ也沒辦法只好Google一把,找了好幾套解決方案,基本上是調第三方軟件的API,像什么flashpaper、print2flash等等。LZ先試了flashpaper,反正是各種問題,不支持64位系統什么的;print2flash在版本4以前也是很多問題,dll調用失敗,dll缺失。最終,LZ在官網下載了最新的版本(商業軟件,收費的),用起來還是相對來說比較穩定,至今沒出現問題。提供的API還是比較豐富的,本篇LZ主要介紹java和.NET的操作。

二、print2flash安裝


 

  這里LZ為了簡單實驗主要介紹破解版的安裝(費了好大的力才找到的),如果商用,還是給錢找別人買吧。

  1)下載print2flash4.如果想使用服務器模式,大概需要600刀,也不是很貴。官網地址http://print2flash.com/

  2)運行print2flashsetup.exe一直下一步就OK。

  3)下載補丁文件。共3個文件p2fServer.exe,print2f4.exe,Print2FlashPrinter4.dll;如果之前已設置了windows服務方式啟動,則先需要停止Print2Flash4服務;拷貝p2fServer.exe、print2f4.exe到安裝目標文件夾替換原文件,拷貝Print2FlashPrinter4.dll到以下文件夾替換原始文件:C:\Windows\System32\spool\drivers\x64\以及C:\Windows\System32\spool\drivers\x64\3\

  4)注冊print2flash4服務。運行print2flash,options->print2flash service configuration,輸入Windows密碼,沒有的話就不用輸,勾選Grant access and launch pemmissions to Everyone給EveryOne用戶授予權限。點擊OK,如果提示successful,Current status顯示Installed表示安裝成功。

  5)開啟print2flash4服務。安裝成功后,在windows服務中可以找到print2flash服務。啟動該服務。

三、java操作API


 

  開始前我們需要將print2flash提供的SDK中的P2FConst.java引入:

  1 public class P2FConst
  2 {
  3     // 枚舉常量
  4     public static final int MSEXCEL = 0x00000001;
  5     public static final int MSWORD = 0x00000002;
  6     public static final int MSPOWERPOINT = 0x00000004;
  7     public static final int ACROBAT = 0x00000008;
  8 
  9     
 10     public static final int JPEG = 1;
 11     public static final int PNG = 2;
 12 
 13     
 14     public static final int STRETCH = 1;
 15     public static final int TILE = 2;
 16 
 17     
 18     public static final int INTLOGO = 0x00000001;
 19     public static final int INTDRAG = 0x00000002;
 20     public static final int INTSELTEXT = 0x00000004;
 21     public static final int INTZOOMSLIDER = 0x00000008;
 22     public static final int INTZOOMBOX = 0x00000010;
 23     public static final int INTFITWIDTH = 0x00000020;
 24     public static final int INTFITPAGE = 0x00000040;
 25     public static final int INTPREVPAGE = 0x00000080;
 26     public static final int INTGOTOPAGE = 0x00000100;
 27     public static final int INTNEXTPAGE = 0x00000200;
 28     public static final int INTSEARCHBOX = 0x00000400;
 29     public static final int INTSEARCHBUT = 0x00000800;
 30     public static final int INTROTATE = 0x00001000;
 31     public static final int INTPRINT = 0x00002000;
 32     public static final int INTNEWWIND = 0x00004000;
 33     public static final int INTHELP = 0x00008000;
 34     public static final int INTBACKBUTTON = 0x00030000;
 35     public static final int INTBACKBUTTONAUTO = 0x00010000;
 36     public static final int INTFORWARDBUTTON = 0x000C0000;
 37     public static final int INTFORWARDBUTTONAUTO = 0x00040000;
 38     public static final int INTFULLSCREEN = 0x00300000;
 39     public static final int INTFULLSCREENAUTO = 0x00100000;
 40 
 41 
 42     // METADATAPORMAT enumeration constants
 43     public static final int XML = 1;
 44     public static final int TEXT = 2;
 45 
 46     // OUTPUTFORMAT enumeration constants
 47     public static final int SINGLEFILE = 1;
 48     public static final int SINGLEFILEPERPAGE = 2;
 49     public static final int EXTVIEWER = 4;
 50 
 51     // PAPER_ORIENTATION enumeration constants
 52     public static final int ORIENT_PORTRAIT = 1;
 53     public static final int ORIENT_LANDSCAPE = 2;
 54 
 55     // PROTECTION_OPTION enumeration constants
 56     public static final int PROTDISPRINT = 0x00000001;
 57     public static final int PROTDISTEXTCOPY = 0x00000002;
 58     public static final int PROTENAPI = 0x00000004;
 59 
 60     // ThreeStateFlag enumeration constants
 61     public static final int TSF_NO = 0;
 62     public static final int TSF_YES = 1;
 63     public static final int TSF_AUTO = 2;
 64 
 65     // TOOLBARIMAGE enumeration constants
 66     public static final int IMGLOGO = 1;
 67     public static final int IMGDRAG = 2;
 68     public static final int IMGSELTEXT = 3;
 69     public static final int IMGZOOMRULER = 4;
 70     public static final int IMGZOOMFOCUSNADLE = 5;
 71     public static final int IMGZOOMNADLE = 6;
 72     public static final int IMGFITWIDTH = 7;
 73     public static final int IMGFITPAGE = 8;
 74     public static final int IMGPREVPAGE = 9;
 75     public static final int IMGNEXTPAGE = 10;
 76     public static final int IMGSEARCHBUT = 11;
 77     public static final int IMGROTATE = 12;
 78     public static final int IMGPRINT = 13;
 79     public static final int IMGNEWWIND = 14;
 80     public static final int IMGHELP = 15;
 81     public static final int IMGMORE = 16;
 82     public static final int IMGTOOLBARBGR = 17;
 83     public static final int IMGBACK = 18;
 84     public static final int IMGFORWARD = 19;
 85     public static final int IMGFULLSCREEN = 20;
 86     public static final int IMGEXITFULLSCREEN = 21;
 87 
 88     // TEMPLATETYPE enumeration constants
 89     public static final int TEMPLATE_CUSTOM = 1;
 90     public static final int TEMPLATE_ACTIONSCRIPT2 = 2;
 91     public static final int TEMPLATE_ACTIONSCRIPT3 = 3;
 92 
 93     // WATERMARKANCHOR enumeration constants
 94     public static final int CENTER = 0;
 95     public static final int LEFTCENTER = 1;
 96     public static final int RIGHTCENTER = 2;
 97     public static final int TOPCENTER = 16;
 98     public static final int BOTTOMCENTER = 32;
 99     public static final int LEFTTOP = 17;
100     public static final int RIGHTTOP = 18;
101     public static final int LEFTBOTTOM = 33;
102     public static final int RIGHTBOTTOM = 34;
103 
104     // COMPRESSION_METHOD enumeration constants
105     public static final int COMPRESSION_METHOD_ZLIB = 0;
106     public static final int COMPRESSION_METHOD_LZMA = 1;
107 
108     // DOCUMENT_TYPE Enumeration constants
109     public static final int FLASH = 1;
110     public static final int HTML5 = 2;
111     
112     // BROWSER_TYPE Enumeration public static final intants
113     public static final int INTERNET_EXPLORER =   1;
114     public static final int FIREFOX =             2;
115     public static final int CHROME =              4;
116     public static final int OPERA =               8;
117     public static final int SAFARI =              16;
118     
119     // POWERPOINT_PRINTOUTPUT Enumeration constants
120     public static final int POWERPOINT_PRINTOUTPUT_AUTO =            0;
121     public static final int POWERPOINT_PRINTOUTPUT_Slides =            1;
122     public static final int POWERPOINT_PRINTOUTPUT_TwoSlideHandouts =    2;
123     public static final int POWERPOINT_PRINTOUTPUT_ThreeSlideHandouts =    3;
124     public static final int POWERPOINT_PRINTOUTPUT_SixSlideHandouts    =    4;
125     public static final int POWERPOINT_PRINTOUTPUT_NotesPages =         5;
126     public static final int POWERPOINT_PRINTOUTPUT_Outline =        6;
127     public static final int POWERPOINT_PRINTOUTPUT_BuildSlides =        7;
128     public static final int POWERPOINT_PRINTOUTPUT_FourSlideHandouts =    8;
129     public static final int POWERPOINT_PRINTOUTPUT_NineSlideHandouts =    9;
130     public static final int POWERPOINT_PRINTOUTPUT_OneSlideHandouts    =    10;
131 }

  開始轉換Test.java類:

 1 package print2flash;
 2 
 3 import java.io.IOException;
 4 
 5 import com.jacob.activeX.*;
 6 import com.jacob.com.*;
 7 
 8 public class Test {
 9 
10     public static void main(String[] args) throws IOException {
11         try {
12             ComThread.InitSTA();//com組件管理,用來初始化com線程,釋放線程
13             ActiveXComponent p2f = new ActiveXComponent("Print2Flash4.Server");//創建print2flash的一個應用,調用print2flash服務
14             //設置屬性值,可根據自己需求修改
15             ActiveXComponent defProfile = new ActiveXComponent(p2f.getProperty("DefaultProfile").toDispatch());
16             defProfile.setProperty("InterfaceOptions", P2FConst.INTLOGO | P2FConst.INTZOOMSLIDER | P2FConst.INTPREVPAGE
17                     | P2FConst.INTGOTOPAGE | P2FConst.INTNEXTPAGE);
18             defProfile.setProperty("ProtectionOptions", P2FConst.PROTDISPRINT | P2FConst.PROTENAPI);
19             defProfile.setProperty("DocumentType", P2FConst.FLASH | P2FConst.HTML5);
20             p2f.invoke("ConvertFile", "E:/print2flashTest/test.doc");//方法調用
21             System.out.println("轉換成功!");
22         } catch (Exception e) {
23             System.out.println("轉換異常: " + e.toString());
24         } finally {
25             ComThread.Release();
26         }
27     }
28 }

  注意:這里涉及到java應用調用windows的COM組件,需要用到jacob,沒有的同學,可以用LZ提供的鏈接地址下載(文章最后會一起附上)。

  1)將jacob.jar build path。

  2)將jacob-1.16-M1-x64.dll(根據自己系統情況選擇)復制到jre/bin目錄(如果沒有該dll,會拋出找不到ComThread類異常)

  接下來LZ准備一個test.doc,來進行測試:

  

 

   test.docx.swf即為生成的flash文件,可嵌入到你需要的網頁中。

 四、.NET操作API


 

  .NET的操作相對來說就簡單得多了,LZ這里也是只做一個簡單的win32控制台演示:

  1)首先新建win32控制台應用程序,增加程序集Interop.Print2Flash4.dll。

  2)在Proogram.cs中寫具體業務邏輯:  

 1 using System;
 2 using System.Collections.Generic;
 3 using System.IO;
 4 using System.Linq;
 5 using System.Text;
 6 
 7 namespace Test
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             string fs_filename = System.AppDomain.CurrentDomain.BaseDirectory()+"/print2flashTest/test.docx";
14             string fs_convertedfilename = System.AppDomain.CurrentDomain.BaseDirectory()+"/print2flashTest/swf/test.swf";
15             Print2Flash4.Server2 p2fServer = new Print2Flash4.Server2();//創建print2flash對象
16             //設置參數值,可以參考官網SDK文檔          
17             p2fServer.ConvertFile(fs_filename, fs_convertedfilename, null, null, null);
18         }
19     }
20 }

  運行結果與java一樣。官網SDK還提供了ASP、PHP等腳本語言的操作API,有情趣的同學可以自己嘗試一下。

  

五、總結


  print2flash這款軟件還是不錯的,轉換后的效果比較清晰。運用范圍差不多就是內容管理系統、文章管理等附件的預覽,當然也可以用來控制游客用戶不允許文字復制等等。最后附上本文LZ所用到的源代碼,補丁,附件的下載地址:

  源代碼:https://github.com/LJunChina/JavaResource/tree/master/print2flash

  print2flash4補丁:http://download.csdn.net/detail/qq503665965/9860438

  jacob:http://download.csdn.net/detail/qq503665965/9860441

  SDK:http://download.csdn.net/detail/qq503665965/9860435

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM