import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
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.ComFailException;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant; public class JacobPDFConverter implements PDFConverter {
private static final int wdFormatPDF = 17;
private static final int xlTypePDF = 0;
private static final int ppSaveAsPDF = 32; public void convert2PDF(String inputFile, String pdfFile) {
String suffix = FileUtils.getFileSufix(inputFile);
File file = new File(inputFile);
if(!file.exists()){
System.out.println("文件不存在!");
return;
}
if(suffix.equals("pdf")){
System.out.println("PDF not need to convert!");
return ;
}
boolean isImg = false;//FileUtils.isImage(inputFile);
try{
isImg = FileUtils.isImage(inputFile);
}catch(Exception ce){ }
if(isImg){
img2PDF(inputFile,pdfFile);
}else if(suffix.equals("doc")||suffix.equals("docx")||suffix.equals("txt")){
word2PDF(inputFile,pdfFile);
}else if(suffix.equals("ppt")||suffix.equals("pptx")){
ppt2PDF(inputFile,pdfFile);
}else if(suffix.equals("xls")||suffix.equals("xlsx")){
excel2PDF(inputFile,pdfFile);
}else if(suffix.equals("wps")){
//wps2PDF(inputFile,pdfFile);
word2PDF(inputFile,pdfFile);
}else{
//System.out.println("文件格式不支持转换!");
word2PDF(inputFile,pdfFile);
}
} public void convert2PDF(String inputFile) {
String pdfFile = FileUtils.getFilePrefix(inputFile)+".pdf";
convert2PDF(inputFile,pdfFile); } public void convert2PDF(String[] inputFiles, String[] pdfFiles) {
try {
for(int i = 0;i<inputFiles.length;i++){
String inputFile = inputFiles[i];
String pdfFile = pdfFiles[i];
if(inputFile==null || inputFile.equals("")) continue;
convert2PDF(inputFile,pdfFile);
}
}catch (Exception ce) { }
} public void convert2PDF(String[] inputFiles) {
String pdfFiles[] = new String[inputFiles.length];
for(int i = 0;i<inputFiles.length;i++){
String inputFile = inputFiles[i];
String pdfFile = FileUtils.getFilePrefix(inputFile)+".pdf";
pdfFiles[i] = pdfFile;
}
convert2PDF(inputFiles,pdfFiles);
} public static void word2PDF(String inputFile,String pdfFile){
ActiveXComponent app = null;
Dispatch doc = null;
try {
ComThread.InitSTA();
app = new ActiveXComponent("Word.Application"); //打开word应用程序
app.setProperty("Visible", false); //设置word不可见
Dispatch docs = app.getProperty("Documents").toDispatch(); //获得word中所有打开的文档,返回Documents对象
//调用Documents对象中Open方法打开文档,并返回打开的文档对象Document
doc = Dispatch.call(docs,
"Open",
inputFile,
false,
true
).toDispatch();
Dispatch.call(doc,
"ExportAsFixedFormat",
pdfFile,
wdFormatPDF //word保存为pdf格式宏,值为17
);
} catch (ComFailException e) { } catch (Exception e) { } finally {
if (doc != null) {
Dispatch.call(doc, "Close", false); //关闭文档
}
if (app != null) {
app.invoke("Quit", 0); //关闭word应用程序
}
ComThread.Release();
}
}
public static void excel2PDF(String inputFile,String pdfFile){
ActiveXComponent app = null;
Dispatch excel = null;
try {
ComThread.InitSTA();
app = new ActiveXComponent("Excel.Application");
app.setProperty("Visible", false);
Dispatch excels = app.getProperty("Workbooks").toDispatch();
excel = Dispatch.call(excels,
"Open",
inputFile,
false,
true
).toDispatch();
Dispatch.call(excel,
"ExportAsFixedFormat",
xlTypePDF,
pdfFile
);
} catch (ComFailException e) { } catch (Exception e) { } finally {
if (excel != null) {
Dispatch.call(excel, "Close",false);
}
if (app != null) {
app.invoke("Quit");
}
ComThread.Release();
}
}
public static void ppt2PDF(String inputFile,String pdfFile){
ActiveXComponent app = null;
Dispatch ppt = null;
try {
ComThread.InitSTA();
app = new ActiveXComponent("PowerPoint.Application");
//app.setProperty("Visible", false);
Dispatch ppts = app.getProperty("Presentations").toDispatch();
ppt = Dispatch.call(ppts,
"Open",
inputFile,
true,//ReadOnly
true,//Untitled指定文件是否有标题
false//WithWindow指定文件是否可见
).toDispatch();
Dispatch.call(ppt,
"SaveAs",
pdfFile,
ppSaveAsPDF
);
} catch (ComFailException e) {
System.out.println(e.getMessage());
} catch (Exception e) { } finally {
if (ppt != null) {
Dispatch.call(ppt, "Close");
}
if (app != null) {
app.invoke("Quit");
}
ComThread.Release();
}
} public void wps2PDF(String inputFile,String pdfFile) {
File sFile = new File(inputFile);
File tFile = new File(pdfFile);
ActiveXComponent wps = null;
try {
ComThread.InitSTA();
wps = new ActiveXComponent("wps.application");
ActiveXComponent doc = wps.invokeGetComponent("Documents").invokeGetComponent("Open", new Variant(sFile.getAbsolutePath()));
doc.invoke("ExportPdf", new Variant(tFile.getAbsolutePath()));
doc.invoke("Close");
doc.safeRelease();
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
if (wps != null) {
wps.invoke("Terminate");
wps.safeRelease();
}
ComThread.Release();
}
} public void img2PDF(String inputFile,String pdfFile) {
Document doc = new Document(PageSize.A4, 20, 20, 20, 20);
try {
PdfWriter.getInstance(doc, new FileOutputStream(pdfFile));
doc.open();
doc.newPage();
Image img = Image.getInstance(inputFile);
float heigth = img.getHeight();
float width = img.getWidth();
int percent = getPercent(heigth, width);
img.setAlignment(Image.MIDDLE);
img.scalePercent(percent+3);// 表示是原来图像的比例;
doc.add(img);
doc.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
File mOutputPdfFile = new File(pdfFile);
if (!mOutputPdfFile.exists()) {
mOutputPdfFile.deleteOnExit();
return;
}
}
public static int getPercent(float h, float w) {
int p = 0;
float p2 = 0.0f;
p2 = 530 / w * 100;
p = Math.round(p2);
return p;
}
}

office转换成pdf的更多相关文章

  1. c# office转换成pdf

    下载地址 [url]http://www.microsoft.com/downloads/details.aspx?FamilyId=4D951911-3E7E-4AE6-B059-A2E79ED87 ...

  2. java-使用Jacob实现office转换成pdf

    参考路径: https://blog.csdn.net/csdnFlyFun/article/details/79523262#commentBox Jacob组件下载地址:https://sourc ...

  3. 关于office转换成pdf组件服务中的DCOM配置问题

    在开始->运行 中录入“dcomcnfg” 单击“确定”后弹出“组件服务”窗口 依次选择“组件服务”->“计算机”->“我的电脑”->“DCOM配置” 在“DCOM配置”下找到 ...

  4. C#将Word转换成PDF方法总结(基于Office和WPS两种方案)

    有时候,我们需要在线上预览word文档,当然我们可以用NPOI抽出Word中的文字和表格,然后显示到网页上面,但是这样会丢失掉Word中原有的格式和图片.一个比较好的办法就是将word转换成pdf,然 ...

  5. 服务器端打开office然后采用虚拟打印 转换成pdf

    服务器端打开office然后采用虚拟打印 转换成pdf [WebMethod] public bool ConvertWordTOPDF(string WordPath) { bool ret=fal ...

  6. java调用com组件将office文件转换成pdf

    在非常多企业级应用中都涉及到将office图片转换成pdf进行保存或者公布的场景,由于pdf格式的文档方便进行加密和权限控制(类似于百度文库).总结起来眼下将office文件转换 成pdf的方法主要有 ...

  7. ABBYY如何把图片转换成pdf格式

    在制作工作文件的时候,有时候会遇到需要进行文件格式转换的情况,比较常见的文件格式转换就包含了Office与pdf格式之间的转换.但除此之外,图片与pdf格式也是可以进行转换的,那么图片要怎么操作,才能 ...

  8. ASP.NET将word文档转换成pdf的代码

    一.添加引用 using Microsoft.Office.Interop.Word; 二.转换方法 1.方法 C# 代码 /// <summary> /// 把Word文件转换成pdf文 ...

  9. word ppt excel文档转换成pdf

    1.把word文档转换成pdf (1).添加引用 using Microsoft.Office.Interop.Word; 添加引用 (2).转换方法 /// <summary> /// ...

随机推荐

  1. C语言 · 瓷砖铺放

    算法训练 瓷砖铺放   时间限制:1.0s   内存限制:512.0MB        锦囊1 递归或递推.   问题描述 有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长 ...

  2. DCGAN in Tensorflow生成动漫人物

    引自:GAN学习指南:从原理入门到制作生成Demo 生成式对抗网络(GAN)是近年来大热的深度学习模型.最近正好有空看了这方面的一些论文,跑了一个GAN的代码,于是写了这篇文章来介绍一下GAN. 本文 ...

  3. 【进阶修炼】——改善C#程序质量(1)

    这是一个大纲形式的概要,以便自己可以花较少的时间反复阅读.在开发中,多加注意这些有用的建议,让自己成为一个更优秀的程序员.内容主要来自<编写高质量代码-改善C#程序的157个建议>(陆敏技 ...

  4. hdfs平衡分布

    这篇文章是从网上看到的,觉得很好就收藏了,但是最终不知道出处了. Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点.当HDFS出现不平衡状况的时候 ...

  5. MySql5.7配置文件my.cnf设置

    # MySql5.7配置文件my.cnf设置[client]port = 3306socket = /tmp/mysql.sock [mysqld]########################## ...

  6. nginx 4层tcp代理获取真实ip

    举个例子,Nginx 中的代理配置假如是这样配置的: location / { proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_a ...

  7. python里面有人写while 循环用 用while 1 和while True的区别

    由于Python2中,True/False不是关键字,因此我们可以对其进行任意的赋值,这就导致程序在每次循环时都需要对True/False的值进行检查:而对于1,则被程序进行了优化,而后不会再进行检查 ...

  8. 微信小程序——网盘图片预览

    微信小程序图片预览提供了一个wx.previewImage接口,如下图: 现在我需要对网盘文件里的图片预览,但是网盘从后台返回的数据是各种类型的文件,如下图所示: 那么我们需要解决2个问题: 1.从这 ...

  9. r语言 列出所有变量

    你希望知道目前工作空间中存在哪些已定义的变量和函数. 解决方案 使用ls函数,或者使用ls.str函数了解每个变量更详细的信息. 讨论 ls函数可以显示当前工作空间中所有对象的名称:> x &l ...

  10. lr11.0负载测试 real-world schedule 与basic schedule的区别是什么

    real-world schedule 是真实场景模式  可以通过增加ACTION来增加多个用户 basic schedule 是我们以前用的 经典模式  只能设置一次负载的上升和下降