package com.sinosoft.common.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.net.ConnectException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.Date;
import javax.imageio.ImageIO;
import com.artofsolving.jodconverter.DefaultDocumentFormatRegistry;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.DocumentFormat;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfPage;
import com.itextpdf.text.pdf.PdfWriter;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;
/**
* 调用本类需要提前启动openOffice服务
* soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
* @author zhaoxusheng
*/
public class OfficeUtil {
/**
* 文件类型常量定义
*/
private static final String OFFICE_FORMAT_DOCX = "DOCX";
private static final String OFFICE_FORMAT_DOC = "DOC";
private static final String OFFICE_FORMAT_XLS = "XLS";
private static final String OFFICE_FORMAT_XLSX = "XLSX";
private static final String OFFICE_FORMAT_PPT = "PPT";
private static final String OFFICE_FORMAT_PPTX = "PPTX";
private static final String OFFICE_FORMAT_PDF = "PDF";
/**
* 使Office2003-2013全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件
* @param inputFilePath
* 源文件路径,如:"e:/test.docx"
* @param outputFilePath
* 如果指定则按照指定方法,如果未指定(null)则按照源文件路径自动生成目标文件路径,如:"e:/test_docx.pdf"
* @return
* @throws ConnectException
* @throws FileNotFoundException
*/
public static boolean officeToPdf(String inputFilePath, String outputFilePath) throws ConnectException, FileNotFoundException {
boolean flag = false;
if((inputFilePath == null || inputFilePath.trim().length() == 0) ||
(outputFilePath == null || outputFilePath.trim().length() == 0) ||
(getFileExtension(inputFilePath) == null || getFileExtension(outputFilePath) == null)){
return flag;
}
long beginTime = new Date().getTime();
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
try{
connection.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
InputStream inputStream = new FileInputStream(inputFilePath);
OutputStream outputStream = new FileOutputStream(outputFilePath);
DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry();
DocumentFormat pdfFormat = formatReg.getFormatByFileExtension(getFileExtension(outputFilePath));
DocumentFormat srcFormat = formatReg.getFormatByFileExtension(getFileExtension(inputFilePath));
converter.convert(inputStream, srcFormat, outputStream, pdfFormat);
flag = true;
}finally {
if (connection != null) {
connection.disconnect();
connection = null;
}
}
long endTime = new Date().getTime();
System.out.println("文件转换耗时:[" + (endTime - beginTime) + "]ms");
return flag;
}
/**
* 获取文件类型
* @param filePath
* @return
*/
public static String getFileExtension(String filePath){
if(filePath.toUpperCase().endsWith("." + OFFICE_FORMAT_DOCX)){
return OFFICE_FORMAT_DOCX;
}
if(filePath.toUpperCase().endsWith("." + OFFICE_FORMAT_DOC)){
return OFFICE_FORMAT_DOC;
}
if(filePath.toUpperCase().endsWith("." + OFFICE_FORMAT_XLSX)){
return OFFICE_FORMAT_XLSX;
}
if(filePath.toUpperCase().endsWith("." + OFFICE_FORMAT_XLS)){
return OFFICE_FORMAT_XLS;
}
if(filePath.toUpperCase().endsWith("." + OFFICE_FORMAT_PPTX)){
return OFFICE_FORMAT_PPTX;
}
if(filePath.toUpperCase().endsWith("." + OFFICE_FORMAT_PPT)){
return OFFICE_FORMAT_PPT;
}
if(filePath.toUpperCase().endsWith("." + OFFICE_FORMAT_PDF)){
return OFFICE_FORMAT_PDF;
}
return null;
}
public static void pdfToJpg(String pdfFilePath, String outputPath) throws IOException {
File file = new File(pdfFilePath);
if(!outputPath.endsWith("/") && !outputPath.endsWith("\\")){
outputPath += File.separator;
}
File output = new File(outputPath);
if(!output.exists()){
output.mkdirs();
}
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);
int bs = 8;//图像输出时候,高宽比例放大,再次由图片转为PDF时候,在进行缩放,最终实现图像清晰度增强的目的
for (int i = 1; i <= pdffile.getNumPages(); i++) {
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*bs, // width &
rect.height*bs,// 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*bs, rect.height*bs,
BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(img, 0, 0, rect.width*bs, rect.height*bs,
null);
FileOutputStream out = new FileOutputStream(outputPath + i + ".jpg"); // 输出到文件流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param2 = encoder.getDefaultJPEGEncodeParam(tag);
param2.setQuality(1f, true);/**1f~0.01f是提高生成的图片质量 */
encoder.setJPEGEncodeParam(param2);
encoder.encode(tag); // JPEG编码
out.close();
}
}
/**
* 图片添加水印
* @param srcImgPath 需要添加水印的图片的路径
* @param outImgPath 添加水印后图片输出路径
* @param markContentColor 水印文字的颜色
* @param waterMarkContent 水印的文字
*/
public static void addWaterMarkToImg(String srcImgPath, String outImgPath, Color markContentColor, String waterMarkContent) {
try {
// 读取原图片信息
File srcImgFile = new File(srcImgPath);
File[] images = srcImgFile.listFiles();
for (int i = 0; i < images.length; i++) {
Image srcImg = ImageIO.read(images[i].getAbsoluteFile());
int srcImgWidth = srcImg.getWidth(null);
int srcImgHeight = srcImg.getHeight(null);
// 加水印
BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufImg.createGraphics();
g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
Font font = new Font(Font.SANS_SERIF, Font.PLAIN, 100); //设置水印文字字体及字号
g.setColor(markContentColor); //根据图片的背景设置水印颜色
g.setFont(font);
int y = 0;
没有合适的资源?快使用搜索试试~ 我知道了~
Word转PDF,PDF转图片,图片转PDF
共22个文件
jar:17个
class:1个
prefs:1个
需积分: 46 14 下载量 25 浏览量
2014-07-06
21:53:10
上传
评论
收藏 22.36MB RAR 举报
温馨提示
Word转PDF,PDF转图片,图片转PDF,需要安装openoffice,解决了失真的问题,暂时没有发现乱码,有问题可以邮件我51170526@163.com
资源推荐
资源详情
资源评论
收起资源包目录
OfficeUtil.rar (22个子文件)
OfficeUtil
bin
com
sinosoft
common
util
OfficeUtil.class 10KB
.settings
org.eclipse.jdt.core.prefs 598B
src
com
sinosoft
common
util
OfficeUtil.java 10KB
.project 386B
.classpath 1KB
libs
itextpdf-5.5.1.jar 2.04MB
unoil-3.0.1.jar 1.3MB
slf4j-api-1.7.7.jar 29KB
itext-asian.jar 2.07MB
ridl-3.0.1.jar 248KB
jurt-3.0.1.jar 106KB
itext-pdfa-5.5.1.jar 56KB
rt.jar 47.95MB
bcpkix-jdk15on-1.48.jar 571KB
jodconverter-2.2.2.jar 31KB
jodconverter-core-3.0-beta-4.jar 68KB
itext-xtra-5.5.1.jar 74KB
itext-hyph-xml.jar 943KB
bcprov-jdk15on-1.48.jar 2.21MB
PDFRenderer-0.9.0.jar 2MB
juh-3.0.1.jar 54KB
commons-io-1.4.jar 106KB
共 22 条
- 1
资源评论
WOXIN_PIAOXUE
- 粉丝: 0
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功