word、excel、图片转PDF文件
package test.pdf;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class ToPDF {
public static void main(String[] args) {
String docPath = "D:\\test\01.doc";
String docToPdfOutPath = "D:\\test\\02.pdf";
convertDoc2Pdf(docPath,docToPdfOutPath);
String imgPath = "D:\\test\03.jpg";
String imgToPdfOutPath = "D:\\test\\04.pdf";
convertImgToPdf(imgPath,imgToPdfOutPath);
String excelPath = "D:\\test\05.xlsx";
String excelToPdfOutPath = "D:\\test\\06.pdf";
convertExcelToPdf(excelPath,excelToPdfOutPath);
}
public static void convertDoc2Pdf(String docPath,String pdfPath){
ComThread.InitSTA();
// 实例化 objWord
ActiveXComponent objWord = new ActiveXComponent("Word.Application");
// 将本地word对象赋到 wordObject上
Dispatch wordObject = objWord.getObject();
// 使 word 为"可见",主要是方便调试。正式应用时,把true改为false
Dispatch.put(wordObject, "Visible", new Variant(true));
// 获得Documents对象
Dispatch documents = objWord.getProperty("Documents").toDispatch();
// 调用 Open 打开 Document
Dispatch document = Dispatch.call(documents, "Open", docPath).toDispatch();
Dispatch.call(document, "ExportAsFixedFormat", pdfPath, new Integer(17));
Dispatch.call(document, "Close");
Dispatch.call(wordObject, "quit");
ComThread.Release();
}
public static void convertImgToPdf(String imgFilePath, String pdfFilePath) {
File file = new File(imgFilePath);
if (file.exists()) {
Document document = new Document();
FileOutputStream fos = null;
try {
fos = new FileOutputStream(pdfFilePath);
PdfWriter.getInstance(document, fos);
// 添加PDF文档的某些信息,比如作者,主题等等
// document.addAuthor("arui");
// document.addSubject("test pdf.");
// 设置文档的大小
document.setPageSize(PageSize.A4);
// 打开文档
document.open();
// 写入一段文字
// document.add(new Paragraph("JUST TEST ..."));
// 读取一个图片
Image image = Image.getInstance(imgFilePath);
float imageHeight = image.getScaledHeight();
float imageWidth = image.getScaledWidth();
int i = 0;
while (imageHeight > 500 || imageWidth > 500) {
image.scalePercent(100 - i);
i++;
imageHeight = image.getScaledHeight();
imageWidth = image.getScaledWidth();
}
image.setAlignment(Image.ALIGN_CENTER);
// 设置图片的绝对位置
// image.setAbsolutePosition(0, 0);
// image.scaleAbsolute(500, 400);
// 插入一个图片
document.add(image);
} catch (Exception ioe) {
}
document.close();
try {
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void convertExcelToPdf(String inputFile, String pdfFile) {
final int xlTypePDF = 0;
ComThread.InitSTA(true);
ActiveXComponent ax = new ActiveXComponent("Excel.Application");
long date = new Date().getTime();
ax.setProperty("Visible", new Variant(false));
ax.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏
try {
Dispatch excels = ax.getProperty("Workbooks").toDispatch();
Dispatch excel = Dispatch.invoke(excels, "Open", Dispatch.Method, new Object[] { inputFile, new Variant(false), new Variant(false) },
new int[9]).toDispatch();
File tofile = new File(pdfFile);
if (tofile.exists()) {
tofile.delete();
}
// 转换格式
Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method, new Object[] {
new Variant(0), // PDF格式=0
pdfFile, new Variant(xlTypePDF), Variant.VT_MISSING, Variant.VT_MISSING, Variant.VT_MISSING, Variant.VT_MISSING,
new Variant(false), Variant.VT_MISSING }, new int[1]);
long date2 = new Date().getTime();
int time = (int) ((date2 - date) / 1000);
Dispatch.call(excel, "Close", new Variant(false));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ax != null) {
ax.invoke("Quit", new Variant[] {});
ax = null;
}
ComThread.Release();
}
}
}