如何实现仿百度文库和截取PDF文档图片

今天在网上看到一个关于pdf在线阅读系统实现思路,突发的对这个特别有兴趣,所以就在网上东搜搜,西找找的,查找了一些资料。发现实现这个功能需要这些第三方插件。

      1. OpenOffice,jodconverter   用于转换 doc,ppt,txt..至pdf格式文件

      2.SWFTools 用与将pdf文件转换成swf文件,主要用到SWFTools里面的pdf2swf.exe这个工具

      3.FlexPaper 用于在浏览器中显示所转换得到的swf文件,用这个显示效果比较好。

     一。下载安装OpenOffice,这个可以直接在SUN官网上下载,安装好后,需要启动OpenOffice服务,启动过程是:启动命令界面,转到OpenOffice安装目录下的program目录下,

             输入“soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard”回车即可启动OpenOffice服务,然后下载jodconverter  ,将jar包导入。

下面是实现转换成pdf的代码

 try {  
 File inputFile = new File("D:\\1.doc");  
 File outputFile = new File("D:\\11.pdf");  
 OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);  
 connection.connect(); 
  DocumentConverter converter = new OpenOfficeDocumentConverter(connection); 
  converter.convert(inputFile, outputFile); 
  connection.disconnect(); 
  } catch (ConnectException e) {  
 // TODO Auto-generated catch block  
 e.printStackTrace(); }
 二。下载 SWFTools 工具包,利用Process pro = Runtime.getRuntime().exec("pdf2swf -11.pdf -o 111.swf");这样就可以转换pdf文件为swf文件了。
 三。下载FlexPaper,用户显示swf文件显示代码如下
 <</SPAN>script type="text/javascript" src="js/swfobject/swfobject.js"></</SPAN>script>  <</SPAN>script type="text/javascript">  
  var swfVersionStr = "10.0.0";  
  var xiSwfUrlStr = "playerProductInstall.swf";  
 var flashvars = {  
 SwfFile : escape("111.swf"),  
 Scale : 0.6,  
 ZoomTransition : "easeOut",  
 ZoomTime : 0.5,  
 ZoomInterval : 0.1,  
 FitPageOnLoad : false,  
 FitWidthOnLoad : true,  
 PrintEnabled : true,  
 FullScreenAsMaxWindow : false,  
 ProgressiveLoading : true,  
 PrintToolsVisible : true,  
 ViewModeToolsVisible : true,  
 ZoomToolsVisible : true,  
 FullScreenVisible : true,  
 NavToolsVisible : true,  
 CursorToolsVisible : true,  
 SearchToolsVisible : true,  
 localeChain: "zh_CN"  
 };    var params = {  }  
 params.quality = "high";  
 params.bgcolor = "#ffffff";  
 params.allowscriptaccess = "sameDomain";  
 params.allowfullscreen = "true";  
  var attributes = {};  
 attributes.id = "FlexPaperViewer";  
 attributes.name = "FlexPaperViewer";  
 swfobject.embedSWF(  
  "FlexPaperViewer.swf", "flashContent",  
  "780", "650",  
  swfVersionStr, xiSwfUrlStr,  
 flashvars, params, attributes);  
 swfobject.createCSS("#flashContent", "display:block;text-align:left;");  
  </</SPAN>script>  
  <</SPAN>div id="flashContent"> </</SPAN>div>  
至此就可以顺利显示用户上传的doc文件或ppt文件等等。
 
------------------完-------------------

在先文档浏览器,像豆丁那样的,每篇文章都会有个缩略图,我就很好奇它那个缩略图是怎么弄出来的,难道是人工直接剪切出来(这肯定是荒谬的)。所以就借助百度和谷歌。搜索到了截取图片的插件,就是PDFBOX,目前版本是1.6

    下面是实现代码:

 1     try {  
 2 PDDocument doc = PDDocument.load("D:\\1.pdf");// 待获取图片的pdf文件 3  
 int pageCount = doc.getNumberOfPages();  
 4 System.out.println(pageCount); 5 6 System.out.println("开始获取图片。。。。");  
 7 List pages = doc.getDocumentCatalog().getAllPages();   
8 for (int i = 0; i < pages.size(); i++) {   
9 PDPage page = pages.get(i);  
10 BufferedImage image = page.convertToImage();  
11 Iterator iter = ImageIO.getImageWritersBySuffix("JPG");  
12 ImageWriter writer = iter.next();  
13 File outFile = new File("D:\\pdfImage\" + i + ".jpg");// 保存图片的  
14 FileOutputStream out = new FileOutputStream(outFile);  
15 ImageOutputStream outImage = ImageIO.createImageOutputStream(out);  
16 writer.setOutput(outImage);  
17 writer.write(new IIOImage(image, null, null));  
18 }  
19 doc.close();  
20 System.out.println("获取图片结束!");  
21 } catch (IOException e) {  
22 e.printStackTrace();  
23 }

 三、Java Servlet实现文件上传

上传Servlet的实现代码

 1 public void doGet(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3  
 4 String id = null;   
5 Affiche affiche = new Affiche();//自定义的一个简单javabean   
6 boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
// 判断提交的表单是不是普通表单,不是的话就进行上传   
7 if (isMultipart) {// 不是普通表单的话就进行上传   
8 FileItemFactory factory = new DiskFileItemFactory(); 
// 固定用法,创建一个FileItemFactory对象  
 9 ServletFileUpload upload = new ServletFileUpload(factory); 
// 固定用法,创建一个ServletFileUpload对象  
10 Iterator items;// 定义一个保存所有表单数据的集合  
11 try {  
12 items = upload.parseRequest(request).iterator();// 将表单数据全部赋值给items  
13 while (items.hasNext()) {// while循环迭代items,得到所有的表单数据  
14 FileItem item = items.next();  
15 if (!item.isFormField()) {// 判断此表单数据是否是file类型没事的话 就进行上传  
16 String name = item.getName();// 得到file文件的名字  
17 String fileName = name.substring(name.lastIndexOf('\\') + 1, name.length());  
18 fileName = System.currentTimeMillis() + "_" + fileName; 
// 生成保存file的文件名,利用当前时间的毫秒值加上源文件的后缀名  
19 String path = request.getSession().getServletContext().getRealPath("upload")  
20 + File.separatorChar + fileName;// 生成保存该文件的路径名  
21 System.out.println(path);  
22 File uploadedFile = new File(path);  
23 item.write(uploadedFile);// 保存文件  
24 affiche.setAfFilepath(path);  
25 } else { 
// 如果不是file类型的表单,那么就进行简单的赋值操作,注意这里不能再简单的用reqeuest.getParameter("")得到页面传递的表单数据,因为全部封装到items这个集合了  
26 if ("id".equals(item.getFieldName())) { //获取非上传参数  
27 id = item.getString("gb2312");  
28 }  
29 if ("time".equals(item.getFieldName())) {//获取非上传参数  
30  
31 affiche.setAfEnabletime(parseDate(item.getString("gb2312")));  
32 }  
33 if ("title".equals(item.getFieldName())) {//获取非上传参数  
34  
35 affiche.setAfTitle(item.getString("gb2312"));  
36 }  
37 if ("content".equals(item.getFieldName())) {//获取非上传参数  
38  
39 affiche.setAfContent(item.getString("gb2312"));  
40 }  
41 }  
42 }  
43 } catch (Exception e) {  
44 e.printStackTrace();  
45 }  
46 }  
48 } 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值