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



    原文作者:Nuohy
    原文地址: https://blog.csdn.net/qq_27063119/article/details/62424437
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