源码分享!!!world文档转换为JPG图片

http://bbs.csdn.net/topics/390055515

——————————————————————————————————————————————————

基本思路是:先将world转换为pdf,,在将pdf转换为JPG 。。然后清空缓存,,删除PDF文件!!

WordToPDF1.java

package test;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class WordToPDF1 {
    public static void wordToPDF(String docfile, String toFile,int type) {    

        ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word    

        try {    

            app.setProperty("Visible", new Variant(false));
          //设置word程序非可视化运行

            Dispatch docs = app.getProperty("Documents").toDispatch();   

            Dispatch doc = Dispatch.invoke(
                    docs,
                    "Open",
                    Dispatch.Method,
                    new Object[] { docfile, new Variant(false),
                            new Variant(true) }, new int[1]).toDispatch();  

            //new Variant(type),这里面的type的决定另存为什么类型的文件
            Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
                    toFile, new Variant(type) }, new int[1]);
            //作为PDF格式保存文件

            Variant f = new Variant(false);   

            System.out.println(toFile+".pdf");

            //关闭文件
            Dispatch.call(doc, "Close", f);  

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //退出word程序
            app.invoke("Quit", new Variant[] {});
        }
    }    

    public static void main(String[] args) {
        //源文件全路径
        //String docfile ="D:\\1.doc";
        String docfile ="D:\\2.docx";
       // String docfile ="D:\\ceshi.doc";
        //for (int i = 0; i < 18; i++) {
            //些路径test为实际存在的目录,s后面为要另存为的文件名
            String toFile="d:\\"+1222;
            wordToPDF(docfile, toFile,17);
            //17 表示格式 为PDF
       // }
    }
}  

PdfToJpg.java

package test;

import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.lang.reflect.Method;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.security.AccessController;
import java.security.PrivilegedAction;

import javax.swing.SwingUtilities;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;

public class PdfToJpg {
    public static void setup() throws IOException {

        // load a pdf from a byte buffer
        File file = new File("d://1.pdf");
        RandomAccessFile raf = new RandomAccessFile(file, "r");
        FileChannel channel = raf.getChannel();
        ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel
                .size());
        PDFFile pdffile = new PDFFile(buf);

        System.out.println("页数: " + pdffile.getNumPages());

        BufferedImage tag = null;

        //将图片放入frame中
        //JFrame frame =null;
        //frame的名称
        // frame = new JFrame("PDF Test");
        //JLabel label = null;
        //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        for (int i = 1; i <= pdffile.getNumPages(); i++) {
            // draw the first page to an image
            PDFPage page = pdffile.getPage(i);
            // get the width and height for the doc at the default zoom
            Rectangle rect = new Rectangle(0, 0, (int) page.getBBox()
                    .getWidth(), (int) page.getBBox().getHeight());
            // generate the image
            Image img = page.getImage(rect.width, rect.height, // width &
                    // height
                    rect, // clip rect
                    null, // null for the ImageObserver
                    true, // fill background with white
                    true // block until drawing is done
                    );
            tag = new BufferedImage(rect.width, rect.height,
                    BufferedImage.TYPE_INT_RGB);

            // label = new JLabel(new ImageIcon(img));

            // System.out.println(label);

            tag.getGraphics().drawImage(img, 0, 0, rect.width, rect.height,
                    null);
            FileOutputStream out = new FileOutputStream("d://picture//gao//"
                    + i + ".jpg"); // 输出到文件流

            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            encoder.encode(tag); // JPEG编码
            out.close();

            //   unmap(buf);
            System.out.println("PDF文件转换JPG文件成功");
            //将label添加给frame
            // frame.add(label);
            // System.out.println(frame);

        }

        channel.close();

        raf.close();

        unmap(buf);//如果要在转图片之后删除pdf,就必须要这个关闭流和清空缓冲的方法
        // show the image in a frame
        //frame.pack();
        // frame.setVisible(true);
    }

    /**

     * 清空缓冲

     * @param buffer

     */

    public static void unmap(final Object buffer) {

        AccessController.doPrivileged(new PrivilegedAction() {

            public Object run() {

                try {

                    Method getCleanerMethod = buffer.getClass().getMethod(
                            "cleaner", new Class[0]);

                    getCleanerMethod.setAccessible(true);

                    sun.misc.Cleaner cleaner = (sun.misc.Cleaner) getCleanerMethod
                            .invoke(buffer, new Object[0]);

                    cleaner.clean();

                } catch (Exception e) {

                    e.printStackTrace();

                }

                System.out.println("清空缓冲成功");

                return null;

            }

        });

    }

    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                try {
                    PdfToJpg.setup();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        });
    }
}
时间: 2024-12-20 00:54:51

源码分享!!!world文档转换为JPG图片的相关文章

Android记录17-sdk更新、Eclipse下查看源码、chm文档提供等干货

