将word、excel、ppt、html、txt转换成图片

         写这篇文章是因为在做项目的时候,需求里面提到了这么一个功能,android下面实现附件查看、下载、在线阅览的功能。对于下载没什么好说的。在线阅览是指将各种类型的附件转换成图片,然后手机在线打开图片,从而来实现阅览的效果。

          分享一下我的实现方式:首先利用openoffice将各种类型的文档转换成pdf,然后再利用imagsio将pdf转成图片。

          那么我们下面谈一下如何处理:

                去哪里下载openoffice?

                openoffice的下载地址你可以通过百度搜索openoffice下载,就就直接下载到。

                安装完成以后怎么用呢?

                安装完成以后找到你的安装目录,打开目录下面的program文件夹。该文件夹里面包含一个soffice.exe文件。当你进入这个目录以后,按住shift然后右击在此处打开命令提示符,然后输入命令:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 然后回车就ok了。这样就会启动openoffice的8100端口。

               项目中如何运用openoffice?

               首先你要准备好jar包。

                 commons-io-1.4.jar

                 icepdf-core.jar
                 jodconverter-2.2.2.jar
                 ridl-3.0.1.jar
                 slf4j-api-1.5.8.jar
                 slf4j-jdk14-1.5.6.jar
                 unoil-3.0.1.jar

               示例代码如下:

   public static void doc2Pdf(String docPath, String pdfPath) throws ConnectException {
                           File inputFile = new File(docPath);//预转文件
                           File outputFile = new File(pdfPath);//pdf文件
                           OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
                           connection.connect();//建立连接
                           DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
                           DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry();   
                           DocumentFormat txt = formatReg.getFormatByFileExtension("odt") ;//设定文件格式
                           DocumentFormat pdf = formatReg.getFormatByFileExtension("pdf") ;//设定文件格式
                           converter.convert(inputFile, txt, outputFile, pdf);//文件转换
                           connection.disconnect();//关闭连接
                  }


                如何将pdf转换成图片?

                 示例代码如下:

              

   /**
     * 将pdf转换成图片
     *
     * @param pdfPath
     * @param imagePath
     * @return 返回转换后图片的名字
     * @throws Exception
     */
    public static List<String> pdf2Imgs(String pdfPath, String imgDirPath) throws Exception {
        Document document = new Document();
        document.setFile(pdfPath);

        float scale = 5f;//放大倍数
        float rotation = 0f;//旋转度数

        List<String> imgNames = new ArrayList<String>();
        int pageNum = document.getNumberOfPages();
        File imgDir = new File(imgDirPath);
        if (!imgDir.exists()) {
            imgDir.mkdirs();
        }
        for (int i = 0; i < pageNum; i++) {
            BufferedImage image = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN,
                    Page.BOUNDARY_CROPBOX, rotation, scale);
            RenderedImage rendImage = image;
            try {
                String filePath = imgDirPath + File.separator + i + ".jpg";
                File file = new File(filePath);
                ImageIO.write(rendImage, "jpg", file);
                imgNames.add(FilenameUtils.getName(filePath));
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
            image.flush();
        }
        document.dispose();
        return imgNames;
    }
         我只说一下项目里面的这两个 scale、rotation。

        这两个参数的含义:

        scale:是指再转成成图片以后对图片的放大倍数,它影响字体清晰度。但是这个参数不能太大,如文件特别大的时候就会OOM的。这个参数要根据自己的项目来定,我建议在1~2之间。我测试在5.5的时候就直接oom了,我的电脑配置是i3 6G内存。

        rotation:是指的旋转的度数。0就是默认不旋转,当然还有360n。。

        如何将任意类型文件转成图片类型?

       代码如下:

 public static void doc2Imags(String docPath, String imgDirPath){
    	String pdfPath =String.format("%s%s.pdf",  FilenameUtils.getFullPath(docPath), FilenameUtils.getBaseName(docPath));
    	try {
			doc2Pdf(docPath, pdfPath);
			pdf2Imgs(pdfPath, imgDirPath);
			File pdf =  new File(pdfPath);
			if(pdf.isFile()){
				pdf.delete();
			}

		} catch (ConnectException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
    }
        源代码从哪里下载?

         http://download.csdn.net/download/woaixinxin123/6332321

                                                                                                                                                                                   本人web、android开发 、qq群255825960

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值