zoukankan      html  css  js  c++  java
  • 源码分享!!!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();
                    }
                }
            });
        }
    }
  • 相关阅读:
    Linux中的文件类型
    Verilog定义变量类型为signed的几种情况
    verilog中>>>和>>的区别
    Linux中的快捷键
    Linux中的常用命令
    CVS版本控制
    [GitHub] fatal: unable to access 'https://github.com/': Failed to connect to github.com port 443: Operation timed out
    如何在手机(安卓)中搜索照片
    JS+CSS+HTML 前端开发(二)
    JS+CSS+HTML 前端开发(一)
  • 原文地址:https://www.cnblogs.com/cuizhf/p/4273461.html
Copyright © 2011-2022 走看看