java将pdf,word,excel转成图片

java将pdf,word,excel转成图片
一.说明
     pdf转化成图片有几种方式,这里介绍两种,一种通过PDFRenderer的支持转化为图片,这种方式最终没有采取,实际使用中发现高版本的pdf就不能进行转化,另一种是通过icepdf的支持转化的,实际使用过程中,效果良好,不过由于某些字体不支持,可能会出现乱码现象。

PDFRenderer需要的jar:  
	PDFRenderer.jar

     icepdf需要的jar:
	icepdf-core.jar
	icepdf-viewer.jar

    word, excel直接转化为图片,查阅了很多资料貌似做不到,所以后来就使用了间接的方式,将word,excel转化成pdf,再将pdf转化成图片。这里word,excel转化成pdf借助openoffice。
     需要的jar: 
	commons-cli-1.0.jar
	commons-io-1.3.1.jar
	jodconverter-2.2.1.jar
	jodconverter-cli-2.2.1.jar
	juh-2.3.0.jar
	jurt-2.3.0.jar
	ridl-2.3.0.jar
	unoil-2.3.0.jar
	xstream-1.2.2.jar

将word,excel转化为pdf,需要利用openoffice, 需要安装 OpenOffice_4.0.1_Win_x86_install_zh-CN.exe  软件。

    废话不多说,直接上代码吧。

二.代码

1.pdf转图片(支持加水印)

package cn.nuohy.imgutil;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;

/**
 * 将pdf 转化成 图片
 * @author yangnuo
 * 创建时间:2017年3月16日
 */
public class PDFToImage {
	
    // 水印透明度
    private static float alpha = 0.5f;
    // 水印横向位置
    private static int positionWidth = 150;
    // 水印纵向位置
    private static int positionHeight = 300;
    // 水印文字字体
    private static Font font = new Font("仿宋", Font.BOLD, 26);
    // 水印文字颜色
    private static Color color = Color.GRAY;
	
	

    /**
     * 生成pdf的缩略图
     * @param zoom  缩略图显示倍数,1表示不缩放,0.5表示缩小到50%
     * @param inputFile        需要生成缩略图的书籍的完整路径
     * @param outputFile    生成缩略图的放置路径
     */
    public List<String> pdftoIamge(float zoom,String inputFile, String outputFile) {
    	List<String> list = null;
    	Document document = null;
    	try {
    		list = new ArrayList(0);
    		document = new Document();
			document.setFile(inputFile);
			float rotation = 0;
			int maxPages = document.getPageTree().getNumberOfPages();
			for (int i = 0; i < maxPages; i++) {
				BufferedImage bfimage = (BufferedImage) document.getPageImage(i,  GraphicsRenderingHints.SCREEN,Page.BOUNDARY_CROPBOX, rotation, zoom);
				
				bfimage = setGraphics(bfimage);
				
				RenderedImage rendImage = bfimage;
				ImageIO.write(rendImage, "jpg", new File(outputFile+i+".jpg"));
				bfimage.flush();
				list.add(outputFile+i+".jpg");
			}
		}catch (Exception e) {
			e.printStackTrace();
		}
    	
    	if(document!=null){
    		document.dispose();
    	}
    	return list;
    }
	
    
    
    public BufferedImage setGraphics(BufferedImage bfimage){
    	Graphics2D g = bfimage.createGraphics();
		g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        // 5、设置水印文字颜色
        g.setColor(color);
        // 6、设置水印文字Font
        g.setFont(font);
        // 7、设置水印文字透明度
        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));
        //设置旋转
        g.rotate(-Math.PI/6);
        g.drawString("落花雨科技", 0, (bfimage.getHeight()/2)*1);
        // 9、释放资源
        g.dispose();
        return bfimage;
    }
	
}

pdf转图片 测试方法:
package cn.nuohy;

import java.io.File;
import cn.nuohy.imgutil.PDFToImage;
import cn.nuohy.officeutil.OfficeToPDF;

/**
 * 使用  icepdf 进行转化
 * @author yangnuo
 * 创建时间:2017年3月16日
 */
