flash2print文档在线预览应用(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引入:
public class P2FConst
{
// 枚举常量
public static final int MSEXCEL = 0x00000001;
public static final int MSWORD = 0x00000002;
public static final int MSPOWERPOINT = 0x00000004;
public static final int ACROBAT = 0x00000008; public static final int JPEG = 1;
public static final int PNG = 2; public static final int STRETCH = 1;
public static final int TILE = 2; public static final int INTLOGO = 0x00000001;
public static final int INTDRAG = 0x00000002;
public static final int INTSELTEXT = 0x00000004;
public static final int INTZOOMSLIDER = 0x00000008;
public static final int INTZOOMBOX = 0x00000010;
public static final int INTFITWIDTH = 0x00000020;
public static final int INTFITPAGE = 0x00000040;
public static final int INTPREVPAGE = 0x00000080;
public static final int INTGOTOPAGE = 0x00000100;
public static final int INTNEXTPAGE = 0x00000200;
public static final int INTSEARCHBOX = 0x00000400;
public static final int INTSEARCHBUT = 0x00000800;
public static final int INTROTATE = 0x00001000;
public static final int INTPRINT = 0x00002000;
public static final int INTNEWWIND = 0x00004000;
public static final int INTHELP = 0x00008000;
public static final int INTBACKBUTTON = 0x00030000;
public static final int INTBACKBUTTONAUTO = 0x00010000;
public static final int INTFORWARDBUTTON = 0x000C0000;
public static final int INTFORWARDBUTTONAUTO = 0x00040000;
public static final int INTFULLSCREEN = 0x00300000;
public static final int INTFULLSCREENAUTO = 0x00100000; // METADATAPORMAT enumeration constants
public static final int XML = 1;
public static final int TEXT = 2; // OUTPUTFORMAT enumeration constants
public static final int SINGLEFILE = 1;
public static final int SINGLEFILEPERPAGE = 2;
public static final int EXTVIEWER = 4; // PAPER_ORIENTATION enumeration constants
public static final int ORIENT_PORTRAIT = 1;
public static final int ORIENT_LANDSCAPE = 2; // PROTECTION_OPTION enumeration constants
public static final int PROTDISPRINT = 0x00000001;
public static final int PROTDISTEXTCOPY = 0x00000002;
public static final int PROTENAPI = 0x00000004; // ThreeStateFlag enumeration constants
public static final int TSF_NO = 0;
public static final int TSF_YES = 1;
public static final int TSF_AUTO = 2; // TOOLBARIMAGE enumeration constants
public static final int IMGLOGO = 1;
public static final int IMGDRAG = 2;
public static final int IMGSELTEXT = 3;
public static final int IMGZOOMRULER = 4;
public static final int IMGZOOMFOCUSNADLE = 5;
public static final int IMGZOOMNADLE = 6;
public static final int IMGFITWIDTH = 7;
public static final int IMGFITPAGE = 8;
public static final int IMGPREVPAGE = 9;
public static final int IMGNEXTPAGE = 10;
public static final int IMGSEARCHBUT = 11;
public static final int IMGROTATE = 12;
public static final int IMGPRINT = 13;
public static final int IMGNEWWIND = 14;
public static final int IMGHELP = 15;
public static final int IMGMORE = 16;
public static final int IMGTOOLBARBGR = 17;
public static final int IMGBACK = 18;
public static final int IMGFORWARD = 19;
public static final int IMGFULLSCREEN = 20;
public static final int IMGEXITFULLSCREEN = 21; // TEMPLATETYPE enumeration constants
public static final int TEMPLATE_CUSTOM = 1;
public static final int TEMPLATE_ACTIONSCRIPT2 = 2;
public static final int TEMPLATE_ACTIONSCRIPT3 = 3; // WATERMARKANCHOR enumeration constants
public static final int CENTER = 0;
public static final int LEFTCENTER = 1;
public static final int RIGHTCENTER = 2;
public static final int TOPCENTER = 16;
public static final int BOTTOMCENTER = 32;
public static final int LEFTTOP = 17;
public static final int RIGHTTOP = 18;
public static final int LEFTBOTTOM = 33;
public static final int RIGHTBOTTOM = 34; // COMPRESSION_METHOD enumeration constants
public static final int COMPRESSION_METHOD_ZLIB = 0;
public static final int COMPRESSION_METHOD_LZMA = 1; // DOCUMENT_TYPE Enumeration constants
public static final int FLASH = 1;
public static final int HTML5 = 2; // BROWSER_TYPE Enumeration public static final intants
public static final int INTERNET_EXPLORER = 1;
public static final int FIREFOX = 2;
public static final int CHROME = 4;
public static final int OPERA = 8;
public static final int SAFARI = 16; // POWERPOINT_PRINTOUTPUT Enumeration constants
public static final int POWERPOINT_PRINTOUTPUT_AUTO = 0;
public static final int POWERPOINT_PRINTOUTPUT_Slides = 1;
public static final int POWERPOINT_PRINTOUTPUT_TwoSlideHandouts = 2;
public static final int POWERPOINT_PRINTOUTPUT_ThreeSlideHandouts = 3;
public static final int POWERPOINT_PRINTOUTPUT_SixSlideHandouts = 4;
public static final int POWERPOINT_PRINTOUTPUT_NotesPages = 5;
public static final int POWERPOINT_PRINTOUTPUT_Outline = 6;
public static final int POWERPOINT_PRINTOUTPUT_BuildSlides = 7;
public static final int POWERPOINT_PRINTOUTPUT_FourSlideHandouts = 8;
public static final int POWERPOINT_PRINTOUTPUT_NineSlideHandouts = 9;
public static final int POWERPOINT_PRINTOUTPUT_OneSlideHandouts = 10;
}
开始转换Test.java类:
package print2flash; import java.io.IOException; import com.jacob.activeX.*;
import com.jacob.com.*; public class Test { public static void main(String[] args) throws IOException {
try {
ComThread.InitSTA();//com组件管理,用来初始化com线程,释放线程
ActiveXComponent p2f = new ActiveXComponent("Print2Flash4.Server");//创建print2flash的一个应用,调用print2flash服务
//设置属性值,可根据自己需求修改
ActiveXComponent defProfile = new ActiveXComponent(p2f.getProperty("DefaultProfile").toDispatch());
defProfile.setProperty("InterfaceOptions", P2FConst.INTLOGO | P2FConst.INTZOOMSLIDER | P2FConst.INTPREVPAGE
| P2FConst.INTGOTOPAGE | P2FConst.INTNEXTPAGE);
defProfile.setProperty("ProtectionOptions", P2FConst.PROTDISPRINT | P2FConst.PROTENAPI);
defProfile.setProperty("DocumentType", P2FConst.FLASH | P2FConst.HTML5);
p2f.invoke("ConvertFile", "E:/print2flashTest/test.doc");//方法调用
System.out.println("转换成功!");
} catch (Exception e) {
System.out.println("转换异常: " + e.toString());
} finally {
ComThread.Release();
}
}
}
注意:这里涉及到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中写具体业务逻辑:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text; namespace Test
{
class Program
{
static void Main(string[] args)
{
string fs_filename = System.AppDomain.CurrentDomain.BaseDirectory()+"/print2flashTest/test.docx";
string fs_convertedfilename = System.AppDomain.CurrentDomain.BaseDirectory()+"/print2flashTest/swf/test.swf";
Print2Flash4.Server2 p2fServer = new Print2Flash4.Server2();//创建print2flash对象
//设置参数值,可以参考官网SDK文档
p2fServer.ConvertFile(fs_filename, fs_convertedfilename, null, null, null);
}
}
}
运行结果与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
flash2print文档在线预览应用(java,.net)的更多相关文章
- Java+FlexPaper+swfTools仿百度文库文档在线预览系统设计与实现
笔者最近在给客户开发文档管理系统时,客户要求上传到管理系统的文档(包括ppt,word,excel,txt)只能预览不允许下载.笔者想到了百度文库和豆丁网,百度文库和豆丁网的在线预览都是利用flash ...
- Java+FlexPaper+swfTools 文档在线预览demo
1.概述 主要原理 1.通过第三方工具openoffice,将word.excel.ppt.txt等文件转换为pdf文件 2.通过swfTools将pdf文件转换成swf格式的文件 3.通过FlexP ...
- Java实现word文档在线预览,读取office文件
想要实现word或者其他office文件的在线预览,大部分都是用的两种方式,一种是使用openoffice转换之后再通过其他插件预览,还有一种方式就是通过POI读取内容然后预览. 一.使用openof ...
- java 实现word文档在线预览
一.准备工具 1.通过第三方工具openoffice,将word.excel.ppt.txt等文件转换为pdf文件 下载地址:http://www.openoffice.org/download/in ...
- Print2flash在.NET(C#)64位中的使用,即文档在线预览
转:http://www.cnblogs.com/flowwind/p/3411106.html Print2flash在.NET(C#)中的使用,即文档在线预览 office文档(word,ex ...
- asp.net如何实现word文档在线预览
原文:asp.net如何实现word文档在线预览 实现方式:office文档转html,再在浏览器里面在线浏览 1.首先引入com组件中office库,然后在程序集扩展中引入word的dll 2.将M ...
- 文档在线预览开源实现方案二:OpenOffice + pdf.js
文档在线预览的另一种实现方式采用的技术栈是OpenOffice + pdf.js, office文档转换为pdf的工作依然由OpenOffice的服务来完成,pdf生成后我们不再将其转换为其他文件而是 ...
- 文档在线预览开源实现方案一:OpenOffice + SwfTools + FlexPaper
在文档在线预览方面,项目组之前使用的是Microsoft office web apps, 由于该方案需要按照微软License付费,项目经理要我预研一个文档在线预览的开源实现方案.仔细钻入该需求发现 ...
- 最好用的js前端框架、组件、文档在线预览插件
这里收集的都是个人认为比较好的js框架.组件 js前端ui框架 此处列举出个人认为最好的几个框架(排序即排名),现在好点的框架商用都需要付费,以下几个也不例外,但是由于组件丰富,都可以作为企业应用的完 ...
随机推荐
- Java多机部署下的定时任务处理方案(mysql)
因为自己有csdn和博客园两个博客, 所以两边都会发一下. csdn地址: http://blog.csdn.net/u012881584/article/details/70194237 今天来说一 ...
- Java设计模式:生成器模式
问题的提出: 有些类很容易创建对象,直接调用其构造方法,例如Student student = new Student("1001","zhang",21); ...
- 本地yum服务搭建
1.准备linux ISO系统镜像文件 (例如:rhel-server-5.5-i386-dvd.iso) 2.linux虚拟机(centos 7 192.168.50.24 ),启动sshd服务 ...
- Unity Debug类
静态变量 developerConsoleVisible 报告是否开发控制台是可见的.开发控制台不能出现使用: isDebugBuild 在构建设置对话框中有一个叫做"发展构建"复 ...
- Extjs6(三)——用extjs6.0写一个简单页面
本文基于ext-6.0.0 一.关于border布局 在用ext做项目的过程中,最常用到的一种布局就是border布局,现在要写的这个简单页面也是运用border布局来做.border布局将页面分为五 ...
- R中基本统计图
一.条形图 1.安装包install.packages("vcd"); library(vcd);count<-table(Arthritis$Improved);#tabl ...
- 短路运算|字符串操作函数|内存mem操作函数
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- Python之路- 反射&定制自己的数据类型
一.isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 issubclass(sub, super)检查sub类是否是 super ...
- html常用的知识点以及混合框架
html中: <hr/> 在页面中创建水平线 例如: <p> p标签是定义段落 > alt 作为可预备可替换信息,在无法加载图片时显示文字信息 定义htm ...
- 重启mysql提示:The server quit without updating PID file问题的解决办法
今天因为需要开启事件调度器event_scheduler,所以修改了mysql的配置文件/etc/my.cnf 就因为配置多了个分号,导致一直启动失败,如下图所示: 然后去网上搜了帖子(MySQL提示 ...