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