public class Test3 {
public static void main(String[] args) {
   //测试 pdf 生成 图片 (加水印)
  PDFToImage pdf = new PDFToImage();
  pdf.pdftoIamge(0.9f,"E:/BD2017-03-16001-XDL-0316-1.pdf", "C:/Users/admin/Desktop/ss/");
 }
}


2. office(word,excel均支持)转pdf
package cn.nuohy.officeutil;

import java.io.File;

import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;


/**
 * word 转化成 pdf
 * @author yangnuo
 * 创建时间:2017年3月16日
 */
public class OfficeToPDF {
	
	public void docToPdf(File inputFile, File outputFile){
		//启动服务
		String OpenOffice_HOME = "C:/Program Files (x86)/OpenOffice 4";// 这里是OpenOffice的安装目录
		if(OpenOffice_HOME.charAt(OpenOffice_HOME.length()-1)!='/'){
			OpenOffice_HOME+="/";
		}
	   Process pro = null;
	   OpenOfficeConnection connection = null;
	    // 启动OpenOffice的服务   
       String command = OpenOffice_HOME + "program/soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
	    // connect to an OpenOffice.org instance running on port 8100
	   
	    try{
	    	pro = Runtime.getRuntime().exec(command);
	    	connection = new SocketOpenOfficeConnection(8100);
	    	connection.connect();
	    	
	    	 // convert
		    DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
		    System.out.println(inputFile+"="+outputFile);
		    
		    converter.convert(inputFile, outputFile);
	    }catch(Exception ex){
	    	System.out.println("程序出错了");
	    	ex.printStackTrace();
	    	
	    }finally{
		    // close the connection
	    	if(connection!=null){
	    		connection.disconnect();
	    		connection = null;
	    	}
	    	pro.destroy();
	    }
	       System.out.println("生成"+outputFile.getName());
	}

	
	//生产pdf线程
	static class TestThread extends java.lang.Thread{
		private File inputFile;
		private File outputFile;
		
		public void run(){
			OfficeToPDF t = new OfficeToPDF();
			t.docToPdf(inputFile, outputFile);
			System.out.println(outputFile.getName()+"文件已生成");
		}

		public void setInputFile(File inputFile) {
			this.inputFile = inputFile;
		}

		public void setOutputFile(File outputFile) {
			this.outputFile = outputFile;
		}
	}
	

}

测试office 转化成 pdf
package cn.nuohy;

import java.io.File;
import cn.nuohy.imgutil.PDFToImage;
import cn.nuohy.officeutil.OfficeToPDF;

/**
 * 使用  icepdf 进行转化
 * @author yangnuo
 * 创建时间:2017年3月16日
 */
public class Test3 {
  public static void main(String[] args) {
	//word 转 pdf
	OfficeToPDF wordToPDF = new OfficeToPDF();
	wordToPDF.docToPdf(new File("E:/logback.docx"), new File("C:/Users/admin/Desktop/ss/logback.pdf"));
	
	//excel 转 pdf
	wordToPDF.docToPdf(new File("E:/interface.xlsx"), new File("C:/Users/admin/Desktop/ss/interface.pdf"));

  }

}



测试word转pdf

package cn.nuohy;


import java.io.File;

import cn.nuohy.imgutil.PDFToImage;
import cn.nuohy.officeutil.OfficeToPDF;

/**
 * 使用  icepdf 进行转化
 * @author yangnuo
 * 创建时间:2017年3月16日
 */
public class Test3 {
	public static void main(String[] args) {
		//word 转 pdf
		OfficeToPDF wordToPDF = new OfficeToPDF();
		
		String newpdfpath = "C:/Users/admin/Desktop/ss/interface.pdf";
		wordToPDF.docToPdf(new File("E:/interface.xlsx"), new File(newpdfpath));
		
		PDFToImage pdf = new PDFToImage();
		pdf.pdftoIamge(0.9f,newpdfpath, "C:/Users/admin/Desktop/ss/");
	}

}



openoffice链接:  http://pan.baidu.com/share/link?shareid=246879221&uk=2268093963&fid=149886663887611

源码下载地址:  http://download.csdn.net/detail/qq_27063119/9783401

支持office2007以后版本转化: http://download.csdn.net/detail/qq_27063119/9785265



  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值