1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java上传图片并生成缩略图_java 上传文件-生成文件首页缩略图 生成pdf 抓取图片...

java上传图片并生成缩略图_java 上传文件-生成文件首页缩略图 生成pdf 抓取图片...

时间:2024-02-03 15:48:06

相关推荐

java上传图片并生成缩略图_java 上传文件-生成文件首页缩略图  生成pdf 抓取图片...

方法:1、文件转换成pdf(采用openoffice或者jacob)

2、抓取pdf首页图

第一步:采用jacob:

a、下载jacob 注意区分32位,64位,否则不能用

将dll文件放在javabin目录下即可

jar包引入项目

b、转换pdf

package cn.bnsr.edu_yun.util;

import java.io.File;

import java.io.IOException;

import com.jacob.activeX.ActiveXComponent;

import .ComThread;

import .Dispatch;

import .Variant;

public class TestUtil {

static final int wdFormatPDF = 17;// PDF 格式

public void wordToPDF(String sfileName,String toFileName){

System.out.println("启动Word...");

long start = System.currentTimeMillis();

ActiveXComponent app = null;

Dispatch doc = null;

try {

app = new ActiveXComponent("Word.Application");

app.setProperty("Visible", new Variant(false));

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

// doc = Dispatch.call(docs, "Open" , sourceFile).toDispatch();

doc = Dispatch.invoke(docs,"Open",Dispatch.Method,new Object[] {

sfileName, new Variant(false),new Variant(true) }, new int[1]).toDispatch();

System.out.println("打开文档..." + sfileName);

System.out.println("转换文档到PDF..." + toFileName);

File tofile = new File(toFileName);

if (tofile.exists()) {

tofile.delete();

}

// Dispatch.call(doc, "SaveAs", destFile, 17);

Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {

toFileName, new Variant(17) }, new int[1]);

long end = System.currentTimeMillis();

System.out.println("转换完成..用时:" + (end - start) + "ms.");

} catch (Exception e) {

e.printStackTrace();

System.out.println("========Error:文档转换失败:" + e.getMessage());

} finally {

Dispatch.call(doc,"Close",false);

System.out.println("关闭文档");

if (app != null)

app.invoke("Quit", new Variant[] {});

}

//如果没有这句话,winword.exe进程将不会关闭

ComThread.Release();

}

public static void main(String[] args) {

TestUtil d = new TestUtil();

d.wordToPDF("D:\\work\\1111.docx", "d:\\work\\1111.pdf");

}

}

第二步:抓取首页图:

package cn.bnsr.edu_yun.util;

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 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 PdfImageUtil {

// 将PDF格式的文件转换为JPG格式的文件

public static void pdfToJPG(String inputFile)throws IOException {

// load a pdf from a byte buffer

File file = new File(inputFile);

RandomAccessFile raf = new RandomAccessFile(file, "r");

FileChannel channel = raf.getChannel();

//这句代码通道建立了map映射,如果要删除file那么得接触映射

ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0,

channel.size());

PDFFile pdffile = new PDFFile(buf);

int totalpage =pdffile.getNumPages();

for (int i = 1; i <= totalpage; i++) {

if (i == 1) {

// draw the first page to an image

// 以图片的形式来描绘首页

PDFPage page = pdffile.getPage(i);

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

);

BufferedImage tag = new BufferedImage(rect.width, rect.height,

BufferedImage.TYPE_INT_RGB);

tag.getGraphics().drawImage(img.getScaledInstance(rect.width, rect.height, Image.SCALE_SMOOTH), 0, 0, rect.width, rect.height,null);

FileOutputStream out = new FileOutputStream( "D:\\work\\s111"+ ".jpg"); // 输出到文件流

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

encoder.encode(tag); // JPEG编码

// 关闭输出流

out.close();

break;

}

}

buf.clear();

channel.close();

raf.close();

unmap(buf);

file.delete();

}

//解除map映射

public static void unmap(final Object buffer) {

AccessController.doPrivileged(new PrivilegedAction(){

@Override

public T 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();

}

return null;

}

});

}

}

第三步、搞定,加入自己的业务逻辑,有问题欢迎提问。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。