Android记录17-sdk更新.Eclipse下查看源码.chm文档提供等干货 本篇博客分享一些Android开发者提高开发效率的一些干货,之从Google被和谐了之后,Android开发者可谓痛不欲生,只能通过翻墙的方式去查看官网,sdk更新不了,无法下载源码等问题就出现了,作为一位有追求的Android开发者,不可能只满足于使用sdk这种初级技能了,提高开发效率和代码质量是每位开发者应该去追求的,下面小巫整理总结了一些解决方案供各位参考,让Android开发变得高大上一些. sdk更新

Python Django框架实现商城项目源码加设计文档和注释

Python Django框架实现商城项目源码加设计文档和注释 链接:https://pan.baidu.com/s/1yN2iBgx3zmpTkoY8u1LWRg 提取码:lfsx 非常完整的django项目源码,分享给撸友们,不管是学习还是深造,都是可以学习借鉴的!! 原文地址:https://www.cnblogs.com/zyxlovesjy/p/12115491.html

手机游戏闯三国(乱世之刃)客户端+ 服务端源码 + 完整策划文档

闯三国(乱世之刃)客户端源码 + 服务端源码 + 完整策划文档) 乱世之刃源代码下载 <乱世之刃2>即将在近期上线了,为了让玩家感触最顺利的游戏体会,游戏商已做好了全部的准备,11月20日进行封测.[2] 游戏称号 浊世之刃 游戏种类 横版格斗游戏 游戏平台 iOS.Android 开发商 Xiamen Yidou 发行时刻 2012-11-15 适宜年纪 12岁以上 语    言 中文 安卓iOS游戏源码下载 目录 1 游戏介绍 2 游戏简介 ? 游戏布景 ? IOS有关信息 ? 游戏特征

在MyEclipse显示struts2源码和doc文档及自动完成功能

分类: struts2 2010-01-07 16:34 1498人阅读 评论(1) 收藏 举报 myeclipsestruts文档xmlfileurl 在MyEclipse显示struts2源码和doc文档及自动完成功能 在MyEclipse中显示struts的源码 -------右键点击/webAppName/WebRoot/WEB-INF/lib/struts2-core-2.1.8.1.jar -------propertes -------Java Source Attachment

eclipse导入java和android sdk源码,帮助文档

eclipse导入java和android sdk源码,帮助文档 http://blog.csdn.net/ashelyhss/article/details/37993261 JavaDoc集成到Eclipse的帮助中 http://blog.chinaunix.net/uid-90129-id-132837.html android帮助文档打开慢的三种解决方法 set path=C:\Program Files\Git\bin; find . -name "*.html"|xarg

【C#附源码】数据库文档生成工具支持(Excel+Html)

[2015] 很多时候,我们在生成数据库文档时,使用某些工具,可效果总不理想,不是内容不详细,就是表现效果一般般.很多还是word.html的.看着真是别扭.本人习惯用Excel,所以闲暇时,就简单的编写了数据库文档生成工具,供大家交流学习之用,与程序员共勉.     该工具为C#控制台,以NPOI为基础,操作Excel.简单方便,简单配置.两次回车,OK!即可生成清晰的数据库文档.另外,支持生成HTML文档.源码大小7MB,OS上传不了,放到百度云盘里了:http://pan.baidu.co

MyEclipse查看Struts2源码及Javadoc文档

一.查看Struts2源码 1.Referenced Libraries >struts2-core-2.1.6.jar>右击>properties. 2.Java Source Attachment >External Folder>(选择架包存放目录)/struts-2.1.6/src/core/src/main/java>OK. 3.双击打开struts2-core-2.1.6.jar根目录下的class文件你就可以看到Struts2的源码了. 二.Javadoc

ASP.NET大型企业OA平台100%源码+所有文档说明

这个OA系统是我之前从朋友那里花了不少RMB买来的,之后我修改了一些Bug和界面等.系统采用的是ASP.NET框架,后台全部是用C#语音写的,数据库采用的是SQL Server.我主要是想学习学习它的整体架构和一些功能模块的实现方法.如果大家有需求的话,可以留言后直接支付宝或者微信转账给我,只需30元,我会把所以文档说明和100%源码给大家,文档包括:OA介绍.OA使用手册.目录文件说明.数据库存储过程.系统解决方案,系统数据库设计等等(文章底部扫一扫二维码就可以转账). 不会使用的朋友可以留言

PowerSaver驱动源码分析技术文档

目  录 一.简述 1 二.操作环境 2 三.主要原理及关键结构体.函数分析 2 cpufreq_policy结构体 2 cpufreq_frequency_table结构体 4 eps_cpu_data结构体 4 四.具体函数分析 6 eps_cpu_init分析 6 eps_cpu_exit分析 7 eps_verify分析 7 eps_target分析 7 eps_set_state分析 8 eps_get分析 8 参考文献 8 一.简述 目前在做编写适配兆芯Nano CPU节能驱动模块,