码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-02-04 23:21:17      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

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();
                }
            }
        });
    }
}

 

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

标签:

原文地址:http://www.cnblogs.com/cuizhf/p/4273461.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!