您的位置:首页 > 编程语言 > Java开发

java将pdf,word,excel转成图片

2017-03-16 15:38 615 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: